stanford-oval/wikipedia huggingface dataset:
ریچارد تاملینسون
نقض بزرگ > پذیرایی

اکونومیست از «به هم ریختگی» ای که ام.آی. سیکس در رسیدگی درست به پرونده تاملینسون ایجاد کرده بود انتقاد کرد: «استخدام آقای تاملینسون اشتباه بدی به نظر می‌رسد و به نظر می‌رسد که اخراج او ناشیانه انجام شده است.» منتقد روزنامه گلایه کرد: «اطلاعات مفید کمی در این حجم نفس‌گیر، غم‌انگیز و بد نوشته وجود دارد که خوانندهٔ کوشا کتاب‌های جاسوسی از قبل نمی‌دانست.»
جیمی برنز، در بررسی این کتاب برای فایننشال تایمز، حدس زد که قابل قبول است که «مدیریت ارشد ام.آی. سیکس متوجه شد که در استخدام فردی که فکر می‌کرد جاسوسی فقط یک ماجراجویی بزرگ است، اشتباه فاحشی مرتکب شده است.» با این حال، او به این نتیجه رسید که این کتاب «این احساس را برای من به وجود آورد که شبه‌ها در وایت هال می‌توانستند با موافقت با پیشنهاد اصلی تاملینسون: یک دادگاه کار غیرعلنی، از تبلیغات نامطلوب زیادی جلوگیری کنند.»
نلسون ماندلا، رئیس‌جمهور سابق آفریقای جنوبی، با عصبانیت به اتهام تاملینسون در کتاب مبنی برداشتن رابطه طولانی مدت با ام.آی. سیکس واکنش نشان داد و آن را «ساختگی شرم آور» توصیف کرد. تاملینسون ارجاعات به ماندلا را در نسخه بریتانیایی کتاب حذف کرد و اذعان داشت که ماندلا احتمالاً از اینکه مقاماتی که با آنها صحبت می‌کرد وابسته به ام.آی. سیکس بودند بی‌خبر بود.
سایر تخلفات و ادعاهای ادعا شده > لیست عوامل ام.آی. سیکس

در مه ۱۹۹۹، فهرستی از ۱۱۶ مأمور ادعایی ام.آی. سیکس به بررسی اطلاعات اجرایی در نشریه جنبش لاروش ، یک مجله هفتگی که آن را به صورت آنلاین منتشر می‌کرد، ارسال شد. نام‌های آن شامل اندرو فولتون، که اخیراً بازنشسته شده بود، کریستوفر استیل، دیوید اسپدینگ و ریچارد دیرلاو بود. استفان دوریل، زندگی‌نامه‌نویس ام.آی. سیکس توضیح داد که اکثر نام‌ها منابع «پوشش نور» بودند که در سفارت‌خانه‌ها یا مأموریت‌هایی که خود را دیپلمات نشان می‌دادند، کار می‌کردند. دوریل استدلال کرد، «به خوبی شناخته شده است که شبکه‌های اطلاعاتی رقیب می‌دانند این افراد چه کسانی هستند و آنها را می‌پذیرند.» ام.آی. سیکس ادعا کرد که تاملینسون منشأ این لیست بوده است، چیزی که قبلاً تهدید کرده بود انجام خواهد داد، اگرچه او مسئولیت آن را انکار کرد و ام.آی. سیکس نتوانست اتهامات آنها را ثابت کند.
تاملینسون نوشت: «اگر ام.آی. سیکس قصد داشت لیستی تهیه کند که بیشترین اتهام را به من وارد کند، اما کمترین آسیب را به آنها وارد کند، نمی‌توانستند کار بهتری انجام دهند.» او همچنین گفت: "من را گیج می‌کند که چرا ام.آی. سیکس به لیست اعتبار داده است. اگر آنها واقعاً نگران امنیت مأموران خود بودند، می‌توانستند آن را انکار کنند.» پس از آنکه روزنامه سان تاملینسون را «خائن» خواند و آدرس ایمیل او را منتشر کرد، او تهدید به مرگ شد و از ترس جان خود، مدتی مخفی شد. مقامات دولتی بعداً پذیرفتند که این فهرست از تاملینسون نشات گرفته است.[نیازمند منبع]
سایر تخلفات و ادعاهای ادعا شده > دایانا، پرنسس ولز

