payamvha/North_RAG huggingface dataset:
می‌شود که سرعت پردازش #C نیز از جاوا پایین‌تر باشد اما امکانات گسترده‌تری را در زمینه‌های خاصی مانند طراحی وب یا ساخت برنامه‌های سبک‌پردازشی روی سیستم‌عامل را فراهم کند اگرچه با صرف میزان بیشتری از منابع حافظه و پردازشی همراه است. سیستم نوع‌گذاری. یک سیستم نوع‌گذاری مشخص می‌کند که یک زبان برنامه‌نویسی چگونه مقادیر و عبارات را در نوع (type) دسته‌بندی می‌کند، چگونه می‌تواند آن نوع‌ها را تغییر دهد و رفتار متقابل آن‌ها چگونه است. این کار عموماً توضیح داده ساختارهایی که می‌توانند در آن زبان ایجاد شوند را شامل
که می‌توانند در آن زبان ایجاد شوند را شامل می‌شود. طراحی و مطالعه سیستم‌های نوع‌گذاری به وسیلهٔ ریاضیات قراردادی را تئوری نوع‌گذاری می‌گویند. زبان‌های نوع‌گذاری شده و بدون نوع‌گذاری. یک زبان نوع‌گذاری شده است اگر مشخصات هر عملیات، نوع داده‌های قابل اجرا توسط آن را با نشان دادن نوع‌هایی که برای آن‌ها قابل اجرا نیست، تعیین کند. برای مثال، «این متن درون گیومه قرار دارد» یک رشته است. در بیشتر زبان‌های برنامه‌نویسی، تقسیم یک رشته با یک عدد معنایی ندارد. در نتیجه بیشتر زبان‌های برنامه‌نویسی مدرن ممکن است اجرای
بیشتر زبان‌های برنامه‌نویسی مدرن ممکن است اجرای این عملیات را توسط برنامه‌ها رد کنند. در برخی زبان‌ها، عبارات بی‌معنی ممکن است هنگام ترجمه (compile) پیدا شود (چک‌کنندهٔ نوع ایستا)، و توسط کامپایلر رد شود، در حالی که در سایر برنامه‌ها، هنگام اجرا پیدا شود. (چک‌کننده نوع دینامیک) که به استثنای در حال اجرا منتج شود(runtime exception). حالت خاص زبان‌های نوع دار زبان‌های تک نوع هستند. بیشتر این زبان‌ها اسکریپتی یا مارک آپ هستند، مانند rexx و SGML و فقط یک داده گونه دارند—غالباً رشته‌های کاراکتری که هم برای
گونه دارند—غالباً رشته‌های کاراکتری که هم برای داده‌های عددی و هم برای داده‌های سمبلی کاربرد دارند. در مقابل، یک زبان بدون نوع گذاری، مثل اکثر زبان‌های اسمبلی، این امکان را می‌دهد که هر عملیاتی روی هر داده‌ای انجام شود، که معمولاً دنباله‌ای از بیت‌ها با طول‌های متفاوت در نظر گرفته می‌شوند. زبان‌های سطح بالا که بی نوع هستند شامل زبان‌های ساده رایانه‌ای و برخی از انواع زبان‌های نسل چهارم. در عمل، درحالی‌که تعداد بسیار کمی از دیدگاه نظریه نوع، نوع‌گذاری شده تلقی می‌شوند (چک کردن یا رد کردن تمام عملیات‌ها)،
تلقی می‌شوند (چک کردن یا رد کردن تمام عملیات‌ها)، بیشتر زبان‌های امروزی درجه‌ای از نوع‌گذاری را فراهم می‌کنند. بسیاری از زبان‌های تولیدکننده راهی را برای گذشتن یا موقوف کردن سیستم نوع فراهم می‌کنند. نوع‌گذاری ایستا و پویا. در نوع‌گذاری ایستا تمام عبارات نوع‌های خود را قبل از اجرای برنامه تعیین می‌کنند (معمولاً در زمان کامپایل). برای مثال، ۱ و (۲+۲) عبارات عددی هستند؛ آن‌ها نمی‌توانند به تابعی که نیاز به یک رشته دارد داده شوند، یا در متغیری که تعریف شده تا تاریخ را نگه دارد، ذخیره شوند. زبان‌های نوع‌گذاری
تاریخ را نگه دارد، ذخیره شوند. زبان‌های نوع‌گذاری شده ایستا می‌توانند با مانیفست نوع‌گذاری شوند یا با استفاده از نوع استنباط شوند. در حالت اول، برنامه‌نویس بیشتر صریحاً نوع‌ها را در جایگاه‌های متنی مشخص می‌نویسد (برای مثال، در تعریف متغیرها). در حالت دوم، کامپایلر نوع عبارات و تعریف‌ها را بر اساس متن استنباط می‌کند. بیشتر زبان‌های مسیر اصلی (mainstream) ایستا نوع‌گذاری شده‌اند، مانند #C++ ,C و Java که با مانیفست نوع‌گذاری می‌شوند. نوع‌گذاری قوی و ضعیف. نوع‌گذاری ضعیف این امکان را ایجاد می‌کند که با متغیری
ضعیف این امکان را ایجاد می‌کند که با متغیری به جای متغیری دیگر برخورد شود، برای مثال رفتار با یک رشته به عنوان یک عدد. این ویژگی بعضی اوقات ممکن است مفید باشد، اما ممکن است باعث ایجاد برخی مشکلات برنامه شود که موقع کامپایل و حتی اجرا پنهان بمانند. نوع‌گذاری قوی مانع رخ دادن مشکل فوق می‌شود. تلاش برای انجام عملیات روی نوع نادرست متغیر منجر به رخ دادن خطا می‌شود. زبان‌هایی که نوع‌گذاری قوی دارند غالباً با نام «نوع-امن» یا امن شناخته می‌شوند. تمام تعاریف جایگزین برای «ضعیف نوع‌گذاری شده» به زبان‌ها اشاره
برای «ضعیف نوع‌گذاری شده» به زبان‌ها اشاره می‌کند، مانند C++ ,JavaScript و Perl که اجازه تعداد زیادی تبدیل نوع داخلی را می‌دهند. در جاوااسکریپت، برای مثال، عبارت ۲*x به صورت ضمنی x را به عدد تبدیل می‌کند، و این تبدیل موفقیت‌آمیز خواهد بود حتی اگر x خالی، تعریف نشده، یک آرایه، یا رشته‌ای از حروف باشد. چنین تبدیل‌های ضمنی در بیشتر موارد مفیدند، اما خطاهای برنامه‌نویسی را پنهان می‌کنند. قوی و ایستا در حال حاضر عموماً دو مفهوم متعامد فرض می‌شوند، اما استفاده در ادبیات تفاوت دارد، برخی عبارت «قوی نوع‌گذاری شده»
ادبیات تفاوت دارد، برخی عبارت «قوی نوع‌گذاری شده» را به کار می‌برند و منظورشان قوی، ایستایی نوع‌گذاری شده است، و یا، حتی گیج‌کننده‌تر، منظورشان همان ایستایی نوع‌گذاری شده است؛ بنابراین C هم قوی نوع‌گذاری شده و هم ضعیف و ایستایی نوع‌گذاری شده نامیده می‌شود. معناشناسی اجرا. وقتی که داده مشخص شد، ماشین باید هدایت شود تا عملیات‌ها را روی داده انجام دهد. معناشناسی اجرا ی یک زبان تعیین می‌کند که چگونه و چه زمانی ساختارهای گوناگون یک زبان باید رفتار برنامه را ایجاد کنند. برای مثال، معناشناسی ممکن است استراتژی را
کنند. برای مثال، معناشناسی ممکن است استراتژی را که به وسیله آن عبارات ارزیابی می‌شوند را تعریف کند یا حالتی را که ساختارهای کنترلی تحت شرایطی دستورها را اجرا می‌کنند. کتابخانهٔ هسته. بیشتر زبان‌های برنامه‌نویسی یک کتابخانهٔ هسته مرتبط دارند (گاهی "کتابخانهٔ استاندارد" نامیده می‌شوند، مخصوصاً وقتی که به عنوان قسمتی از یک زبان استاندارد ارائه شده باشند)، که به‌طور قراردادی توسط تمام پیاده‌سازی‌های زبان در دسترس قرار گرفته باشند. کتابخانهٔ هسته معمولاً تعریف الگوریتم‌ها، داده ساختارها و مکانیزم‌های ورودی و
الگوریتم‌ها، داده ساختارها و مکانیزم‌های ورودی و خروجی پرکاربرد را در خود دارد. کاربران یک زبان، در بیشتر موارد با کتابخانهٔ هسته به عنوان قسمتی از آن رفتار می‌کنند، اگرچه طراحان ممکن است با آن به صورت یک مفهوم مجزا رفتار کرده باشند. بسیاری از ویژگی‌های زبان هسته‌ای را مشخص می‌کنند که باید در تمام پیاده‌سازی‌ها موجود باشند، و در زبان‌های استاندارد شده این کتابخانهٔ هسته ممکن است نیاز باشد؛ بنابراین خط بین زبان و کتابخانهٔ هستهٔ آن از زبانی به زبان دیگر متفاوت است. در واقع، برخی زبان‌ها به گونه‌ای تعریف
است. در واقع، برخی زبان‌ها به گونه‌ای تعریف شده‌اند که برخی از ساختارهای دستوری بدون اشاره به کتابخانه هسته قابل استفاده نیستند. برای مثال در جاوا، یک رشته به عنوان نمونه‌ای از کلاس “java.lang.String” تعریف شده است؛ به‌طور مشابه، در سمال تاک (smalltalk) یک تابع بی‌نام (یک "بلاک") نمونه‌ای از کلاس BlockContext کتابخانه می‌سازد. به‌طور معکوس، Scheme دارای چندین زیرمجموعه مرتبط برای ایجاد سایر ماکروهای زبان می‌باشد، و در نتیجه طراحان زبان حتی این زحمت را نیز تحمل نمی‌کنند که بگویند کدام قسمت زبان به عنوان
تحمل نمی‌کنند که بگویند کدام قسمت زبان به عنوان ساختارهای زبان باید پیاده‌سازی شوند، و کدام یک به عنوان بخشی از کتابخانه. مدیریت منابع و نشت حافظه. مدیریت منابع به دوشاخه پردازش و حافظه (موقت یا دائم یا دورگه (موقت مجازی)) تقسیم می‌شود و در یک عبارت خلاصه می‌شود: در ایده‌آل‌ترین حالت صرفه‌جویی در حافظه، میزان پردازش را افزایش می‌دهد و صرفه‌جویی در پردازش، حافظه مصرفی را افزایش می‌دهد (این موضوع در بانک‌های اطلاعاتی با عنوان نرمالیزیشن و دینرمالیزیشن شناخته می‌شود). مقدار حافظه اختصاص داده شده برای یک متغیر
مقدار حافظه اختصاص داده شده برای یک متغیر عدد کوتاه ۸ بیتی در زبان ایستا قابل مقایسه با یک متغیر طولانی ۳۲بیتی نیست که این موضوع در زبان ایستا به صراحت و مستقیم توسط کد نوشته‌شده برنامه‌نویس تعیین می‌شود (در زبان پویا نیاز به اجرای کد زیرساختاری اضافی کوچک دیگری هست تا تشخیص دهد که چه نوع مقداری به این متغیر اختصاص داده شده؟ استرینگ رشته یا عدد بزرگ یا کوچک؟). این تفاوت ظرفیت عددها در زمان تفکیک برنامه‌های ۶۴بیتی در مقایسه با برنامه‌های ۳۲بیتی حتی برای عموم مردم کاملاً فاحش می‌شود (با اشاره به این نکته
مردم کاملاً فاحش می‌شود (با اشاره به این نکته حاشیه‌ای که برنامه‌های ۳۲بیتی به دلیل محدودیت عددی توان اندازه‌گیری حافظه بیشتر از ۴میلیارد و اندی بایت را ندارند که معادل ۴گیگابایت است که در مبنای ۲ به توان ۳۲ محاسبه شده باشد در نتیجه سیستم‌عامل ۳۲بیتی نمی‌تواند روی یک سیستم با رَم بیش از ۴ گیگابایت نصب شود). تفاوت زبان‌های پویا با ایستا فقط در تعریف نوع متغیر نیست بلکه همان‌طور که دربارهٔ اعداد مطرح شد به زمینه مدیریت حافظه یا مموری منیجمنت نیز کشیده می‌شود همچنین بارگذاری خودکار کتابخانه‌ها و گسترده کردن
همچنین بارگذاری خودکار کتابخانه‌ها و گسترده کردن کتابخانه‌های محیط اجرای برنامه. البته زبان‌های ایستای مدرن مانند C# با زبان میانجی IL یا جاوا و ماشین مجازی‌اش از مدیریت حافظه بهره می‌برند و به نوعی دورگه و هیبرید هستند تا تعادلی بین مدیریت حافظه و مدیریت پردازش را بدون تایپ‌کستیگ ایجاد کنند. تفاوت سرعت پردازش زبان‌های ایستا و پویا در برنامه‌هایی که نیاز به پردازش‌های بسیار حجیم در مدت زمان بسیار کوتاه دارند خودش را نشان می‌دهد بنابراین تفاوت سرعت پردازش در مورد حتی وبگاه‌های بسیار شلوغ آنقدر نیست که
در مورد حتی وبگاه‌های بسیار شلوغ آنقدر نیست که امکانات فراهم شده توسط یک زبان سطح بالا مانند php یا python را فدای سرعت C++ کنند البته برای مثال فیسبوک مجبور شد که php را به‌واسطه c++ بر روی facebook hiphop گسترش دهد تا به سرعت پردازش مطلوب خودش برسد. برای مثال دربارهٔ python توصیه شده است که حلقه‌های چرخشی روی حجم بالای داده را به‌واسطه لوپ خود پایتون و با اندیس index انجام ندهید بلکه یک آرایه array تهیه کرده و چرخش را به زیرساخت C++ آن واگذار کنید. اما مسئله مدیریت حافظه و نشت آن یا memory leakage از
مسئله مدیریت حافظه و نشت آن یا memory leakage از آنجاست که در زمان اجرای برنامه (runtime) ابتدا فضایی از حافظه به نام کداسپیس به کد اختصاص داده می‌شود و به بقیه حافظه در دسترس heap گفته می‌شود. مسئولیت استفاده و تضمین خالی کردن بخش اشغال‌شده از heap پس از پایان کار به عهده خود برنامه‌نویس است در غیر اینصورت برنامه ممکن است دچار نشت حافظه شود. در زمان ران‌تایم جدولی از کداسپیس درون ساختار زبان برای تعیین حافظه مورد استفاده هر بخش از کد (مثلاً یک تابع یا فانکشن) اختصاص داده می‌شود که به هر بخش از آن اصطلاحاً
اختصاص داده می‌شود که به هر بخش از آن اصطلاحاً Scope گفته می‌شود که تعیین می‌کند که کدام متغیرها توسط کدام بخش از کد استفاده می‌شوند تا در آغاز یک scope آن متغیرها درون محیط مثلاً یک تابع ایجاد شوند و پس از اجرا کاملاً پاک شوند (کسانی که در محیط ساده بورن شل کار کرده‌اند با این موضوع به خوبی آشنا می‌شوند). اما در زمان استفاده از رفرنس خارجی در قالب pointer (اختصاصی زبان C++) آن متغیری که به ظاهر در محیط اسکوپ استفاده می‌شود در واقع فقط یک میان‌بر رفرنس است به پوینتری که فضایی را روی حافظه تعیین کرده است که
پوینتری که فضایی را روی حافظه تعیین کرده است که خارج از محدوده اسکوپ مثلاً تابع فعلی ما قرار دارد در نتیجه با پایان کار فانکشن ما، فضای اختصاصی آن پوینتر تخلیه نمی‌شود بلکه فقط متغیر رفرنسی که به آن اشاره می‌کرده پاک می‌شود و نشت حافظه رخ می‌دهد (به آن pointer که هیچ متغیر رفرنسی نداشته باشد پوینتر وحشی یا wild گفته می‌شود) و این پوینتر می‌تواند یک شی بانک اطلاعاتی دارای حجم انبوهی از داده‌های استخراج شده باشد یا یک شی ارتباطی بانک اطلاعاتی که از دسترس خارج شده‌اند اما فضای حافظه را تا زمان بازبودن برنامه
شده‌اند اما فضای حافظه را تا زمان بازبودن برنامه اشغال می‌کنند. رفرنس‌های پوینتر حتی در زبان‌های سطح بالا مانند php و python یا C# هنوز در لایه زیرین ناپیدا استفاده می‌شوند برای انتقال متغیرها در سراسر برنامه اما زبان سطح بالا تعداد رفرنس‌های موجود به هر پوینتر را حفظ می‌کند و زمانی که این تعداد صفر بشود زمان مرگ پوینتر و تخلیه آن فرا رسیده یا آن را به سطل زباله گاربیج‌کالکشن می‌فرستد تا همه آن‌ها را با هم و در یک نوبت تخلیه کند و از بار پردازشی اضافه ناشی از تخلیه مکرر بکاهد اگرچه تعداد نوبت‌های تخلیه
از تخلیه مکرر بکاهد اگرچه تعداد نوبت‌های تخلیه گاربیج‌کالکشن در تنظیمات برنامه یا سرور ماشین مجازی قابل تنظیم است. طراحی و پیاده‌سازی. زبان برنامه‌نویسی یک مکانیزم ساخت یافته برای تعریف داده‌ها، و عملیات یا تبدیل‌هایی که ممکن است به‌طور اتوماتیک روی آن داده انجام شوند، فراهم می‌کند. یک برنامه‌نویس از انتزاعات آماده در زبان استفاده می‌کند تا مفاهیم به کار رفته در محاسبات را بیان کند. این مفاهیم به عنوان یک مجموعه از ساده‌ترین عناصر موجود بیان می‌شوند (مفاهیم ابتدایی نامیده می‌شوند). زبان‌های برنامه‌نویسی با
ابتدایی نامیده می‌شوند). زبان‌های برنامه‌نویسی با بیشتر زبان‌های انسانی تفاوتی دارد و آن این است که نیاز به بیان دقیق تر و کامل تری دارد. هنگام استفاده از زبان‌های طبیعی برای ارتباط با دیگر انسان‌ها، نویسندگان و گویندگان می‌توانند مبهم باشند و اشتباهات کوچک داشته باشند، و همچنان انتظار داشته باشند که مخاطب آن‌ها متوجه شده باشد. اگرچه، مجازا، رایانه‌ها «دقیقاً آنچه که به آن‌ها گفته شده را انجام می‌دهند.» و نمی‌توانند «بفهمند» که نویسنده دقیقاً چه کدی مد نظر داشته است] البته امروزه برنامه‌هایی برای انجام این
است] البته امروزه برنامه‌هایی برای انجام این کار تولید شده‌اند و تلاش‌های بسیاری در این زمینه انجام شده ولی هنوز به نتیجهٔ رضایت بخشی نرسیده است[. ترکیب تعریف زبان، یک برنامه، و ورودی برنامه به‌طور کامل رفتار خروجی را به هنگام اجرای برنامه (در محدوده کنترل آن برنامه) مشخص می‌کند. برنامه‌های یک رایانه ممکن است در یک فرایند ناپیوسته بدون دخالت انسان اجرا شوند، یا یک کاربر ممکن است دستورهای را در یک مرحله فعل و انفعال مفسر تایپ کند. در این حالت «دستور»ها همان برنامه‌ها هستند، که اجرای آن‌ها زنجیروار به هم
برنامه‌ها هستند، که اجرای آن‌ها زنجیروار به هم مرتبطند. به زبانی که برای دستور دادن به برنامه‌ای استفاده می‌شود، زبان اسکریپت می‌گویند. بسیاری از زبان‌ها کنار گذاشته شده‌اند، برای رفع نیازهای جدید جایگزین شده‌اند، با برنامه‌های دیگر ترکیب شده‌اند و در نهایت استعمال آن‌ها متوقف شده است. با وجود اینکه تلاش‌هایی برای طراحی یک زبان رایانه« کامل» شده است که تمام اهداف را تحت پوشش قرار دهد، هیچ‌یک نتوانستند به‌طور کلی این جایگاه را پر کنند. نیاز به زبان‌های رایانه‌ای گسترده از گستردگی زمینه‌هایی که زبان‌ها
رایانه‌ای گسترده از گستردگی زمینه‌هایی که زبان‌ها استفاده می‌شوند، ناشی می‌شود: یک سیر رایج در گسترش زبان‌های برنامه‌نویسی این است که قابلیت حل مسائلی با درجات انتزاعی بالاتری را اضافه کنند. زبان‌های برنامه‌نویسی اولیه به سخت‌افزار رایانه گره خورده بودند. همان‌طور که زبان‌های برنامه‌نویسی جدید گسترش پیدا کرده‌اند، ویژگی‌هایی به برنامه‌ها افزوده شده که به برنامه‌نویس اجازه دهد که ایده‌هایی که از ترجمه ساده به دستورهای سخت‌افزار دورتر هستند نیز استفاده کند. چون برنامه‌نویس‌ها کمتر به پیچیدگی رایانه محدود
چون برنامه‌نویس‌ها کمتر به پیچیدگی رایانه محدود شده‌اند، برنامه‌های آن‌ها می‌تواند محاسبات بیشتری با تلاش کمتر از سوی برنامه‌نویس انجام دهند. این به آن‌ها این امکان را می‌دهد که کارایی بیشتر در واحد زمان داشته باشند. «پردازنده‌های زبان طبیعی» به عنوان راهی برای ازبین بردن نیاز به زبان‌های اختصاصی برنامه‌نویسی پیشنهاد شده‌اند. هرچند، این هدف دور است و فواید آن قابل بحث است. «ادسگر دیجسترا» موافق بود که استفاده از یک زبان رسمی برای جلوگیری از مقدمه‌سازی ساختارهای بی‌معنی واجب است، و زبان برنامه‌نویسی طبیعی
بی‌معنی واجب است، و زبان برنامه‌نویسی طبیعی را با عنوان «احمقانه» رد کرد، «آلن پرلیس» نیز مشابهاً این ایده را رد کرد. مطابق با متدولوژی نامتجانس استفاده شده توسط langpop.com در سال ۲۰۰۸، ۱۲ زبان پرکاربرد عبارتند از: C, C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby, Shell, SQL, and Visual Basic طراحان زبان و کاربران باید مصنوعاتی ایجاد کنند تا برنامه‌نویسی را در عمل ممکن سازند و کنترل کنند. مهم‌ترین این مصنوعات خصوصیات و پیاده‌سازی‌های زبان هستند. مشخصات. خصوصیات یک زبان برنامه‌نویسی باید تعریفی فراهم
خصوصیات یک زبان برنامه‌نویسی باید تعریفی فراهم کند که کاربران و پیاده‌کننده‌های زبان می‌توانند از آن استفاده کنند تا مشخص کنند کد منبع یک برنامه در آن زبان درست و معتبر است یا خیر، اگر اینطور باشد رفتار او چگونه خواهد بود. مشخصات زبان برنامه‌نویسی می‌تواند اشکال مختلفی داشته باشد، از جمله موارد زیر: پیاده‌سازی. پیاده‌سازی یک زبان برنامه‌نویسی امکان اجرای آن برنامه را روی پیکربندی مشخصی از سخت‌افزار و نرم‌افزار را فراهم می‌کند. به‌طور وسیع، دو راه رسیدن به پیاده‌سازی زبان برنامه‌نویسی وجود دارد. کامپایل
پیاده‌سازی زبان برنامه‌نویسی وجود دارد. کامپایل کردن و تفسیر کردن. به‌طور کلی با هر بک از ابن دو روش می‌توان یک زبان را پیاده‌سازی کرد. خروجی یک کامپایلر ممکن است با سخت‌افزار یا برنامه‌ای به نام مفسر اجرا شود. در برخی پیاده‌سازی‌ها که از مفسر استفاده می‌شود، مرز مشخصی بین کامپایل و تفسیر وجود ندارد. برای مثال، برخی پیاده‌سازی‌های زبان برنامه‌نویسی بیسیک کامپایل می‌کنند و سپس کد را خط به خط اجرا می‌کنند. برنامه‌هایی که مستقیماً روی سخت‌افزار اجرا می‌شوند، چندین برابر سریعتر از برنامه‌هایی که در نرم‌افزار
چندین برابر سریعتر از برنامه‌هایی که در نرم‌افزار تفسیر می‌شوند اجرا می‌شوند. یک تکنیک برای بهبود عملکرد برنامه‌های تفسیر شده کامپایل در لحظه آن است. در این روش ماشین مجازی، دقیقاً قبل از اجرا، بلوک‌های کدهای بایتی که قرار است استفاده شوند را برای اجرای مستقیم روی سخت‌افزار ترجمه می‌کند زبان‌های اختصاصی. اگرچه بیشترین زبان‌های برنامه‌نویسی متداول دارای مشخصات و پیاده‌سازی‌های کاملاً باز هستند، بسیاری از زبان‌های برنامه‌نویسی فقط به عنوان زبان‌های برنامه‌نویسی اختصاصی با اجرای فقط از یک فروشنده منفرد موجود
اختصاصی با اجرای فقط از یک فروشنده منفرد موجود هستند، که ممکن است ادعا کنند چنین یک زبان اختصاصی خاصیت معنوی آنها است. زبان‌های برنامه‌نویسی اختصاصی معمولاً زبان‌های خاص دامنه یا زبان‌های برنامه‌نویسی داخلی برای یک محصول واحد هستند. برخی از زبان‌های اختصاصی فقط در داخل یک فروشنده استفاده می‌شوند، در حالی که برخی دیگر در دسترس کاربران خارجی است. برخی از زبان‌های برنامه‌نویسی در مرز بین اختصاصی و آزاد وجود دارند. به عنوان مثال، شرکت Oracle ادعا می‌کند حقوق اختصاصی برخی از جنبه‌های زبان برنامه‌نویسی جاوا، و
برخی از جنبه‌های زبان برنامه‌نویسی جاوا، و زبان برنامه‌نویسی #C مایکروسافت، که پیاده‌سازی‌های بیشتری در اکثر بخش‌های سیستم دارد، همچنین دارای اجرای مشترک زبان مشترک (CLR) به عنوان یک محیط بسته است. بسیاری از زبان‌های اختصاصی، علی‌رغم ماهیت اختصاصی، به‌طور گسترده مورد استفاده قرار می‌گیرند. مثال‌ها شامل MATLAB, VBScript و Wolfram Language هستند. برخی از زبان‌ها ممکن است انتقال از بسته به باز را تغییر دهند. به عنوان مثال، ارلانگ در ابتدا زبان برنامه‌نویسی داخلی اریکسون بود. کاربرد. هزاران زبان مختلف
داخلی اریکسون بود. کاربرد. هزاران زبان مختلف برنامه‌نویسی، به‌طور عمده در زمینهٔ محاسبات ایجاد شده‌اند. پروژه‌های نرم‌افزاری انفرادی معمولاً از پنج زبان برنامه‌نویسی یا بیشتر استفاده می‌کنند. زبان‌های برنامه‌نویسی با بسیاری از اشکال دیگر بیان انسان متفاوتند زیرا نیاز به درجهٔ دقت و صحت بیشتری دارند. هنگام استفاده از یک زبان طبیعی برای برقراری ارتباط با افراد دیگر، نویسندگان و گویندگان بشر می‌توانند مبهم باشند و خطاهای کوچکی مرتکب شوند و همچنان انتظار دارند که هدف آنها درک شود. با این حال، به‌طور تصویری،
که هدف آنها درک شود. با این حال، به‌طور تصویری، رایانه‌ها «دقیقاً کاری را که به آنها گفته می‌شود انجام دهند» انجام می‌دهند و نمی‌توانند «بفهمند» چه برنامه‌ای را برای برنامه‌نویسی برنامه‌نویس نوشته است. ترکیب تعریف زبان، یک برنامه و ورودی‌های برنامه باید به‌طور کامل رفتارهای خارجی را که هنگام اجرای برنامه رخ می‌دهد، در دامنه کنترل آن برنامه مشخص کند. از طرف دیگر، ایده‌های مربوط به یک الگوریتم را می‌توان بدون استفاده از دقت مورد نیاز برای اجرای با استفاده از pseudocode که به زبان طبیعی با کد نوشته شده با یک
pseudocode که به زبان طبیعی با کد نوشته شده با یک زبان برنامه‌نویسی متصل می‌شود، به انسان‌ها انتقال داد. یک زبان برنامه‌نویسی یک مکانیسم ساختاری برای تعریف بخش‌هایی از داده‌ها و عملیات یا تحولاتی که ممکن است به‌طور خودکار بر روی آن داده‌ها انجام شود فراهم می‌کند. یک برنامه‌نویس از انتزاعات موجود در زبان برای نشان دادن مفاهیم درگیر در یک محاسبه استفاده می‌کند. این مفاهیم به عنوان مجموعه ای از ساده‌ترین عناصر موجود (به نام ابتدایی) ارائه می‌شوند. برنامه‌نویسی فرایندی است که توسط آن برنامه‌نویسان این اولیه را
فرایندی است که توسط آن برنامه‌نویسان این اولیه را برای تهیه برنامه‌های جدید ترکیب می‌کنند، یا برنامه‌های موجود را با کاربردهای جدید یا یک محیط در حال تغییر تطبیق می‌دهند. برنامه‌های رایانه ممکن است در یک فرایند دسته ای بدون تعامل انسان اجرا شود، یا ممکن است یک کاربر دستورالعمل‌ها را در یک جلسه تعاملی یک مترجم تایپ کند. در این حالت «دستورها» صرفاً برنامه‌هایی هستند که اجرای آنها با هم زنجیر شده است. هنگامی‌که یک زبان می‌تواند دستورها خود را از طریق یک مترجم اجرا کند (مانند پوسته یونیکس یا دیگر رابط خط
اجرا کند (مانند پوسته یونیکس یا دیگر رابط خط فرمان)، بدون تدوین، به آن اسکریپت می‌گویند. اندازه‌گیری میزان استفاده از زبان. مشکل است که مشخص کنیم کدام زبان برنامه‌نویسی بیشتر مورد استفاده است، و اینکه کاربرد چه معنی می‌دهد با توجه به زمینه تغییر می‌کند. یک زبان ممکن است زمان بیشتری از برنامه‌نویس بگیرد، زبان دیگر ممکن است خطوط بیشتری داشته باشد، و دیگری ممکن است زمان بیشتری از پردازنده را مصرف کند. برخی زبان‌ها برای کاربردهای خاص بسیار محبوبند. برای مثال: کوبول همچنان در مراکز داده متحد، غالباً روی
مثال: کوبول همچنان در مراکز داده متحد، غالباً روی رایانه‌های بزرگ توانا است؛ fortran در مهندسی برنامه‌های کاربردی، Ada در هوا و فضا، حمل و نقل، نظامی، برنامه‌های واقعی و جاسازی شده در زمان واقعی؛ و C در برنامه‌های تعبیه شده و سیستم‌های عامل؛ و بقیه برنامه‌ها معمولاً برای نوشتن انواع دیگر برنامه‌ها کاربرد دارند.. روش‌های مختلفی برای سنجش محبوبیت زبان‌ها، هر یک متناسب یا یک ویژگی محوری متفاوت پیشنهاد شده است: در اکتبر 2024 گیت‌هاب یک گزارش کامل از وضعیت پروژه های متن باز منتشر کرد. مطابق امار گیت‌هاب بیشتر
های متن باز منتشر کرد. مطابق امار گیت‌هاب بیشتر پروژه های آزاد در سال 2024 از زبان پایتون استفاده می‌کردند در حالی که در تمامی سال های گذشته جاوااسکریپت رتبه اول را در بین زبان های استفاده شده در پروژه های آزاد را داشت. این به‌خاطر این است که در همین سال پروژه های مربوط به یادگیری ماشین و یادگیری عمیق در گیت‌هاب آمار بیشتری داشتند. همچنین زبان تایپ اسکریپت با رشد بی سابقه اس به عنوان رتبه سوم و زبان های جاوا، سی‌شارپ، سی‌پلاس‌پلاس، پی‌اچ‌پی، شِل‌اسکریپت، سی و Go در رتبه های چهارم تا دهم بیشترین استفاده در
و Go در رتبه های چهارم تا دهم بیشترین استفاده در پروژه های آزاد قرار دارند وب سایت stackify.com با تلفیق و میانگین اطلاعات از سایت‌های مختلف اینترنتی، ده زبان محبوب برنامه‌نویسی را به صورت زیر گزارش داد: Ruby Java C Python JavaScript VB NET. (زبان برنامه‌نویسی نیست، مگر اینکه منظور زبان های زیرمجموعه این فریمورک بوده باشد!) R PHP MATLAB HTML (مطابق RFC 1866 زبان HTML زبان برنامه‌نویسی نیست!) CSS (مطابق RFC 2318 زبان برنامه‌نویسی نیست!) SSAS گویشها، طعم دهنده‌ها و پیاده‌سازی‌ها. گویش یک زبان برنامه‌نویسی یا
و پیاده‌سازی‌ها. گویش یک زبان برنامه‌نویسی یا یک زبان تبادل اطلاعات یک تغییر یا گسترش زبان (نسبتاً کوچک) است که ماهیت ذاتی آن را تغییر نمی‌دهد. با زبان‌هایی مانند Scheme و Forth، ممکن است استانداردها توسط مجریان ناکافی، ناکافی یا نامشروع تلقی شوند، بنابراین آنها در بیشتر موارد با ایجاد یک گویش جدید از استاندارد منحرف می‌شوند. در موارد دیگر، یک گویش برای استفاده در یک زبان خاص دامنه، بیشتر زیر مجموعه ایجاد می‌شود. در دنیای Lisp، بیشتر زبان‌هایی که از اصطلاحات اصطلاحاتی اصطلاحات S و اصطلاحات شبیه به Lisp
اصطلاحاتی اصطلاحات S و اصطلاحات شبیه به Lisp استفاده می‌کنند، لهجه‌های Lisp در نظر گرفته می‌شوند، گرچه تفاوت‌های وحشیانه‌ای دارند، به عنوان مثال، راکت و کلوژ. از آنجا که معمول است که یک زبان چند لهجه داشته باشد، پیدا کردن اسناد مناسب برای یک برنامه‌نویس بی‌تجربه بسیار دشوار است. زبان برنامه‌نویسی BASIC گویش‌های زیادی دارد. انفجار گویش‌های چهارم منجر به این جمله شد که «اگر یک مورد دیگر را دیده‌اید … یکی دیگر را دیده‌اید.» طبقه‌بندی‌ها. هیچ برنامهٔ غالبی برای دسته‌بندی زبان‌های برنامه‌نویسی وجود ندارد. یک
دسته‌بندی زبان‌های برنامه‌نویسی وجود ندارد. یک زبان مشخص معمولاً یک زبان اجدادی واحدی ندارد. زبان‌ها معمولاً با ترکیب عنصرهای چند زبان پیشینه به وجود می‌آیند که هر بار ایده‌های جدید در گردشند. ایده‌هایی که در یک زبان ایجاد می‌شوند در یک خانواده از زبان‌های مرتبط پخش می‌شوند، و سپس از بین خلأهای بین خانواده‌ها منتقل شده و در خانواده‌های دیگر ظاهر می‌شوند. این حقیقت که این دسته‌بندی ممکن است در راستای محورهای مختلف انجام شوند، این وظیفه را پیچیده‌تر می‌کند؛ برای مثال، جاوا هم یک زبان شیءگرا (چون به
می‌کند؛ برای مثال، جاوا هم یک زبان شیءگرا (چون به برنامه‌نویسی شیءگرا تشویق می‌کند) و هم یک زبان هم‌زمان (چون ساختارهای داخلی برای اجرای چندین جریان موازی دارد) است. پایتون یک زبان اسکریپتی شیءگرا است. در نگاه کلی، زبان‌های برنامه‌نویسی به مثال‌های برنامه‌نویسی و یک دسته‌بندی بر اساس محدودهٔ استفاده تقسیم می‌شوند. مثال‌ها شامل برنامه‌نویسی رویه‌ای، برنامه‌نویسی شیءگرا، برنامه‌نویسی کاربردی، و برنامه‌نویسی منطقی؛ برخی زبان‌ها ترکیب چند مثالند. یک زبان اسمبلی مثالی از یک مدل مستقیم متضمن معماری ماشین نیست.
مثالی از یک مدل مستقیم متضمن معماری ماشین نیست. با توجه به هدف، زبان‌های برنامه‌نویسی ممکن است همه منظوره باشند، زبان‌های برنامه‌نویسی سیستمی، زبان‌های اسکریپتی، زبان‌های خاص دامنه، زبان‌های همزمان/ گسترده (و یا ترکیب اینها). برخی زبان‌های همه منظوره تا حد زیادی برای اهداف آموزشی طراحی شده‌اند. یک زبان برنامه‌نویسی ممکن است با فاکتورهای غیر مرتبط به مثال‌های برنامه‌نویسی دسته‌بندی شود. برای مثال، بیشتر زبان‌های برنامه‌نویسی کلمات کلیدی زبان انگلیسی را استفاده می‌کنند، درحالی‌که تعداد کمی این کار را
استفاده می‌کنند، درحالی‌که تعداد کمی این کار را نمی‌کنند. سایر زبان‌ها ممکن است براساس داخلی بودن یا نبودن دسته‌بندی شوند.
گرامَن اف-۱۴ تامکت هواگرد جنگنده مافوق صوت دوموتوره، دوسرنشین و نسل چهارم بال متحرک ساخت شرکت گرامن در ایالات متحده آمریکا است که نخستین پرواز خود را در سال ۱۹۷۰ انجام داد و از سال ۱۹۷۴ برای خدمت در نیروی دریایی ایالات متحده پذیرفته شد. این هواپیما از ۱۹۷۴ تا ۲۰۰۶ در نیروی دریایی ایالات متحده به‌عنوان جنگنده برتری هوایی، هواپیمای رهگیر دفاعی و هواپیمای شناسایی تاکتیکی اصلی این نیرو خدمت کرد. اف-۱۴ بعد از اینکه در دهه ۱۹۹۰ مجهز به سامانه هدف‌گیری فروسرخ در شب (LANTIRN) و سامانه پرواز سطح پائین گردید حملات