زبان‌های برنامه‌نویسی محرمانه

تاریخچه

اولین و هنوز یکی از مثال‌های استاندارد زبان INTERACAL است در سال ۱۹۹۲ توسط Don Woods وJames M Lyon طراحی شد که با زبانهای برنامه‌نویسی که کاربران معمول با آن آشنا هستند تفاوت‌هایی دارد. این زبان از قسمت‌هایی از زبان‌های برنامه‌نویسی تقلید می‌کند مانند زبان‌های فورترن، کوبول و زبان اسمبلی که از قسمت‌هایی از آن تقلید شده‌است.
سابق بر این پیاده‌سازی INTERCAL با IBM System/360 بود و کامپیوترهای آتاری که بعد از آن به حیات خود ادامه نداد و بنابراین این زبان در برهه‌ای از میان رفت. احیاگران زبان در ۱۹۹۰ در جریان ساخت سیستم عامل یونیکس به وسیله زبان سی از یک زبان محرمانه استفاده کردند.
در سال 1992 Wouter van Ootmerssen یک زبان برنامه‌نویسی مبتنی بر پشته را ابداع کرد که به‌طور ذاتی کدهای آن بسیار مبهم و ناخوانا بود اما نکته قابل توجه این بود که در این زبان از یک کامپایلر با ۱۰۲۴ بایت استفاده می‌شود اما با اصلاحاتی این زبان جز زبان‌های محرمانه محبوب شد نام این زبان brainfuck است.

مدل زبان

مدل زبان می‌تواند این‌گونه دسته‌بندی شود و این دسته‌بندی‌ها می‌توانند یک یادگیری عمومی از راه‌هایی که یک زبان خاص کار می‌کند در اختیار بگذارد. این شامل زبان‌های مستبدانه/اجباری می‌شود (مانند brainfuck) که دستورات اینگونه توضیح داده می‌شوند که چگونه می‌توانند داده‌ها را تغییر دهند. زبان‌های تابعی مانند unlamda که داده‌ها و کدها کمتر قابل تغییر و تعویض هستند و اجرا با اجرای توابع که توابع دیگر را نتیجه می‌دهند ادامه پیدا می‌کند و زبان‌های بازنویسی مانند thue که تابع‌های انتقالی در وضعیت مقدار دهی اولیه به کار می‌روند.

funges

funge یک زبان محرمانه است که یک مدل برنامه سازی متریک فاصله دار متناسب با سیستم دارد و دستورهایی که اشاره شده‌اند اجرا می‌شوند. دستورهای متفاوت نشان دهنده جهت دستورهایی است که باید اجرا شوند.
استاندارد اداری فعلی که برای این زبان برنامه‌نویسی به کار می‌رود funge-98 است. این مشخصه مربوط به خصوصیات عمومی زبان برنامه‌نویسی :en:befungeاست که دو بعد حلقوی توپولوژی دارد.

زبان‌های غیرقطعی

برای زبان‌های قطعی اگر وضعیتی داده شده در برنامه وضعیت بعدی قابل پیش‌بینی است. بیشتر زبان‌ها قطعی هستند اما زبان‌هایی مانند befunge و java2k کدهایشان به صورت رندوم در صورت غیر قطعی بودن اجرا می‌شوند.
زبان‌های غیر قطعی معمولاً برای جستجو در فضاهای بزرگتر استفاده می‌شوند. ایجادکننده تکست تصادفی the Data Engine و rmutt نمونه‌ای از زبان‌های غیر قطعی می‌باشند.

انجمن اینترنت

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

مثال‌ها

در زیر نمونه‌هایی از زبان‌های برنامه‌نویسی محرمانه آورده شده‌است:

Befunge

زبان Befunge و هم خانواده‌های آن به اشاره گر کد اجازه می‌دهند که در جاهای مختلف کد قرار داشته باشند. برای نمونه این برنامه یک برنامه hello world است با قرار دادن برعکس کاراکترها در پشته بعد چاپ آن‌ها به وسیله چاپ ساعت گرد با این کدها [>], [:],و، [_], [,], d [^].
"dlroW olleH">:v
 ^,_@

Binary Lambda Calculus

به وسیله تئوری داده‌ها الگوریتمیک ابداع شد و دید آن اینگونه است که کد چگال تر با معنای حداقلی طرح ۲۹ بایت خود مترجم و غیره.

Brainfuck

این زبان برای حداقل کردن کد طراحی شده که منجر به ناخوانا شدن کد می‌شود. خروجی این برنامه hello world است.
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+. +++++++
.. +++.>++.<<+++++++++++++++.>. +++. ----. ----.>+.>.

Chef

این زبان پشته گرا توسط David Morgan-Mar برای اینکه برنامه‌ها را مانند دستور آشپزی کند طراحی شده‌است. برنامه‌ها شامل عنوان و مقادیر دادها و لیستی از دستورات پشته‌های پیاده‌سازی شده‌است.

FALSE

این زبان یک زبان بر مبنای پشته با دستورها و مقادیر تک کاراکتری است. برای مثال ۳+۱ می‌تواند به وسیله![+λ x → x + 1)(3): 3[1) محاسبه شود.

INTERCAL

کوتاه شده یک «زبان کامپایلری بدون سرنام» است.

LOLCODE

برای بازسازی [:en:lolcats]طراحی شده‌است. در ذیل یک سثال hello world آورده شده‌است.
HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE

Malbolge

Malbolge برای زبان‌های بسیار سخت و محرمانه طراحی شده‌است.

کامپیوتر تک دستوری

یک ماشین زبان با فقط یک عملگر است.

Piet

piet زبانی است که توسط David Morgan-Mar ابداع شد کسی برنامه سازی بیت مپ‌های آن مانند یک هنر انتزاعی است. کامپایل شدن به وسیله یک اشاره گر که در اطراف تصویر حرکت می‌کند برای یک دامنه رنگی ادامه دار تا رنگ بعدی انجام می‌شود.
۲۰ رنگ موجود است که رفتار آن‌ها پیش‌بینی شده‌است. ۱۸ تا از آن‌ها رنگ‌های رنگی هستند که به صورت ۶ رنگ و ۳ طیف روشنایی مختلف مرتب شده‌اند؛ و رنگ سیاه و سفید مرتب نشده‌اند. زمانی که یک رنگ رنگی موجود است و یک رنگ دیگر وارد می‌شود پروسه انجام شده توسط تعداد سطوح رنگ و روشنایی که تغییر کرده‌اند مشخص می‌شود. سیاه نمی‌تواند وارد شود؛ زمانی که اشاره گر سعی می‌کند که به یک ناحیه سیاه وارد شود قوانین انتخاب بلوک بعدی تغییر می‌کند. اگر تمامی قوانین انجام شوند برنامه تمام خواهد شد. سفید عملی را انجام نمی‌دهد فقط به اشاره گر اجازه می‌دهد که عبور کند. رنگ‌های غیر از این ۲۰ رنگ به کامپایلر یا مترجم ارجاع داده می‌شوند.
متغیرها در یک پشته به عنوان یک متغیر integer علامت دار ذخیره می‌شوند. بیشتر پروسه‌های مشخص شده مربوط به عملیات پشته خواهد بود. بقیه به وسیله دستورهای ورودی خروجی و به وسیله دستوراهایی که اشاره گر کامپایل در حرکتش مشخص می‌کند مشخص می‌شود.

شکسپیر

زبان برنامه‌نویسی شکسپیر طراحی شده‌است که برنامه‌ها را مانند نمایش نامه‌های شکسپیر کند برای مثال دستور زیر مانند یک دستور goto است:
Act I: Hamlet's insults and flattery..