در سال ۲۰۰۸، تاملینسون شاهد تحقیقات دربارهٔ مرگ شاهزاده خانم ولز و دودی الفاید بود. او پیشنهاد کرده بود که ام.آی. سیکس قبل از مرگ دایانا را زیر نظر داشت و راننده او در شب مرگ، هنری پل، ممکن است یک خبرچین ام.آی. سیکس بوده باشد، و مرگ او شبیه نقشه‌هایی است که او در سال ۱۹۹۲ برای ترور رئیس‌جمهور یوگسلاوی اسلوبودان میلوشویچ دیده بود. استفاده از نور روشن برای ایجاد یک حادثه رانندگی.
در تحقیقات پزشکی قانونی در مورد مرگ شاهزاده خانم، در ۱۳ فوریه ۲۰۰۸، تاملینسون از طریق پیوند ویدئویی از فرانسه صحبت کرد، تاملینسون اعتراف کرد که پس از ۱۶ یا ۱۷ سال، «به‌طور خاص نمی‌تواند به خاطر بیاورد» که آیا سندی را که دیده است. در سال ۱۹۹۲ در واقع استفاده از چراغ بارق را برای ایجاد یک حادثه رانندگی به عنوان وسیله ای برای ترور میلوشویچ پیشنهاد کرده بود، اگرچه استفاده از چراغ برای این منظور در آموزش ام.آی. سیکس او پوشش داده شده بود. تاملینسون که به او گفته شد هیچ پرونده ام.آی. سیکس در مورد هنری پل پیدا نشده است، گفت که «بعد از ۱۷ سال بی‌معنی است که بگویم می‌توانم با آن موافق نباشم، اما. . . من فکر نمی‌کنم این واقعیت که آنها موفق به یافتن پرونده ای نشده‌اند نیز چیزی را منتفی نمی‌کند. او گفت که معتقد است ام.آی. سیکس یک مخبر در پاریس ریتز دارد اما نمی‌توانست مطمئن باشد که این شخص لزوماً هنری پل است.
فعالیت‌های پس از ام.آی. سیکس

در اوت ۱۹۹۸، تاملینسون بریتانیا را به مقصد فرانسه ترک کرد و اندکی بعد به نیوزلند نقل مکان کرد. بعداً در همان ماه او از ایالات متحده اخراج شد و در اکتبر ۱۹۹۸ به سوئیس نقل مکان کرد، قبل از اینکه در ژوئن ۱۹۹۹ پس از آنکه مقامات سوئیسی حضور او در آنجا را «نامطلوب» توصیف کردند، اخراج شد. او به آلمان نقل مکان کرد تا زمانی که توسط مقامات دستگیر شد و پس از آن به ایتالیا نقل مکان کرد. در سال ۲۰۰۱، ریمینی را در ایتالیا، جایی که به عنوان پیشخدمت و مربی اسنوبورد کار می‌کرد، به مقصد جنوب فرانسه در نزدیکی کن ترک کرد، جایی که او به عنوان دلال قایق برای BCR Yachts کار می‌کرد. از سال ۲۰۰۶ تا ۷، تاملینسون مجموعه‌ای از وبلاگ‌ها را در مورد جزئیات درمان خود داشت. در سال ۲۰۰۶ پلیس به خانه او در ریویرا یورش برد.
در سال ۲۰۰۷، وکلای دولتی تصمیم گرفتند که او را به دلیل انتشار The Big Breach تحت پیگرد قانونی قرار ندهند. سرویس دادستانی سلطنتی گفت که هیچ چشم‌انداز واقعی محکومیت در محاکمه هیئت منصفه وجود ندارد که «موضوع حساس» را آشکار کند. در سال ۲۰۰۹، ام.آی. سیکس موافقت کرد که به تاملینسون اجازه دهد به بریتانیا بازگردد، حق امتیاز کتابش را لغو کند و در صورت موافقت با توقف افشای اطلاعات در مورد ام.آی. سیکس و صحبت با رسانه‌ها، تهدید اتهامات را کنار بگذارد. به گزارش ساندی تایمز، ام.آی. سیکس همچنین به دلیل «رفتار ناعادلانه» با او عذرخواهی کرد. او اکنون به‌طور دائم در فرانسه زندگی می‌کند و دوباره به عنوان خلبان حرفه‌ای آموزش دیده است.
زندگی شخصی

