پرش به محتوای اصلی
لوگوی زبان برنامه‌نویسی Zig در کنار نمادهای مختلف معماری‌های کامپیوتری مانند ARM، x86، RISC-V و SPARC روی یک پس‌زمینه تیره
برنامه‌نویسی

Zig 0.17.0 منتشر شد؛ پشتیبانی از معماری‌های کمتر رایج و گام بلند به‌سوی نسخه‌ی 1.0

نویسنده: انتشار: ۴ دقیقه مطالعه

Zig پس از پنج ماه کار، نسخه‌ی ۰.۱۷.۰ را منتشر کرد. این به‌روزرسانی شامل بهبود سیستم ساخت، لینکر ELF، پشتیبانی از loongarch32 و sparc64 و تصمیم‌گیری روی بیش از ۱۵۰ پیشنهاد زبان است.

نکات کلیدی

  • Zig 0.17.0 حاصل کار ۲۰۶ مشارکت‌کننده در ۹۲۵ کامیت است و سیستم ساخت و لینکر ELF آن به‌طور اساسی بازنویسی شده‌اند.
  • این نسخه پشتیبانی از معماری‌های کمتر رایج مانند loongarch32، sparc64 و حتی کنسول‌هایی مانند Nintendo Switch و PlayStation را اضافه کرده است.
  • تیم توسعه روی حدود ۱۵۰ پیشنهاد زبان تصمیم‌گیری کرده (۲۵ پذیرفته، ۱۲۵ رد) که گامی بزرگ برای تثبیت زبان و رسیدن به نسخه‌ی ۱.۰ است.
تبلیغ

اگر فکر می‌کنید دنیای زبان‌های برنامه‌نویسی به C، Rust و Go ختم می‌شود، انتشار Zig 0.17.0 می‌تواند نظرتان را عوض کند. این زبان که هدفش «نگهداری نرم‌افزارهای قوی، بهینه و قابل استفاده‌ی مجدد» است، در به‌روزرسانی جدید خود که حاصل کار ۲۰۶ مشارکت‌کننده در پنج ماه گذشته است، نه‌تنها به معماری‌های اصلی می‌پردازد، بلکه پشتیبانی از پلتفرم‌هایی مانند aarch64-openbsd، loongarch32-linux و sparc64-linux را نیز تقویت کرده است. این گستردگی پشتیبانی، Zig را به یکی از ابزارهای جذاب برای توسعه‌ی نرم‌افزارهای سیستمی و کراس‌پلتفرم تبدیل می‌کند.

سیستم ساخت متحول شد؛ لینکر ELF قدرتمندتر از قبل

یکی از تغییرات عمده‌ی این نسخه، بازنگری اساسی در سیستم ساخت (Build System) Zig است. معرفی Build Server Protocol به این معنی است که فرایند ساخت پروژه‌ها می‌تواند کارآمدتر و ماژولارتر شود. مهم‌تر از آن، پیشرفت‌های چشمگیر در لینکر ELF است. تیم توسعه‌ی Zig ادعا می‌کند لینکر جدید آن‌قدر بهبود یافته که اکنون انتظار می‌رود کامپایل افزایشی به‌صورت قابل اتکا روی پلتفرم x86_64-linux کار کند. همچنین گفته می‌شود لینکر جدید Zig برای هدف خاصی مانند sparc64-linux نسبت به LLD (لینکر LLVM) پشتیبانی بهتری ارائه می‌دهد.

پشتیبانی گسترده از معماری‌ها: از Nintendo Switch تا پردازنده‌های قدیمی

فهرست پلتفرم‌هایی که Zig از آن‌ها پشتیبانی می‌کند، خواندنی است. این زبان نه‌تنها روی x86_64 و ARM متمرکز شده، بلکه به معماری‌های خاص و گاهی کمتر رایج نیز سر می‌زند. در این نسخه شاهد اضافه شدن پشتیبانی برای اهدافی هستیم که شاید نام آن‌ها را کمتر شنیده باشید:

  • loongarch32-linux-gnu[sf]: معماری مبتنی بر MIPS که در چین توسعه یافته.
  • sparc64-linux: معماری تاریخی که هنوز در برخی سرورها استفاده می‌شود.
  • aarch64-switch، arm-gba، mipsel-psx، powerpc-wiiu: پشتیبانی اولیه از سخت‌افزار کنسول‌های بازی مانند Nintendo Switch، Game Boy Advance، PlayStation و Wii U.
  • xtensa-linux: معماری مورد استفاده در تراشه‌های ESP32.

