پرش به محتوای اصلی
پرش به محتوای مقاله

چرا نسخه‌ی ۰.۱۰.۰ Blaise دیگر به اسمبلرهای خارجی نیاز ندارد؟

·۲۰ خرداد ۱۴۰۵۴ دقیقه مطالعه
چرا نسخه‌ی ۰.۱۰.۰ Blaise دیگر به اسمبلرهای خارجی نیاز ندارد؟
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

تولید مستقیم اشیاء ELF توسط کامپایلر بدون نیاز به اسمبلر خارجی؛ این تغییر، جریان داده از کد منبع به فایل باینری را به‌طور ساختاری کوتاه می‌کند.

اگر در حال توسعه‌ی نرم‌افزارهای سیستمی با سینتکس الهام‌گرفته از پاسکال هستید، زمان کامپایل شما به‌شدت کاهش یافت و اهداف اجرایی‌تان گسترده‌تر شد. در ۸ ژوئن ۲۰۲۶، پروژه Blaise نسخه ۰.۱۰.۰ را منتشر کرد؛ نقطه عطفی که این زبان را با ارائه یک بک‌اند (Backend) — یعنی بخشی از کامپایلر که کد را به زبان ماشین تبدیل می‌کند، شبیه به مترجمی که متن را دقیقاً به زبان مقصد برمی‌گرداند — به یک ابزار سیستمی حرفه‌ای نزدیک‌تر می‌کند.

برای توسعه‌دهندگان، این بدان معناست که Blaise دیگر صرفاً به بک‌اند QBE وابسته نیست. این زبان اکنون می‌تواند فایل‌های ELF .o را مستقیماً تولید کند، بدون اینکه به یک اسمبلر خارجی نیاز داشته باشد. این تغییر به زبان اجازه می‌دهد تا به‌صورت بومی برای لینوکس x86-64 هدف‌گذاری شود و شکاف بین یک پروژه پژوهشی و یک ابزار کاربردی برای محاسبات با کارایی بالا را پر کند.

همان‌طور که در تحلیل‌های پیشین ما درباره‌ی زبان‌های برنامه‌نویسی سیستمی اشاره کردیم، حذف لایه‌های واسط در تولید کد، همواره منجر به پایداری بیشتر باینری‌ها می‌شود. طبق گزارش یادداشت‌های انتشار در گیت‌هاب، این به‌روزرسانی ستون‌های فنی زیر را معرفی می‌کند:

معماری هسته

  • بک‌اند بومی x86-64: این قابلیت از طریق پرچم --backend native یا هدف‌گذاری --target linux-x86_64 فراخوانی می‌شود. این بخش تمام نقاط عطف M1 تا M8 را پوشش می‌دهد؛ از جمله محاسبات اعداد صحیح و اعشاری، جریان کنترل، حلقه‌های for/while/repeat و رکوردها. همچنین از آرایه‌های استاتیک، دینامیک و باز (Open Arrays)، و یک سیستم کامل کلاس با دیسپچ متدها، vtables، سازنده‌ها و متدکارهای تخریب (Destructors) پشتیبانی می‌کند.
  • حافظه و اجرا: پیاده‌سازی ARC (شمارش مراجع) برای رشته‌ها، کلاس‌ها و اینترفیس‌ها. این سیستم شامل دیسپچ اینترفیس از طریق itab، هندلینگ استثنائات (try/except/finally) و پشتیبانی از Generics برای کلاس‌های monomorphised، رکوردها، اینترفیس‌ها و روتین‌های آزاد است.
  • پشتیبانی از رشته‌ها (Threads): معرفی threadvar برای ذخیره‌سازی محلی هر رشته (TLS) و یک تخصیص‌کننده حافظه مجزا برای هر رشته جهت کاهش تداخل قفل‌ها (Lock Contention). شمارش مراجع اکنون از طریق ARC اتمیک (افزایش/کاهش اتمیک) ایمن شده است. همچنین مراجع ضعیف (Weak Refs) از طریق یک جدول مراجع ضعیف که توسط Mutex محافظت می‌شود، در بین رشته‌ها کار می‌کنند. هر رشته اکنون زنجیره فریم استثنائات مخصوص به خود را از طریق متغیرهای جهانی استثنائات محلی دریافت می‌کند.
  • کامپایل افزایشی (Incremental Compilation): استفاده از پرچم --incremental و فرمت جدید .bif (فایل رابط Blaise). این سریال‌سازی فشرده از رابط عمومی یک واحد (Unit) است که داخل فایل .o جاسازی می‌شود و شامل ثابت‌ها، انواع داده، روتین‌ها، متغیرهای جهانی، بدنه توابع inline و دستورات مربوط به قرارداد فراخوانی (Calling Convention) است.