در سال ۱۹۹۸، تاملینسون به عنوان صاحب «هوای غرور خفیف که با ظاهر خوب، بدنی سخت ورزیده و هوش تیز همراه است» توصیف شد. مطبوعات ژنو گزارش دادند که او «تسلط کامل به زبان فرانسه» داشت.
مقر ام.آی. سیکس در واکسهال کراس، لندن
فورت مونکتون در همپشایر، که تاملینسون ادعا می‌کند یک مرکز آموزشی ام.آی. سیکس است.
ترشکا گورتسا

مکان در 23x15px|border |alt=|link= اسلوونی
| ترشکا گورتسا Trška Gorca | ترشکا گورتسا Trška Gorca |
| --- | --- |
منطقه تاریخی: استیریای سفلی
منطقه آماری: ساوینیا
شهرداری: Šentjur
مساحت: مساحت
 • کل: ۰٫۴۸ کیلومتر مربع (۰٫۱۹ مایل مربع)
ارتفاع: ۳۴۳٫۷ متر (۱۱۲۷٫۶ فوت)
جمعیت (2002): جمعیت (2002)
 • کل: ۴۵
ترشکا گورتسا (اسلوونیایی: Trška Gorca) یک زیستگاه انسانی در اسلوونی است که در Šentjur Municipality واقع شده‌است.
خصوصیات

ترشکا گورتسا ۰٫۴۸ کیلومترمربع مساحت و ۴۵ نفر جمعیت دارد و ۳۴۳٫۷ متر بالاتر از سطح دریا واقع شده‌است.
زبان برنامه‌نویسی

کد منبع برای یک برنامهٔ رایانه‌ای ساده که به زبان برنامه‌نویسی C نوشته شده است. هنگام کامپایل و اجرا، خروجی "سلام، دنیا!" می‌دهد.
زبان‌های برنامه‌نویسی ساختارهای زبانی دستور مدار الگوریتم را به‌وسیلهٔ ساختارهای دستوری متفاوت برای اجرای رایانه توصیف کرد و با این روش امکان نوشتن برنامه جهت تولید نرم‌افزارهای جدید برای وارد کردن متن برنامه، اجرا، همگردانی و رفع اشکال آن هستند.
یک زبان برنامه‌نویسی مجموعه‌ای از دستورالعمل‌ها و قواعد است که برای بیان محاسباتی که توسط یک ماشین (مخصوصاً رایانه) قابل انجام است، طراحی شده است. زبان‌های برنامه‌نویسی برای ایجاد برنامه‌هایی به کار می‌روند که رفتار یک ماشین را مشخص می‌کنند، الگوریتم دقیق را بیان می‌کنند، یا روشی برای تعامل انسان و رایانه هستند.
بسیاری از زبان‌های برنامه‌نویسی تعدادی قالب از ویژگی‌های نوشته شده دستوری یا نحو (syntax) و معناشناسی (semantics) دارند، چرا که رایانه‌ها دستورهای دقیقاً مشخص نیاز دارند. برخی توسط سند خصوصیات (specification document) تعیین شده‌اند (برای مثال یک استاندارد ISO)، در حالی که برخی دیگر دارای پیاده‌سازی غالبی می‌باشند. (مانند Perl) اولین زبان برنامه‌نویسی به قبل از اختراع رایانه بازمی‌گردد، و برای هدایت رفتار ماشین‌هایی مانند دستگاه‌های نساجی اتوماتیک و نوازنده‌های پیانو به کار می‌رفت.
صدها زبان برنامه‌نویسی خلق شده است، که بیشتر آن‌ها در زمینهٔ رایانه هستند. زمینه‌ای که هر ساله زبان‌های دیگر بسیاری در آن ایجاد می‌شود.
تعاریف

