موضوع مقاله: برین‌فاک | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # برین‌فاک | مقدمه: این برنامه در سال ۱۹۹۳ توسط اربن مولر با هدف طراحی یک زبان برنامه‌نویسی با کوچک‌ترین کامپایلر ممکن طراحی شد. | ## بخش 1: برین‌فاک | کامپایلرهای برین‌فاک معمولاً کمتر از ۲۰۰ بایت حجم دارند و حتی یک کامپایلر ۱۰۰ بایتی نیز برای آن وجود دارد. مولر برین‌فاک را با هدف پیاده‌سازی آن با کوچکترین کامپایلر ممکن، با الهام از کامپایلر ۱۰۲۴ بایت برای زبان برنامه نویسی FALSE طراحی کرد. کامپایلر مولر به زبان ماشین پیاده‌سازی شد و به صورت فایل دودویی با اندازهٔ ۲۹۶ بایت کامپایل شد. این برنامه با یک «صفحهٔ راهنما» عرضه شده بود، که به طور خلاصه زبان را توصیف می‌کرد و خواننده را با این پرسش به چالش می‌کشید که "چه کسی می‌تواند یک برنامه کارآمد با این تولید کند؟ چندین کامپایلر برین‌فاک که از ۲۰۰ بایت نیز کوچک‌تر هستند ساخته شده است که یکی از آن‌ها فقط ۱۰۰ بایت حجم دارد. ′′P «زبان مادر» برین‌فاک به جز این دو دستور I/O می‌توان گفت برین‌فاک یک مشتق از زبان برنامه‌نویسی رسمی ``P است با تغییرات جزئی. در واقع، با استفاده از شش نماد (symbol) معادلِ دستورهای مربوط +, -, <, >, [, ], بوهم برای کارکردهای اولیه که برای محاسبه هر عملکرد قابل‌محاسبه نیاز است، برنامه‌ای صریح ارائه کرده است. | ## بخش 2: برین‌فاک | ماشین او توسط ماشین Melzac مدل‌سازی محاسبات را از طریق محاسبه به جای منطق و تقلید از یک عملگر انسانی که سنگریزه‌ها را بر روی چرتکه حرکت می‌دهد شبیه‌سازی شده است. برنامهٔ برین‌فاک دنباله‌ای از این دستورهاست که احتمالاً با سایر کاراکترها (که نادیده گرفته می‌شوند) در هم آمیخته اند. دستورها به صورت پیاپی اجرا می‌شوند، با برخی از استثنائات: یک اشاره‌گر دستور، در دستور اول شروع می‌شود و هر فرمانی که به آن اشاره می‌کند اجرا می‌شود، پس از آن معمولاً به سمت فرمان بعدی حرکت می‌کند. زبان برین‌فاک از یک مدل ساده بهره می‌برد متشکل از متن برنامه، نشانگر دستورالعمل، و هم‌چنین آرایه ای از حداقل ۳۰ هزار بایت که ابتدا با صفر مقداردهی شده اند. هم‌چنین یک اشاره‌گر اولیه برای اشاره به بایت کم‌ارزش آرایه و دو جریان بایت برای ورودی و خروجی که اغلب به یک صفحه‌کلید و یک مانیتور و با استفاده از رمزنگاری نویسه ASCII متصل می‌شوند. دستورهای برین‌فاک این‌ها هستند: کاراکترمعنا<یکی به اشاره‌گر داده می‌افزاید (تا به سلول بعدی سمت راست اشاره کند).>یکی از اشاره‌گر داده می‌کاهد (تا به سلول قبلی سمت چپ اشاره کند).+یکی به بایت محل اشاره‌گر می‌افزاید.-یکی از بایت محل اشاره‌گر می‌کاهد..بایت محل اشاره‌گر را به خروجی می‌دهد.,یک بایت ورودی می‌گیرد و آن را در بایت مورد اشاره اشاره‌گر ذخیره می‌کند.[اگر بایت در محل مورد اشاره اشاره‌گر صفر بود، به جای بردن شمارنده برنامه به جلو به دستور بعدی، به دستور بعد از ] متناظر می‌پرد.]اگر بایت در محل مورد اشاره اشاره‌گر غیرصفر بود، به جای بردن شمارنده برنامه به جلو به دستور بعدی، به دستور قبل از [ متناظر می‌پرد. این امر تا حدی به این دلیل است که هر کارِ اندکی پیچیده، نیاز به یک توالی طولانی از دستورات دارد و البته به این دلیل است که متن برنامه هیچ نشانهٔ مستقیمی از حالت یا وضعیت برنامه نمی‌دهد! | ## بخش 3: برین‌فاک | این‌ها و هم‌چنین ناکارآمدی برین‌فاک و قابلیت‌های ورودی و خروجی محدود آن، از دلایل آن است که برای برنامه‌نویسی غیر شوخی مورد استفاده قرار نگیرد. با این حال، مانند هر زبان معادل ماشین تورینگ کاملی، در صورت دسترسی به مقدار نامحدودی از حافظه، برین‌فاک نیز از نظر تئوری قادر به محاسبهٔ هر عملکرد قابل محاسبه یا شبیه‌سازیِ هر گونه مدل محاسباتی است. با این حال تعداد زیادی از انواع برنامه به زبان برین‌فاک نوشته شده است هرچند نوشتن برنامه‌های برین‌فاک به ویژه برنامه‌های پیچیده بسیار دشوار است، نوشتن یک کامپایلر برای برین‌فاک به یک زبان معمولی مانند C به دلیل سادگی ساختار آن، بسیار ساده است. برین‌فاک به اصطلاح یکی از نمونه‌های Turing tarpit است: می‌توان از آن برای نوشتن هر برنامه‌ای استفاده کرد، اما انجام این کار عملی نیست، زیرا برین‌فاک آنقدر انتزاعی است که برنامه‌های آن بسیار طولانی یا پیچیده می‌شوند. مشتقات بسیاری از افراد معادل های برین‌فاک را ایجاد کرده‌اند (زبانهایی با دستوراتی که مستقیماً به برین‌فاک نگاشت می‌شوند) و یا مشتقات برین‌فاک (زبانهایی که رفتار برین‌فاک را گسترش می‌دهند یا آن را در قلمرو معنایی جدید نگاشت می‌دهد). | ## جمع‌بندی | VerboseFuck، که مانند یک زبان برنامه نویسی سنتی به نظر می‌رسد، فقط آنچه به عنوان پارامتر یا عبارت ظاهر می‌شود در واقع بخشی از دستورها طولانی‌تر است که قابل تغییر نیستند.