اصلاحات زبانی

  • پرانتزهای اجباری: توابع اکنون حتی با صفر آرگومان به () نیاز دارند (مثلاً Obj.Free()). این کار تضمین می‌کند که Foo همیشه یک خواندن (Read) و Foo() همیشه یک فراخوانی (Call) باشد و ابهام بین مقداردهی Result و بازگشت (Recursion) را از بین می‌برد.
  • عملگر الماس (Diamond Operator): پشتیبانی از استنتاج نوع برای Generics؛ مثلاً در var L: TList<Integer> := TList<>.Create()، نوع داده از سمت چپ استنتاج می‌شود.
  • کتابخانه استاندارد و سینتکس: افزودن میان‌بر Exit(Value) (که در ۳۰۵ نقطه از خودِ کامپایلر آزمایش شده است)، ثابت‌های مجموعه‌ای (مثلاً const X = [a, b]) و ردیابی مجزا برای حالت‌های پارامتر out در مقابل var.
  • بهبودات ورودی/خروجی: دستور WriteLn اکنون مقادیر Boolean را به‌درستی True/False چاپ می‌کند و مقادیر ۳۲ بیتی بدون علامت را مدیریت می‌کند. همچنین TStringList.Text و LoadFromFile اکنون خطوط را دقیقاً همان‌طور که هستند، بدون حذف فضاهای خالی (Trimming)، حفظ می‌کنند.

این انتشار، بازی را برای توسعه‌دهندگان Blaise تغییر می‌دهد چون «حدس زدن» سازوکارهای داخلی کامپایلر را حذف می‌کند. تیم توسعه با حذف منطق IsNoArgFuncCall توانست سه باگ پنهان در تولید کد (Codegen) را شناسایی و رفع کند. این موضوع ثابت می‌کند که قوانین سخت‌گیرانه‌تر زبانی، منجر به باینری‌های پایدارتر می‌شود. همچنین این به‌روزرسانی فراخوانی صحیح فیلدهای Procedure را اضافه می‌کند: Obj.Handler() از طریق اشاره‌گر کد ذخیره‌شده دیسپچ می‌شود، در حالی که Obj.Handler مقدار فیلد را می‌خواند.

برای کاربر نهایی، افزودن ARC اتمیک و تخصیص‌کننده‌های حافظه مجزا به این معناست که بالاخره می‌توان برنامه‌های Blaise را روی چندین هسته پردازشی مقیاس کرد. انتقال به کامپایل افزایشی، که توسط رشته‌های پردازشی موازی پشتیبانی می‌شود، پاسخی مستقیم به نیاز برای چرخه‌های تکرار سریع‌تر است. این سیستم خطاهای EImportError را که هنگام استفاده از داده‌های رابط قدیمی رخ می‌داد، حل می‌کند.

بهبودات دیگر شامل پرچم --dump-ast برای تشخیص مشکلات تولید کد و تغییر نام نمادها (Symbol Mangling) با پیشوند واحد برای روتین‌های آزاد و کلاس‌ها است تا بیلد‌های چند-واحدی بدون تداخل ممکن شود. همچنین تخته کانبان TUI پروژه با حالت CLI، ذخیره‌سازی تاریخ و زمان به UTC و تشخیص تغییرات فایل‌های خارجی به‌روزرسانی شد.

برای تأیید این ادعاها، پروژه گزارش داده است که ۲۶۲۷ تست با موفقیت پاس شده و ۲۶۲۲۰۲ خط از کد QBE IR در نقطه تثبیت (Fixpoint) تأیید شده است. با بیش از ۱۳۰ کامیت از نسخه ۰.۹.۰، این کامپایلر اکنون رسماً Self-hosting (خود-میزبان) است و وضعیت FIXPOINT_OK را دارد.

گام بعدی شما

  • اگر از زبان‌های سیستمی استفاده می‌کنید، بک‌اند بومی را با پرچم --backend native تست کنید.
  • ساختار جدید فایل‌های .bif را برای بهینه‌سازی زمان بیلد در پروژه‌های بزرگ بررسی کنید.
  • از قابلیت‌های جدید Generics و عملگر الماس برای ساده‌سازی کدها بهره ببرید.
  • منتظر نسخه ۰.۱۱.۰ باشید که احتمالاً بر پایه این زیرساخت‌های ایمنی رشته‌ها و اجرای بومی بنا خواهد شد.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell مراجعه کنید.

چرا این موضوع مهم است؟

این به‌روزرسانی با حذف وابستگی به ابزارهای Third-party، سد ورود برنامه‌نویسان جدید به اکوسیستم پاسکال را می‌شکند. تخصص تیم Blaise در حذف واسطه‌های نرم‌افزاری، بهره‌وری را از سطح سینتکس به سطح معماری سیستم منتقل کرده است.

تأثیر برای ایران

این ابزار برای برنامه‌نویسان سیستم در ایران که در پروژه‌های قدیمی یا خاص با زبان پاسکال فعالیت می‌کنند، دسترسی به زنجیره‌ای مدرن و سریع‌تر از ابزارها فراهم می‌کند.

·نگاه ما
تحریریه دات‌هوش

تحلیل ما نشان می‌دهد که Blaise با درونی‌سازی (In-housing) بک‌اند x86-64، در واقع مدل توسعه‌ی زبان‌های مدرنی مثل Rust را دنبال می‌کند. حذف اسمبلرهای خارجی نه تنها سرعت را بالا می‌برد، بلکه کنترل دقیق‌تری روی بهینه‌سازی کد (Code Generation) می‌دهد و این یک گام حیاتی برای تبدیل پاسکال از یک زبان آموزشی به یک ابزار صنعتی مدرن است.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.