ویژی‌هایی که غالباً برای تشکیل یک زبان برنامه‌نویسی مهم شمرده می‌شوند:
کاربرد: یک زبان برنامه‌نویسی، زبانی است که برای نوشتن برنامه‌های رایانه‌ای به کار می‌رود که رایانه‌ای را برای انجام محاسبات یا اجرای الگوریتم یا احتمالاً کنترل دستگاه‌های خارجی مثل چاپگر، ربات و… درگیر می‌کنند.
هدف: زبان‌های برنامه‌نویسی با زبان‌های طبیعی تفاوت دارند و آن اینکه زبان‌های طبیعی فقط برای فعل و انفعالات بین مردم به کار می‌روند، درحالی‌که زبان‌های برنامه‌نویسی همچنین به انسان‌ها اجازه می‌دهد که از طریق دستورها با ماشین‌ها ارتباط برقرار کنند. برخی زبان‌های برنامه‌نویسی به وسیلهٔ یک دستگاه استفاده می‌شوند تا دستگاه دیگری را کنترل کند. برای مثال برنامه‌های پست‌اسکریپت (PostScript) غالباً توسط برنامهٔ دیگری برای کنترل یک چاپگر یا نمایشگر ایجاد می‌شوند.
ساختارها: زبان‌های برنامه‌نویسی ممکن است ساختارهایی برای تعریف و تغییر داده ساختارها یا کنترل جریان اجرا داشته باشند.
توان بیانگر: نظریه محاسبات، زبان‌ها را به وسیلهٔ محاسباتی که توان بیان آن‌ها را دارند طبقه‌بندی می‌کند. تمام زبان‌های «کامل تورینگ» می‌توانند مجموعه یکسانی از الگوریتم‌ها را پیاده‌سازی کنند. ANSI/ISO SQL و Charity مثال‌هایی هستند از زبان‌هایی که کامل تورینگ نیستند، ولی غالباً زبان برنامه‌نویسی نامیده می‌شوند.
برخی مؤلفین اصطلاح «زبان برنامه‌نویسی» را محدود به آن‌هایی می‌کنند که می‌توانند تمام الگوریتم‌های ممکن را پیاده‌سازی کنند، گاهی اصطلاح «زبان رایانه» برای زبان‌های برنامه‌نویسی محدودتر به کار می‌رود. زبان‌های غیر محاسباتی، مانند زبان‌های مارک آپ (markup) HTML یا گرامرهای قراردادی مثل BNF، معمولاً زبان برنامه‌نویسی محسوب نمی‌شوند. یک زبان برنامه‌نویسی (که می‌تواند کامل تورینگ نباشد) ممکن است در این زبان‌های غیر محاسباتی (میزبان) تعبیه شوند.
تاریخچه‌های برنامه‌نویسی > پیشرفت‌های اولیه

اولین زبان برنامه‌نویسی به قبل از رایانه‌های مدرن بازمی‌گردد. قرن ۱۹ دستگاه‌های نساجی و متون نوازنده پیانو قابل برنامه‌نویسی داشت که امروزه به عنوان مثال‌هایی از زبان‌های برنامه‌نویسی با حوزه مشخص شناخته می‌شوند. با شروع قرن بیستم، کارت پانچ، داده را کدگذاری کردند و پردازش مکانیکی را هدایت کردند. در دهه ۱۹۳۰ و ۱۹۴۰، صورت گرایی حساب لاندای آلونزو چرچ و ماشین تورینگ آلن تورینگ مفاهیم ریاضی بیان الگوریتم‌ها را فراهم کردند؛ حساب لامبدا همچنان در طراحی زبان مؤثر است.
در دهه ۱۹۴۰، اولین رایانه‌های دیجیتال که توسط برق تغذیه می‌شدند، ایجاد شدند. اولین زبان برنامه‌نویسی سطح بالا طراحی شده برای رایانه پلان کلکول بود، که بین سال‌های ۱۹۴۵ و ۱۹۴۳ توسط کنراد زوس برای ز۳ آلمان طراحی شد.
رایانه‌های اوایل ۱۹۵۰، به‌طور خاص UNIVAC ۱ و IBM ۷۰۱ از برنامه‌های زبان ماشین استفاده می‌کردند. برنامه‌نویسی زبان ماشین نسل اول توسط نسل دومی که زبان اسمبلی نامیده می‌شود، جایگزین شد. در سال‌های بعد دهه ۵۰، زبان برنامه‌نویسی اسمبلی، که برای استفاده از دستورهای ماکرو تکامل یافته بود، توسط سه زبان برنامه‌نویسی سطح بالا دیگر: فورترن، کوبال و لیسپ مورد استفاده قرار گرفت. نسخه‌های به روز شدهٔ این برنامه‌ها همچنان مورد استفاده قرار می‌گیرند، و هر کدام توسعه زبان‌های بعد را تحت تأثیر قرار دادند. در پایان دههٔ ۵۰ زبان، الگول ۶۰ معرفی شد، و بسیاری از زبان‌های برنامه‌نویسی بعد، با ملاحظهٔ بسیار، از نسل الگول هستند. قالب و استفاده از زبان‌های برنامه‌نویسی به شدت متأثر از محدودیت‌های رابط بودند.
الگوها

