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

  • شروع کننده موضوع meli770
  • بازدیدها 295
  • پاسخ ها 0
  • تاریخ شروع

meli770

کاربر نگاه دانلود
کاربر نگاه دانلود
عضویت
2015/12/31
ارسالی ها
1,588
امتیاز واکنش
20,057
امتیاز
706
سن
26
محل سکونت
قم
به نام خدا
زبان برنامه نویسی محرمانه یک زبان برنامه نویسی است که برای تست کردن محدودیت‌های طراحی دیگر زبان‌های برنامه نویسی طراحی شده است. کلمه محرمانه این زبان‌ها را از دیگر زباهای برنامه نویسی که برای نوشتن نرم‌افزار استفاده می‌شوند متمایز می‌کند. معمولاً نویسنده‌های برنامه‌های محرمانه خیال ندارند جریان برنامه نویسی را منحرف کنند به جز در مواردی خاص مانند الگوهای visuospatial که برای این متظور در نظر گرفته شده‌اند. این زبانها مورد علاقه هکرها و افرادی است که می‌خواهند جریان داده را به هم بزنند. مورد استفاده بودن از اهداف طراحان زبان‌های محرمانه نیست بلکه معمولاً هدف آنها حذف یا جایگزینی اشکال قراردادی در زبان است که هنوز زبان را تورینگ کامل نگاه می‌دارد
تاریچه
اولین و هنوز یکی از مثال‌های استاندارد زبان INTERACAL است در سال ۱۹۹۲ توسط Don Woods وJames M Lyon طراحی شد که با زبانهای برنامه نویسی که کاربران معمول با آن آشنا هستند تفاوت‌هایی دارد. این زبان از قسمت‌هایی از زبان‌های برنامه نویسی تقلید می‌کند مانند زبانهای فورترن,کوبول و زبان اسمبلی که از قسمت‌هایی از آن تقلید شده است. سابق بر این پیاده‌سازی INTERCAL با IBM System/360 بود و کامپیوترهای آتاری که بعد از آن به حیات خود ادامه نداد و بنابراین این زبان در برهه‌ای از میان رفت. احیاگران زبان در ۱۹۹۰ در جریان ساخت سیستم عامل یونیکس به وسیله زبان سی از یک زبان محرمانه استفاده کردند. در سال 1992 Wouter van Ootmerssen یک زبان برنامه نویسی مبتنی بر پشته را ابداع کرد که به طور ذاتی کدهای آن بسیار مبهم و ناخوانا بود اما نکته قابل توجه این بود که در این زبان از یک کامپایلر با ۱۰۲۴ بایت استفاده می‌شود اما با اصلاحاتی این زبان جز زبان‌های محرمانه محبوب شد نام این زبان _brainf است.
اصطلاحات برنامه نویسی محرمانه
Turing Tarpit یک زبان توینگ کامل است که تعداد عملگر و دستورها اجزای مشابه آن خیلی کم است. این شامل brainf,osic,tue می‌شود. Turning tarpit یک تورینگ تارپیت با کدگذاری تمام حالات است به عنوان مثال زبانی است که یک بخش از عملگرها را در جریان حالت فعلی برنامه دخالت می‌دهد. کدگذاری حالات یک متد برای کدگذاری برنامه است که هر زیر رشته از کد یک دستورالعمل از هر دو: ۱-محل دستور بعدی در لیست و ۲-اعمال کردن آن جریان داده‌های برنامه است نکته اینکه یک دستور تک معمولاً دو فاز ترتیبی را دارد:انتخاب عملگر و اجرای آن. عملگرها می‌توانند ایستا(reMorse یا Thrat) و یا پویا(reMorse4ever) باشند. در اینجا نمونه‌ای بر مبنای (reMorse یا Thrat) است:
  • یک عملوند در لیست را انتخاب کن
  • آن را اجرا کن
مدل زبان
مدل زبان می‌تواند این گونه دسته‌بندی شود و این دسته‌بندی‌ها می‌توانند یک یادگیری عمومی از راههایی که یک زبان خاص کار می‌کند در اختیار بگذارد. این شامل زبان‌های مستبدانه/اجباری می‌شود (مانند brainf) که دستورات اینگونه توضیح داده می‌شوند که چگونه می‌توانند داده‌ها را تغییر دهند. زبان‌های تابعی مانند 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..
فضای خالی (Whitespace)
این زبان فقط از کاراکتر فضای خالی استفاده می‌کند(space,tabو return). این برخلاف خیلی از زبان‌های برنامه نویسی است که تفاوتی بین کاراکترهای فضای خالی نمی‌گذاراند. برنامه‌های با این زبان می‌توانند در سورس کدهای زبان‌هایی مانند c پنهان شوند.
امیدوارم به درد بخورهHapydancsmil
 

برخی موضوعات مشابه

بالا