موضوع مقاله: چیکن (پیاده‌سازی اسکیم) | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # چیکن (پیاده‌سازی اسکیم) | مقدمه: چیکن (به صورت CHICKEN) یک زبان برنامه‌نویسی است، به ویژه یک کامپایلر و مفسّر که گویشی از زبان برنامه‌نویسی اسکیم را پیاده‌سازی می‌کند و کد منبع Scheme را به C استاندارد کامپایل می‌کند. | ## بخش 1: چیکن (پیاده‌سازی اسکیم) | این برنامه بیشتر در Scheme اجرا می‌شود، بعضی از قسمت‌ها در C برای عملکرد یا آسان‌تر تعبیه کردن در برنامه‌های به زبان برنامه‌نویسی C است. تمرکز تمرکز چیکن به سرعت از شعار آن مشخص می‌شود: «یک سیستم اسکیم عملی و قابل حمل». تمرکز اصلی چیکن استفادهٔ عملی از Scheme برای نوشتن نرم‌افزار در دنیای واقعی است. همچنین دارای پشتیبانی داخلی برای ترجمهٔ دوگانه برنامه‌ها و برنامه‌های افزودنی است که به شما اجازه می‌دهد در پلتفرم‌های سامانهٔ نهفته مختلف مورد استفاده قرار گیرد. طرح مانند بسیاری از کامپایلرهای اسکیم، چیکن از C استاندارد به عنوان نمایش میانی استفاده می‌کند. یک برنامهٔ Scheme توسط کامپایلر چیکن به C ترجمه می‌شود و سپس یک کامپایلر C برنامهٔ C را به کد ماشین برای معماری رایانه مورد نظر ترجمه کرده، یک برنامهٔ قابل اجرا تولید می‌کند. طراحی چیکن از مقاله ۱۹۹۴ توسط هنری بیکر الهام گرفته شده‌است که یک استراتژی ابتکاری برای کامپایل کردن Scheme به C طرح کرده‌است. از این رو، می‌توان از عملیات پشته C طبیعی مانند ایجاد متغیر خودکار، تخصیص آرایه به اندازهٔ متغیر و غیره استفاده کرد. وقتی پشته پر شد (یعنی نشانگر پشته به بالای پشته می‌رسد)، می‌توان یک بازیافت حافظه راه‌اندازی کرد. با وجود این، کد C از کادرهای پشته C کپی نمی‌کند، فقط از اشیای Scheme استفاده می‌کند؛ بنابراین نیازی به دانش در مورد پیاده‌سازی C نیست. به‌طور کامل، پشتهٔ Scheme از پشته C به عنوان مهدکودک همراه با دو پشتهٔ مورد نیاز جمع‌کننده زبالهٔ نسل تشکیل شده‌است. این روش سرعت پشتهٔ C را برای بسیاری از عملیات فراهم می‌کند و به شما امکان می‌دهد از ادامه‌ها به عنوان تماس‌های ساده به توابع C استفاده کنید. به علاوه، راه حل بیکر رفتار بازگشتی مجانبی را تضمین می‌کند، همان‌طور که در استاندارد زبان Scheme لازم است. | ## بخش 2: چیکن (پیاده‌سازی اسکیم) | محدودیت‌ها و انحراف از استاندارد اسکیم چیکن عمدتاً با R5RS سازگار است، با چند محدودیت و انحراف قابل توجه. سیستم اصلی از پشتیبانی اساسی از نویسه‌های UTF-8 برخوردار است؛ با این حال روند نمایه‌سازی رشته و دستکاری آن از UTF-8 مطلع نیست. نرم‌افزار الحاقی چیکن مخزن نرم‌افزاری بزرگی از کتابخانه‌ها و برنامه‌های اضافه‌شده به نام تخم‌مرغ دارد. در حال حاضر، تخم‌مرغ‌ها را می‌توان در هر مکان و تحت هر سیستم کنترل نسخه‌ای توسعه داد؛ در حالی که هنگام استفاده از اکثر سایت‌های میزبان کد محبوب، هنوز مدیریت انتشار نیمه اتوماتیک حفظ می‌شود. توسعه‌دهنده آزاد است که هر مکانی که انتخاب می‌کند، میزبانی کند و حتی می‌تواند انتخاب کند که از کنترل نسخه عمومی خودداری کرده و فقط tarballهای ساده را توزیع کند. برای همهٔ تخم‌مرغ‌های آزادشده، آخرین نسخه به‌طور خودکار به عنوان بخشی از یک فرایند یکپارچه‌سازی مداوم آزمایش می‌شود. یک سرور آزمایشی استاندارد وجود دارد که در آن سیستم هسته و همهٔ تخم‌مرغ‌ها روزانه در برابر جدیدترین نسخهٔ توسعه‌یافته (برای گرفتن باگ‌های برگشتی) و آخرین نسخهٔ پایدار (برای اطمینان از این‌که همه‌چیز برای کاربران سیستم پایدار کار می‌کند) آزمایش می‌شوند. هم‌چنین، هر کسی می‌تواند داوطلب شود تا ظرفیت آزمایش بیشتری را در انواع مختلف: سخت‌افزار، سیستم عامل یا هستهٔ منتشرشده ارائه دهد. امکانات چیکن از اکثر Scheme استاندارد R5RS پشتیبانی می‌کند، اما هم‌چنین کمی از ویژگی‌های غیراستاندارد را اضافه می‌کند که در همهٔ پیاده‌سازی‌های اسکیم در دسترس نیست. رابط تابع خارجی کامپایل چیکن به C این امکان را فراهم می‌کند تا کد C سفارشی را به نتیجهٔ کامپایل‌شده تزریق کنید؛ این امر ادغام با کتابخانه‌های C را آسان می‌کند. رابط کاربری خارجی آن از تبدیل جلو و عقب بین اکثر تایپ‌های داخلی C و اشیا اسکیم مربوطه پشتیبانی می‌کند. متقابل گردآوری تدوین متقابل کد Scheme به پلتفرم دیگر (به عنوان مثال برای استفادهٔ تعبیه‌شده بر روی یک دستگاه) نسبتاً آسان است. برای امکان کامپایل متقابل برای کد اسکیم، چیکن مدلی از کامپایل جداگانه را تحمیل می‌کند: یک ماژول کامپایل‌شده شامل دو کتابخانه مشترک است. | ## بخش 3: چیکن (پیاده‌سازی اسکیم) | یک کتابخانه حاوی کد واقعی است که در زمان اجرا استفاده خواهد شد (برای پلتفرم هدف کامپایل شده‌است) و دیگری یک ماژول واردشده است که برای بارگذاری کدی که در زمان کامپایل مانند کد ماکروی رویه‌ای اجرا می‌شود، (بر روی پلتفرم میزبان) استفاده می‌شود. پس از دست‌یابی به ترجمه به C، می‌توان به سادگی از کامپایلر C استفاده کرد که برای ساخت یک پلتفرم دیگر تنظیم شده‌است. ماژول‌ها و ماکروها از نسخهٔ ۴، چیکن دارای یک سیستم ماژول داخلی است و از ماکروهای hygienic سطح پایین از طریق تغییر نام صریح ماکروها پشتیبانی می‌کند. هم‌چنین از ماکروها در قوانین نحوی استاندارد و تغییر نام ضمنی ماکروها، که اساساً نسخه معکوس تغییر نام صریح است، پشتیبانی می‌شود. هر شناسه‌ای که صریحاً به عنوان غیربهداشتی تزریق نشده باشد، به‌طور خودکار تغییر نام می‌یابد تا از ضبط نام جلوگیری شود. هزینهٔ عملکرد به این دلیل اتفاق می‌افتد که تغییر نام ضمنی مستلزم گسترش‌دهنده ماکرو است تا عبارات را دو بار دیگر بازپس‌گیرد. این هزینه در زمان توسعه پرداخت می‌شود؛ بنابراین یک نویسنده ماکرو باید در نظر بگیرد اگر زمان‌های بیشتری برای کامپایل قابل قبول باشد. وقتی کد اسکیم با گزینهٔ نیاز به رفع اشکال کامپایل می‌شود، رویدادهای رفع اشکال در نقاط خاصی از کد تزریق می‌شوند. این‌ها به صورت فراخوانی به یک تابع C اجرا می‌شوند که وقتی اشکال‌زدایی کد انجام نمی‌شود، نسبتاً کم‌هزینه است. این روند متوقف شده‌است، کاربر می‌تواند نقاط شکست را تنظیم کرده و برنامه را شروع کند. سپس، هنگامی که نقطهٔ شکست ایجاد می‌شود، کلاینت (فرایند در حال اشکال‌زدایی) وارد یک حلقه فرمان می‌شود که به شما امکان می‌دهد کلاینت را بازبجویید تا متغیرها را بخواند یا آن‌ها را تغییر دهد. این به کامپایلر اجازه می‌دهد تا خطاهای تایپ متغیر را در زمان کامپایل دریافت کرده و تخصص تایپ را انجام دهد. این تخصص امکان حذف چندین بررسی ایمنی برای تشخیص تایپ در زمان اجرا را دارد، زمانی که تایپ می‌تواند در زمان کامپایل استنباط شود. | ## جمع‌بندی | این ممیزی اجازه تجزیه و تحلیل جریان متقابل ماژول را نمی‌دهد؛ پس از آن تنها می‌تواند به بهینه‌سازی کد که بخشی از یک واحد کامپایل (یا ماژول) استفاده کرد.