مقالهٔ اصلی: الگو
زبان‌های برنامه‌نویسی را می‌توان از چهار دیدگاه متفاوت مورد بررسی قرار داده و تقسیم‌بندی کرد:
روش‌های برنامه‌نویسی
زیر روالی
ساخت یافته
مدولار
شیء گرا
نزدیکی به زبان ماشین
سطح پایین
سطح میانی
سطح بالا
نوع ترجمه و تفسیر
مفسری
کامپایلری
رابط برنامه‌نویسی
مبتنی بر متن
مبتنی بر گرافیک (ویژوال)
نکته: امروزه با وجود ماشین‌های مجازی، تقسیم‌بندی زبان‌های برنامه‌نویسی بر اساس نوع ترجمه، اشتباه می‌باشد. ماشین مجازی HipHop (مورد استفاده شرکت فیسبوک برای کاهش مرحله تفسیر در PHP) و همچنین کامپایل زبان برنامه‌نویسی پایتون به کلاس‌های جاوا نمونه‌هایی از چندگانگی نوع ترجمه در زبان‌های برنامه‌نویسی می‌باشد.
عنصرها

تمام زبان‌های برنامه‌نویسی تعدادی بلوک‌های ابتدایی برای توضیح داده و پردازش یا تبدیل آن‌ها (مانند جمع کردن دو عدد با انتخاب یک عضو از یک مجموعه) دارند. این «عناصر ابتدایی» به وسیلهٔ قوانین معناشناسی و دستوری تعریف می‌شوند که ساختار و معنای مربوط را توضیح می‌دهند.
عنصرها > دستور(syntax)

