۷ آبان ۱۴۰۵ fzakaria.com ۳ دقیقه مطالعه

ابزار jinx؛ کامپایل Nixpkgs به TypeScript برای استفاده از اکوسیستم جاوا اسکریپت

ابزار jinx؛ کامپایل Nixpkgs به TypeScript برای استفاده از اکوسیستم جاوا اسکریپت — Nixpkgs for the Front End Impaired

خلاصه

ابزار jinx کدهای Nix را به TypeScript کامپایل می‌کند و تمام بیش از ۲۳۰ هزار ویژگی nixpkgs را بدون نیاز به نصب Nix روی سیستم قابل ارزیابی می‌سازد. این پروژه امکاناتی مثل خطایابی، تکمیل خودکار کُد و نوشتن پکیج‌ها را به اکوسیستم TypeScript می‌آورد.

ابزار جدیدی به نام jinx معرفی شده است که کدهای زبان Nix را به TypeScript تبدیل می‌کند. این ابزار کل مخزن عظیم nixpkgs شامل بیش از ۲۳۰ هزار ویژگی (attribute) را کامپایل کرده و دقیقاً همان مسیرهای ساخت (drvPath) که Nix تولید می‌کند را خروجی می‌دهد؛ بدون اینکه حتی نیاز باشد ابزار Nix روی سیستم شما نصب شده باشد.

پس‌زمینه و ایده اصلی

زبان Nix و اکوسیستم آن به خاطر مدل فروشگاه (store model)، تکرارپذیری (reproducibility) و ایزوله‌بودن (hermeticity) محبوبیت زیادی دارند. خود زبان Nix یک زبان کاربردی تنبل (lazy functional language) کوچک است که طراحی مجدد آن کار سختی نیست.

اما ارزش واقعی Nix در زبان آن نیست، بلکه در nixpkgs است؛ مجموعه‌ای ۲۰ ساله شامل بیش از ۱۴۰ هزار پکیج که چالش‌های مختلف کامپیوترها، پچ‌های بسته‌های مختلف، سازگاری با معماری‌های گوناگون مانند aarch64-darwin و رفع خطاهای کامپایل در آن حل شده است. هر تلاشی برای ساخت جایگزین برای Nix معمولاً به خاطر نداشتن این پکیج‌ها شکست می‌خورد.

راه حل jinx این است که به‌ جای بازنویسی پکیج‌ها، کل درخت nixpkgs را به زبانی تبدیل کند که اکوسیستم‌های دیگر مثل TypeScript از آن پشتیبانی کنند.

جزئیات فنی عملکرد jinx

ابزار jinx یک ترنسپایلر (transpiler) است که فایل‌های .nix را به ماژول‌های .nix.ts تبدیل می‌کند:

  • عبارات لامبدا به توابع پیکانی (arrow functions) تبدیل می‌شوند.
  • ساختارهای let به بلوک‌های const تبدیل می‌شوند.
  • مجموعه‌های ویژگی (attribute sets) به اشیاء لیتراژ (object literals) نگاشت می‌شوند.
  • ارزیابی تنبل (lazy evaluation) با استفاده از توابع nix.thunk پیاده‌سازی می‌شود.

نکته جالب این است که خروجی ارزیابی jinx با ابزار اصلی Nix کاملاً تطابق دارد و در تست‌های انجام‌شده روی پکیج‌های مختلف، هیچ تفاوتی در تولید فایل‌های .drv دیده نشده است.

چرا این ابزار برای مهندسان اهمیت دارد؟

ارزیابی nixpkgs در TypeScript ممکن است کندتر از مفسر اصلی C++ باشد (حدود ۳ تا ۵ برابر کندتر)، اما در دسترس قرار دادن nixpkgs برای دنیای TypeScript قابلیت‌های جذاب زیر را فراهم می‌کند:

  • پشتیبانی از LSP و تکمیل خودکار (Autocomplete): سیستم تایپ قدرتمند TypeScript به شما امکان می‌دهد برای ویژگی‌های nixpkgs تکمیل خودکار و بررسی نوع داشته باشید.
  • دیباگ و نقطه‌توقف (Breakpoints): می‌توانید در محیط VS Code یا Chrome DevTools روی خطوط فایل‌های .nix نقطه توقف بگذارید و اجرای پکیج‌ها را گام‌به‌گام دنبال کنید.
  • اجرا در مرورگر: از آنجا که TypeScript در مرورگر اجرا می‌شود، می‌توانید nixpkgs را مستقیماً داخل تب مرورگر خود ارزیابی کنید.
  • آزمون واحد (Unit Testing): امکان نوشتن تست برای توابع Nix و پکیج‌ها با ابزارهای استاندارد تست جاوا اسکریپت مانند node:test فراهم می‌شود.
  • پرس‌وجو با اسکریپت‌ها: بررسی پکیج‌ها و مجوزها در یک حلقه برنامه‌نویسی ساده با جاوا اسکریپت بدون نیاز به دستورات پیچیده Nix یا ابزار jq.

بحث‌ها در هکرنیوز نیز نشان می‌دهد که پروژه‌های مشابهی مانند glistix نیز در این حوزه بررسی شده‌اند و چنین ابزارهایی می‌توانند مرز بین اکوسیستم‌های مختلف مدیریت بسته را کم‌رنگ‌تر کنند.

این مطلب به‌صورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل

این خبر را با دیگران به اشتراک بگذارید

خبرهای فناوری در قالب پست و ویدیوی کوتاه، در اینستاگرام هکرنیوز بلاگ. به‌زودی
هر خبر به محض انتشار، به‌همراه پادکست روزانه در کانال تلگرام هکرنیوز بلاگ.