البته برای برخی از این اهداف، مانند xtensa، پشتیبانی در حال حاضر تنها از طریق بک‌اند C یا بک‌اند آزمایشی LLVM قابل استفاده است.

Zig پشتیبانی خود از پلتفرم‌ها را در چهار رده (Tier) دسته‌بندی می‌کند. هدف برای رده‌ی ۱ (بالاترین سطح) این است که هیچ تستی غیرفعال نباشد؛ شرطی که پس از انتشار نسخه‌ی ۱.۰ الزامی خواهد شد. در حال حاضر تنها x86_64-linux در این رده قرار دارد. رده‌ی ۲ شامل اهدافی مانند aarch64-linux، x86_64-windows و riscv64-linux می‌شود و پشتیبانی آن‌ها بسیار خوب است. پلتفرم‌های جدیدی مانند aarch64-openbsd اکنون به‌صورت بومی در CI Zig تست می‌شوند تا از کیفیت بالا اطمینان حاصل شود.

تبلیغ

تصمیم‌های مهم برای رسیدن به Zig 1.0

مسیر به‌سوی نسخه‌ی پایدار ۱.۰ سریع‌تر شده است. از انتشار Zig 0.16.0، پیشرفت زیادی در جهت تثبیت زبان صورت گرفته. تیم توسعه در این مدت درباره‌ی پیشنهادهای زبان (language proposals) متعددی بحث و تصمیم‌گیری کرده‌اند: حدود ۲۵ پیشنهاد پذیرفته و حدود ۱۲۵ پیشنهاد رد شده‌اند. در زمان نگارش این یادداشت، هنوز ۲۳ پیشنهاد در ترکر Codeberg و ۶۱ پیشنهاد در ترکر قدیمی GitHub باز هستند. یعنی اگرچه تصمیم‌های بزرگ دیگری هم باقی مانده، جامعه در حال نزدیک‌شدن به طراحی نهایی زبان است.

تغییرات شکست‌برانگیز و نحوه‌ی مهاجرت

مانند هر به‌روزرسانی بزرگ، Zig 0.17.0 نیز تغییراتی دارد که ممکن است کدهای موجود را بشکند. مهم‌ترین آن‌ها بازتعریف @bitCast است. رفتار جدید این تابع، حالا نسبت به endian (ترتیب بایت‌ها) بی‌تفاوت است؛ یعنی عملکرد یکسانی روی پردازنده‌های little-endian و big-endian خواهد داشت. این تغییر عمدتا روی کست‌هایی که شامل آرایه یا بردار هستند تاثیر می‌گذارد و ممکن است بدون ایجاد خطای کامپایل، رفتار برنامه را تغییر دهد. توسعه‌دهندگان هنگام ارتقا بهتر است استفاده‌های @bitCast را که شامل این نوع‌ها می‌شود، بررسی کنند.

همچنین چندین ویژگی قدیمی حذف یا جایگزین شده‌اند:

  • @cImport که در نسخه‌ی ۰.۱۶ منسوخ شده بود، حالا کاملا حذف شده. برای ترجمه‌ی کد C به Zig باید به‌طور صریح به پکیج رسمی translate-c وابستگی اضافه کنید.
  • @intFromEnum و @enumFromInt با توابع جدید @backingInt و @fromBackingInt جایگزین شده‌اند که معناشناسی واضح‌تری دارند.
  • سینتکس ضرب آرایه a ** b حذف و با تابع @splat جایگزین شده است.
  • تابع کمکی @divCeil برای تقسیم صحیح با گردکردن رو به مثبت بی‌نهایت اضافه شده است.

خوشبختانه، ابزار zig fmt به‌طور خودکار بسیاری از این تغییرات را برای کد شما اعمال می‌کند.

ویژگی‌های جدید و بهبود کتابخانه‌ی استاندارد