فرم سطحی یک زبان برنامه‌نویسی دستور آن نامیده می‌شود. بیشتر زبان‌های برنامه‌نویسی کاملاً متنی‌اند؛ و از دنبالهٔ متون شامل واژگان، اعداد و نشان‌گذاری‌های بسیار شبیه زبان نوشتاری طبیعی استفاده می‌کنند. از طرف دیگر، برنامه‌هایی نیز وجود دارند که بیشتر گرافیکی‌اند، و از روابط بصری بین سمبل‌ها برای مشخص کردن برنامه استفاده می‌کنند.
دستور یک زبان، ترکیبات ممکن سمبل‌ها برای ایجاد یک برنامهٔ درست را از نظر دستوری مشخص می‌کند. معنایی که به یک ترکیب سمبل‌ها داده می‌شود با معناشناسی اداره می‌شود (قراردادی یا نوشته شده در پیاده‌سازی منبع). از آنجا که بیشتر زبان‌ها متنی هستند، این مقاله دستور متنی را مورد بحث قرار می‌دهد.
دستور زبان برنامه‌نویسی معمولاً به وسیلهٔ ترکیب عبارات معین (برای ساختار لغوی) و فرم توضیح اعمال (برای ساختار گرامری) تعریف می‌شوند.
متن زیر یک گرامر ساده، به زبان Lisp است:
expression   : :=  atom  |  list
atom           : :=  number  |  symbol
number       : :=  [+-]?[' 0 ' - ' 9 ']+
symbol        : :=  [' A ' - ' Z ' ' a ' - ' z ']. *
list              : :=  ' ( '  expression*  ' ) '
این گرامر موارد ذیل را مشخص می‌کند:
یک عبارت یا atom است یا یک لیست
یک atom یا یک عدد است یا یک سمبل
یک عدد دنباله ناشکسته‌ای از یک یا تعداد بیشتری اعداد دهدهی است، که یک علامت مثبت یا منفی می‌تواند پیش از آن بیاید.
یک سمبل حرفی است که بعد از هیچ یا تعدادی کاراکتر (جز فاصله) می‌آید.
یک لیست تعدادی پرانتز است که می‌تواند صفر یا چند عبارت در خود داشته باشد.
مثال‌های رو به رو دنباله‌هایی خوش فرم در این گرامر هستند: a b c232 (1)) ، () ، 12345)
همهٔ برنامه‌هایی که از لحاظ دستوری درست هستند، از نظر معنا درست نیستند. بسیاری از برنامه‌های درست دستوری، بد فرم هستند و با توجه به قوانین زبان؛ ممکن است (بسته به خصوصیات زبان و درست بودن پیاده‌سازی) نتیجهٔ آن‌ها خطای ترجمه یا استثنا (exception) باشد.
در برخی موارد، چنین برنامه‌هایی ممکن است رفتار نامشخصی از خود نشان دهند. حتی اگر یک برنامه در یک زبان به خوبی بیان شده باشد، ممکن است دقیقاً مطلوب نویسنده آن نبوده باشد.
به عنوان مثال در زبان طبیعی، ممکن نیست به برخی از جملات درست از لحاظ گرامری، معنای خاصی اطلاق کرد یا ممکن است جمله نادرست باشد:
«ایده‌های بیرنگ سبز با خشم می‌خوابند.» از نظر دستوری خوش فرم است ولی معنای مورد قبولی ندارد.
«جان یک مجرد متأهل است.» از نظر دستوری درست است، ولی معنایی را بیان می‌کند که نمی‌تواند درست باشد.
این تکّه کد در زبان C از نظر دستوری درست است، اما کاری را انجام می‌دهد که از نظر معنایی تعریف نشده است. (زیرا p یک اشاره‌گر خالی است، عمل p->im معنای خاصی ندارد و عمل p>>4* برای مقدارهای پیچیده بی‌معنی است)
complex *p = NULL;
complex abs_p = sqrt(*p >> 4 + p->im);
دستور مورد نیاز برای مشخص کردن یک زبان برنامه‌نویسی می‌تواند با جایگاهش در «سلسله مراتب چامسکی» طبقه‌بندی شود. دستور بیشتر زبان‌های برنامه‌نویسی می‌تواند به وسیلهٔ یک گرامر نوع ۲ مشخص گردد، برای نمونه، گرامرهای مستقل از متن.
عنصرها > معناشناسی ایستا

معناشناسی ایستا محدودیت‌هایی بر روی ساختار مجاز متن‌ها تعیین می‌کند که بیان آن‌ها در فرمول دستوری استاندارد مشکل یا غیرممکن است. مهم‌ترین این محدودیت‌ها به وسیله سیستم نوع‌گذاری انجام می‌شود. برخلاف باور برخی از برنامه‌نویسان محدودیت‌های اعمال شده، اعمال نشده‌اند بلکه در واقع ناشی از زیرساخت‌های آن زبان برنامه‌نویسی هستند تا سرعت پردازش را افزایش دهند و قدرت پردازش پردازنده را برای تایپ‌کستینگ‌های خودکار متعدد صرف نکنند. استفاده از روش ایستا صرفاً سرعت پردازش‌هایی را افزایش می‌دهد که در کسری از ثانیه به محاسبه حجم انبوهی از داده‌ها نیاز دارند. این موضوع بهبود پردازش برای مثال خودش را در گرافیک‌های سنگین بازی‌های کامپیوتری نشان می‌دهد همچنین برای مثال در سرورهای بک‌اند (پشتی) بانکداری با حجم انبوهی از ثبت تراکنش‌ها که از زبان ایستای جاوا استفاده می‌شود اما حتی در موضوع گرافیک جاوا به دلیل استفاده از گاربیج‌کالکشن یا جمع‌آوری زباله و البته استفاده از ماشین مجازی برای مدیریت حافظه سرعت پردازشی ++C را ندارد از طرفی استفاده دات نت از زبان میانجی IL برای پشتیبانی از زبان‌های متعدد مانند #C یا #F و کامپایل نکردن مستقیم به باینری ماشینی باعث می‌شود که سرعت پردازش #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)، یا معناشناسی قراردادی (مثل StandardML ,Scheme)
توضیح رفتار یک مترجم برای زبان (مثل C,fortran). دستور و معناشناسی یک زبان باید از این توضیح استنتاج شوند، که ممکن است به زبان طبیعی یا قراردادی نوشته شود.
پیاده‌سازی منبع یا مدل. گاهی در زبان‌های مشخص شده (مثل: prolog,ANSI REXX). دستور و معناشناسی صریحاً در رفتار پیاده‌سازی مدل موجودند.
طراحی و پیاده‌سازی > پیاده‌سازی

