برینفاک: تفاوت میان نسخهها
محتوای حذفشده محتوای افزودهشده
بدون خلاصۀ ویرایش |
اصلاحات جزئی در نیمفاصلهها و افزودن ترجمهای به آخر «ساختار زبان» |
||
خط ۸:
| influenced_by=[[P′′]], [[FALSE]]
}}
'''برینفاک''' {{به انگلیسی|Brainfuck}} یک [[زبانهای برنامهنویسی محرمانه|زبان برنامهنویسی رمزی]] است که دستورهای بسیار کمی دارد. این برنامه در سال ۱۹۹۳ توسط اربن مولر با هدف طراحی
== تاریخچه ==
در سال ۱۹۹۲، اربن مولر (Urban Müller) که دانشجوی رشتهٔ فیزیک سوئیس بود، یک بایگانی آنلاین کوچک را برای نرمافزار Amiga راه انداخت.
مولر برینفاک را با هدف پیادهسازی آن با کوچکترین کامپایلر ممکن،
با بزرگ شدن Aminet کامپایلر در جامعهٔ Amiga محبوب شد و به مرور زمان برای سایر
; ′′P «زبان مادر» برینفاک
به جز این دو دستور I/O میتوان گفت برینفاک یک مشتق از زبان برنامهنویسی رسمی ``P است با تغییرات جزئی. این زبان مادر توسط کورادو بوهم (Corrado Böhm) در سال ۱۹۶۴ ایجاد شده است و به نوبهٔ خود مبتنی بر [[ماشین تورینگ]] است. در واقع، با استفاده از شش نماد (symbol) معادلِ دستورهای مربوط <code>+</code>, <code>-</code>, <code><</code>, <code>></code>, <code>[</code>, <code>]</code>, بوهم برای کارکردهای اولیه که برای محاسبه هر عملکرد قابلمحاسبه نیاز است، برنامهای صریح ارائه کرده است.
; Infinite Abacus «زبان جد» برینفاک
نسخه ای با حافظهٔ صریح آدرسدهی و بدون پشته و پرش مشروط توسط یواخیم لمبک در سال ۱۹۶۱ با نام Infinite Abacus معرفی شد که متشکل بود از تعداد نامحدودی از سلولها و دو دستورالعمل ارائه شد:
* <code>X+</code> (سلول افزایش X)
* <code>X- else jump T</code> (مقدار X را
او ثابت کرد که Infinite Abacus قدرت پردازش هر برنامهای را دارد که با برنامهنویسی Kleene به صورت μبازگشتی نوشته شود. ماشین او توسط ماشین Melzac مدلسازی محاسبات را از طریق محاسبه به جای منطق و تقلید از یک عملگر انسانی که سنگریزهها را بر روی چرتکه حرکت میدهد
▲ماشین او توسط ماشین Melzac مدلسازی محاسبات را از طریق محاسبه به جای منطق و تقلید از یک عملگر انسانی که سنگریزهها را بر روی چرتکه حرکت میدهد شبیه سازی شده است. از این رو الزام مثبت بودن همه شمارهها قابل فهم است. Melzac که یک کامپیوتر با تنها یک مجموعه دستور است، در واقع معادلی است برای Abacus Infinite که برنامههایی را برای ضرب، gcd ، n t اعداد اول، بازنمایی در پایهٔ b، مرتبسازی بر اساس اندازهٔ آرایه میدهد. به علاوه نحوهٔ شبیهسازی یک ماشین تورینگ دلخواه را نیز ارائه میدهد.
== ساختار زبان ==
این زبان از هشت دستور تشکیل شده است که در زیر آمده اند. برنامهٔ برینفاک دنبالهای از این دستورهاست که احتمالاً با سایر کاراکترها (که نادیده گرفته میشوند) در هم آمیخته اند. دستورها به صورت پیاپی اجرا میشوند، با برخی از استثنائات: یک اشارهگر دستور، در دستور اول شروع میشود و هر فرمانی که به آن اشاره میکند اجرا میشود، پس از آن معمولاً به سمت فرمان بعدی حرکت میکند. این برنامه هنگامی که نشانگر دستور از آخرین فرمان بگذرد ، به پایان میرسد. زبان برینفاک از یک مدل ساده بهره میبرد متشکل از متن برنامه، نشانگر دستورالعمل، و همچنین آرایه ای از حداقل ۳۰ هزار بایت که ابتدا با صفر مقداردهی شده اند. همچنین یک[[اشارهگر_(علوم_رایانه) | اشارهگر]] اولیه برای اشاره به بایت کمارزش آرایه و دو جریان بایت برای ورودی و خروجی که اغلب به یک صفحهکلید و یک مانیتور و با استفاده از رمزنگاری نویسه ASCII متصل میشوند.
; دستورها
سطر ۹۵ ⟵ ۹۴:
{{پایان چپچین}}
همانطور که از نام این برنامه برمیآید، درک برنامههای نوشته شده به زبان برینفاک دشوار است. این امر تا حدی به این دلیل است که هر کارِ اندکی پیچیده، نیاز به یک توالی طولانی از دستورات دارد و البته به این دلیل است که متن برنامه هیچ نشانهٔ مستقیمی از حالت یا وضعیت برنامه نمیدهد! اینها و همچنین ناکارآمدی برینفاک و قابلیتهای ورودی و خروجی محدود آن، از دلایل آن است که برای برنامهنویسی غیر شوخی مورد استفاده قرار نگیرد. با این حال، مانند هر زبان معادل ماشین تورینگ کاملی، در صورت دسترسی به مقدار نامحدودی از حافظه، برینفاک نیز از نظر تئوری قادر به محاسبهٔ هر عملکرد قابل محاسبه یا شبیهسازیِ هر گونه مدل محاسباتی است. با این حال تعداد زیادی از انواع برنامه به زبان برینفاک نوشته شده است هرچند نوشتن برنامههای برینفاک به ویژه برنامههای پیچیده بسیار دشوار است، نوشتن یک کامپایلر برای برینفاک به یک زبان معمولی مانند C به دلیل سادگی ساختار آن، بسیار ساده است. حتی کامپایلرهایی از برینفاک وجود دارد که به زبان برینفاک نوشته شده اند.
برینفاک به اصطلاح یکی از نمونههای Turing tarpit است: میتوان از آن برای نوشتن هر برنامهای استفاده کرد، اما انجام این کار عملی نیست، زیرا برینفاک آنقدر انتزاعی است که برنامههای آن بسیار طولانی یا پیچیده میشوند.
== مثالها ==
; افزودن دو مقدار
به عنوان مثال
[->+<]
|