این نسخه امکانات تازه‌ای برای حوزه‌های تخصصی نیز به همراه دارد. برای توسعه‌دهندگانی که با SPIR-V کار می‌کنند، تابع جدید @SpirvType اضافه شده که امکان تعریف نوع‌های خاص SPIR-V مانند سمپلر (Sampler) و تصویر (Image) را به‌عنوان نوع‌های سطح‌بالا فراهم می‌کند.

همچنین پشتیبانی از f128 برای توابع @exp و @exp2 بر اساس یک مقاله‌ی آکادمیک پیاده‌سازی شده است. بهبودهای عملکردی متعددی نیز در کتابخانه‌ی استاندارد رخ داده، مانند بهینه‌سازی ArrayHashMap.setKey برای محاسبه‌ی دوباره‌ی ایندکس کامل.

نیازمندی‌های سیستم و آینده‌ی Zig

Zig برای پشتیبانی از سیستم‌عامل‌های مختلف، حداقل نسخه‌هایی را تعیین کرده است: لینوکس کرنل ۵.۱۰ به بالا، ویندوز ۱۰ به بالا، FreeBSD 14.0+ و OpenBSD 7.8+. این زبان توسط بنیاد نرم‌افزاری Zig، یک سازمان غیرانتفاعی، توسعه می‌یابد و توسعه‌دهندگان را به کمک‌های مالی دوره‌ای تشویق می‌کند تا سرعت حرکت در نقشه‌ی راه به‌سوی نسخه‌ی ۱.۰ افزایش یابد.

با پشتیبانی گسترده از معماری‌های گوناگون، تثبیت پیوسته‌ی زبان، و بهبودهای عمیق در ابزارسازی، Zig 0.17.0 بیش از پیش خود را به‌عنوان گزینه‌ای جدی در برنامه‌نویسی سیستمی و کراس‌پلتفرم نشان می‌دهد. مسیر به‌سوی نسخه‌ی ۱.۰ ادامه دارد و این انتشار نشان می‌دهد مقصد چندان دور نیست.

ابزارهای مرتبط والور

سوالات متداول

مهم‌ترین تغییر Zig 0.17.0 چیست؟

بازنگری در سیستم ساخت با معرفی Build Server Protocol و بهبودهای عمده در لینکر ELF که کامپایل افزایشی را قابل‌اتکاتر می‌کند، از تغییرات کلیدی این نسخه‌اند.

Zig از چه معماری‌هایی پشتیبانی می‌کند؟

پشتیبانی Zig گسترده است: از x86 و ARM گرفته تا معماری‌هایی مانند RISC-V، SPARC64، LoongArch، PowerPC و حتی پلتفرم‌هایی مانند Nintendo Switch (aarch64-switch) و PlayStation (mipsel-psx).

منابع

این مقاله با کمک هوش مصنوعی از منابع بالا تدوین و توسط امیرعلی کریمی بازبینی شده است. قوانین محتوایی والور

امیرعلی کریمی

بنیان‌گذار و سردبیر والور

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

لوگوی کلود کد در کنار متن نسخه ۲.۱.۲۷۵ و آیکون‌های نشان‌دهنده‌ی به‌روزرسانی و رفع اشکال
برنامه‌نویسی5 دقیقه مطالعه

کلود کد ۲.۱.۲۷۵: پشتیبانی از AGENTS.md و بیش از ۲۰۰ اصلاحیه برای بهبود تجربه توسعه

آخرین به‌روزرسانی کلود کد (۲.۱.۲۷۵) قابلیت جدید پشتیبانی از فایل AGENTS.md را به‌عنوان جایگزین CLAUDE.md معرفی می‌کند. این آپدیت همچنین بیش از ۲۰۰ اصلاح و بهبود در ابزارهای ویرایش، مدیریت پلاگین و

لوگوی macOS 27 Golden Gate در کنار تصویر پل گلدن گیت
تکنولوژی6 دقیقه مطالعه

macOS گلدن گیت منتشر شد؛ از سیری هوش مصنوعی تا پایان پشتیبانی از اینتل

اپل macOS 27 گلدن گیت را منتشر کرد. این نسخه شامل سیری هوش مصنوعی، ابزارهای ویرایش عکس مبتنی بر هوش مصنوعی، تغییرات رابط کاربری Liquid Glass و اعلام پایان پشتیبانی از مک‌های اینتل است.

تبلیغ