پیاده‌سازی یک زبان برنامه‌نویسی امکان اجرای آن برنامه را روی پیکربندی مشخصی از سخت‌افزار و نرم‌افزار را فراهم می‌کند. به‌طور وسیع، دو راه رسیدن به پیاده‌سازی زبان برنامه‌نویسی وجود دارد. کامپایل کردن و تفسیر کردن. به‌طور کلی با هر بک از ابن دو روش می‌توان یک زبان را پیاده‌سازی کرد.
خروجی یک کامپایلر ممکن است با سخت‌افزار یا برنامه‌ای به نام مفسر اجرا شود. در برخی پیاده‌سازی‌ها که از مفسر استفاده می‌شود، مرز مشخصی بین کامپایل و تفسیر وجود ندارد. برای مثال، برخی پیاده‌سازی‌های زبان برنامه‌نویسی بیسیک کامپایل می‌کنند و سپس کد را خط به خط اجرا می‌کنند.
برنامه‌هایی که مستقیماً روی سخت‌افزار اجرا می‌شوند، چندین برابر سریعتر از برنامه‌هایی که در نرم‌افزار تفسیر می‌شوند اجرا می‌شوند.
یک تکنیک برای بهبود عملکرد برنامه‌های تفسیر شده کامپایل در لحظه آن است. در این روش ماشین مجازی، دقیقاً قبل از اجرا، بلوک‌های کدهای بایتی که قرار است استفاده شوند را برای اجرای مستقیم روی سخت‌افزار ترجمه می‌کند
زبان‌های اختصاصی

اگرچه بیشترین زبان‌های برنامه‌نویسی متداول دارای مشخصات و پیاده‌سازی‌های کاملاً باز هستند، بسیاری از زبان‌های برنامه‌نویسی فقط به عنوان زبان‌های برنامه‌نویسی اختصاصی با اجرای فقط از یک فروشنده منفرد موجود هستند، که ممکن است ادعا کنند چنین یک زبان اختصاصی خاصیت معنوی آنها است. زبان‌های برنامه‌نویسی اختصاصی معمولاً زبان‌های خاص دامنه یا زبان‌های برنامه‌نویسی داخلی برای یک محصول واحد هستند. برخی از زبان‌های اختصاصی فقط در داخل یک فروشنده استفاده می‌شوند، در حالی که برخی دیگر در دسترس کاربران خارجی است.
برخی از زبان‌های برنامه‌نویسی در مرز بین اختصاصی و آزاد وجود دارند. به عنوان مثال، شرکت Oracle ادعا می‌کند حقوق اختصاصی برخی از جنبه‌های زبان برنامه‌نویسی جاوا، و زبان برنامه‌نویسی #C مایکروسافت، که پیاده‌سازی‌های بیشتری در اکثر بخش‌های سیستم دارد، همچنین دارای اجرای مشترک زبان مشترک (CLR) به عنوان یک محیط بسته است.
بسیاری از زبان‌های اختصاصی، علی‌رغم ماهیت اختصاصی، به‌طور گسترده مورد استفاده قرار می‌گیرند. مثال‌ها شامل MATLAB, VBScript و Wolfram Language هستند. برخی از زبان‌ها ممکن است انتقال از بسته به باز را تغییر دهند. به عنوان مثال، ارلانگ در ابتدا زبان برنامه‌نویسی داخلی اریکسون بود.