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

Jacquard در برابر زبان‌های سنتی؛ اولویتِ تائید ماشین بر نگارش انسان

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

جایگزینی کامل سیستم‌های ردیابی خط‌به‌خط (Line-based) با آدرس‌دهی محتوایی (Content-addressed) برای کدهای AI؛ به این ترتیب تغییرات ظاهری کد توسط مدل، تأثیری بر هویت و اعتبار منطقی برنامه ندارد.

تصور کنید مجبور باشید ۱۰,۰۰۰ خط کدی را که یک عامل هوش مصنوعی در چند ثانیه تولید کرده، برای یافتن یک حفره امنیتی بازبینی کنید؛ در دنیای فعلی، این کار تقریباً غیرممکن است. Jacquard مدعی است که این کابوس را با انتقال «اعتبار و دسترسی» از متنِ کامنت‌ها به دلِ ساختار زبان پایان می‌دهد. طبق انتشار ۱۳ جولای ۲۰۲۶ در گیت‌هاب، این برنامه دیگر اجازه نمی‌دهد قدرت کلی یک برنامه در یک فایل ۱,۰۰۰ خطی پنهان شود؛ بلکه هر تابع را مجبور می‌کند صراحتاً اعلام کند به چه چیزهایی دسترسی دارد—خواه شبکه باشد، یا سیستم فایل یا ساعت—و بدین ترتیب، پرسش «این کد چه چیزی را لمس می‌کند؟» را به یک ویژگی درجه‌یک زبان تبدیل می‌کند.

بیشتر نرم‌افزارهای امروزی برای خواندن انسان و اجرای ماشین نوشته شده‌اند، اما ما در حال ورود به عصری هستیم که این معادله وارونه می‌شود: عامل‌های هوش مصنوعی (AI Agents) — شبیه دستیارهای دیجیتالی که می‌توانند به‌طور مستقل ابزارها را مدیریت کنند — بخش اعظم کدها را تولید می‌کنند و انسان‌ها تنها در نقش بازبین باقی می‌مانند. برای مدیریت این پیچیدگی، ابزارهایی مانند Haystack با رویکرد معماری خط‌لوله‌ای تلاش کرده‌اند تا توسعه این عامل‌ها را سیستمی و صنعتی کنند. وقتی یک انسان باید ۱۰,۰۰۰ خط منطق تولیدشده توسط ماشین را حسابرسی کند، خواندن تک‌تک خطوط غیرممکن است. Jacquard این مشکل را با کدگذاری رفتار و ریسک‌های برنامه مستقیماً در نحو (Syntax) آن حل می‌کند و به بازبینان اجازه می‌دهد به جای بازرسی دستی، از طریق اثبات‌های ساختاری به کد اعتماد کنند.

مکانیسم اصلی: ردیف‌های اثر و مانیفست‌ها

در زبان‌های سنتی، امضای یک تابع می‌گوید چه داده‌ای وارد و خارج می‌شود، اما نمی‌گوید در پس‌صحنه چه اتفاقی می‌افتد. اما در Jacquard، امضایی مثل (text) ->{net} text به بازبین فوراً می‌گوید که این تابع ممکن است یک اثر شبکه‌ای (Network Effect) ایجاد کند. این یک کامنت یا راهنمایی ساده نیست، بلکه یک الزام سخت است که توسط محیط اجرا (Runtime) تحمیل می‌شود.

اگر برنامه‌ای سعی کند اثری را اجرا کند که صراحتاً از طریق پرچم --allow در زمان اجرا اجازه نگرفته باشد، سیستم آن را رد می‌کند. این فرآیند یک «مانیفست اعتبار» (Authority Manifest) دقیق ایجاد می‌کند. یک بازبین می‌تواند با نگاهی سریع به مانیفست بفهمد دقیقاً کدام سیستم‌های خارجی توسط یک عامل هوش مصنوعی قابل دستکاری هستند، بدون اینکه نیاز باشد منطق کد را در تمام فراخوانی‌های تودرتو ردیابی کند. برای مثال، محیط اجرا مجوزهایی مانند --allow fs برای دسترسی به سیستم فایل یا --allow net برای دسترسی به شبکه را می‌پذیرد.

این یک تحمیل در سطح زبان در یک محیط اجرای تحقیقاتی است و جایگزینی برای سندباکس‌های سیستم‌عامل (OS Sandbox) نیست. با این حال، تضمین می‌کند که محیط اجرا هرگونه اثر جهانی (World Effect) مدیریت‌نشده را رد کند، مگر اینکه اعتبار صراحتاً اعطا شده باشد؛ این شامل کدهایی که به‌صورت پویا (Dynamic) اجرا می‌شوند نیز می‌گردد. این قابلیت به حسابرس اجازه می‌دهد تنها یک خط را بخواند و بلافاصله اثرات بالقوه یک تابع را مشاهده کند.

هویت ساختاری در مقابل بایت‌های منبع

یکی از disruptivه‌ترین ویژگی‌های این پروژه، نحوه مدیریت هویت است. اکثر سیستم‌های کنترل نسخه، تغییرات را بر اساس بایت‌های خط‌به‌خط کد منبع ردیابی می‌کنند. اما Jacquard از تعاریف با «آدرس‌دهی محتوا» (Content-addressed definitions) استفاده می‌کند و به جای بایت‌ها، ساختار canonically resolved شده‌ی کد را هش می‌کند.

این بدان معناست که اگر یک عامل هوش مصنوعی نام یک متغیر محلی را تغییر دهد، تو رفتگی‌ها را عوض کند یا کامنتی اضافه کند، هش نهایی (Canonical Hash) تغییری نمی‌کند. هویت برنامه به منطق آن گره خورده است، نه فرمت آن. کامنت‌ها، منشأ کد (Provenance) و تغییر نام‌های ساده در طول این فرآیند پاک می‌شوند. در نتیجه، تست‌های خالص (Pure Tests) تنها زمانی دوباره اجرا می‌شوند که کد ساختاری یا محتوای وابستگی‌ها تغییر کرده باشد.

این هویت ساختاری اثباتی برای این نیست که هر دو برنامه دلخواه از نظر رفتاری معادل‌اند، اما اجازه می‌دهد یک diff-er آگاه به ساختار و یک کشِ آدرس‌دهی‌شده برای تست‌های Warp وجود داشته باشد. این امر نویز را در چرخه‌های تکرار مبتنی بر هوش مصنوعی کاهش می‌دهد و سیستم را قادر می‌سازد بدون تغییر در هویت قانونی برنامه، نام‌ها را تغییر داده و فرمت را اصلاح کند.

برنامه‌نویسی احتمالی و هندلرهای «جهان»

Jacquard دنیای بیرون را به عنوان یک جزء قابل تعویض می‌بیند. با استفاده از اثرات جبری (Algebraic Effects) با هندلرهای عمیق و چند‌-شات (Multi-shot)، یک تکه کد را می‌توان در «دنیاهای» مختلف اجرا کرد بدون اینکه حتی یک خط از منطق آن تغییر کند. هندلر در واقع قطعه‌ای است که به درخواست‌های برنامه برای دنیای بیرون پاسخ می‌دهد؛ با تعویض هندلر، کد بدون تغییر باقی می‌ماند.

این رویکرد می‌تواند جایگزین Mockingهای سنتی در مرزهای اثر شود و پرسش‌هایی مانند «اگر API قطع شود، عامل من چه می‌کند؟» را به یک تست معمولی تبدیل کند. یک هندلر می‌تواند محاسباتی را صفر، یک یا چندین بار از سر بگیرد، که همین قابلیت اجازه می‌دهد جستجوی جامع (Exhaustive Search) و استنتاج دقیق (Exact Inference) به عنوان کدهای کتابخانه‌ای معمولی پیاده‌سازی شوند.

  • دنیای واقعی (The Real World): مستقیماً به APIها و پایگاه‌های داده واقعی متصل می‌شود.
  • دنیای سناریو-محور (The Scripted World): از پاسخ‌های جعلی و پیش‌تعریف‌شده برای تست استفاده می‌کند.
  • دنیای احتمالی (The Probabilistic World): از یک مدل احتمالی درباره نحوه رفتار معمول سرورها برای شبیه‌سازی حالت‌های لبه‌ای (Edge Cases) استفاده می‌کند.

به گزارش تیم توسعه، چون این زبان از برنامه‌نویسی احتمالی گسسته به عنوان یک کتابخانه پشتیبانی می‌کند (جایی که sample و observe عملیات اثر هستند)، توسعه‌دهندگان می‌توانند تمام نتایج قابل دسترس و احتمال دقیق هر یک را فهرست کنند. این قابلیت اجازه می‌دهد «ترمیم برنامه» (Program Repair) اتفاق بیفتد؛ جایی که یک تست شکست‌خورده به عنوان مدرکی برای اصلاح کد به کار رود. سیستم می‌تواند AST کوت‌شده‌ی یک برنامه دارای باگ را به وصله‌های (Patches) کاندید تبدیل کرده و محاسبه کند کدام وصله‌ها همچنان ممکن هستند و احتمال هر کدام چقدر است.

در یک دمو عملی، یک تست شکست‌خورده ممکن است دو وصله بازمانده ایجاد کند: یک اصلاحیه مورد نظر با احتمال ۰.۷۵ و وصله‌ای که «تست‌ها را دور می‌زند» (Games the suite) با احتمال ۰.۲۵. با اضافه کردن یک تست رگرسیون، گزینه دوم حذف شده و تنها یک تغییر تک‌خطی (مثلاً تبدیل - sub + add) باقی می‌ماند. تا زمانی که اثر eval از طریق --allow eval اعطا نشود، دموی ترمیم از اجرای کد کاندید خودداری می‌کند که نشان‌دهنده عملکرد مدل اعتبار است.

معماری فنی و پیاده‌سازی

بر اساس مستندات پروژه در github.com، نسخه‌ی 0.1 این پروژه یک نمونه اولیه تحقیقی است که با استک زیر بنا شده است:

هسته و فرمالیزم (Kernel and Formalism):

  • نمایش یکپارچه: هر فرم یک سه‌تایی از (head, meta, args) است.
  • AST هسته: یک گرامر فشرده ۲۷-فرم که منبع حقیقت است (مستند در docs/ast.md).
  • سینتکس سطحی: زبان .jac برای انسان‌ها که به عنوان یک تصویر (Projection) روی این ۲۷ فرم عمل می‌کند. حامل بوت‌استرپ .jqd به عنوان سینتکس داخلی/دیباگ و فرمت ثبت‌شده‌ی هسته برای همیشه پشتیبانی می‌شود.
  • آدرس‌دهی محتوا: هویت بر اساس هش ساختار راه‌اندازی شده است که در آن متادیتای غیرهویتی پاک می‌شود. این فرآیند توسط سریال‌سازی قانونی HASH_V0 مدیریت می‌شود.
  • ردیف‌های نوع و اثر: هر فلش (Arrow) مجموعه‌ای از اثراتی را حمل می‌کند که تابع ممکن است انجام دهد، به این معنی که ردیف استنتاج‌شده‌ی یک برنامه، همان مانیفست کل اعتبار آن است.

ابزارها و محیط اجرا (Tooling and Runtime):

  • موتور: یک چک‌کننده OCaml و مفسر CPS. مفسر از هندلرهای چند-شات پشتیبانی می‌کند و اجازه می‌دهد یک محاسبه صفر، یک یا چندین بار از سر گرفته شود.
  • بک‌اند Native AOT: مسیری که کد C تولید می‌کند و واحدها را بر اساس هش محتوا در .jacquard-native/ تخصیص و کش می‌کند. این بخش با استفاده از clang و gcc (از طریق scripts/native-diff.sh) در برابر مفسر تست شده است. برای تضمین Tail Calls با پیچیدگی O(1)، از musttail در clang و gcc 15+ استفاده می‌کند و در غیر این صورت از یک Trampoline بهره می‌برد. اندازه استک توسط JACQUARD_STACK_MB (پیش‌فرض ۱۰۲۴) کنترل می‌شود.
  • فریم‌ورک Warp: سیستمی برای تست‌های ویژگی‌محور (Properties) با کش محتوا-محور که از بررسی‌های نمونه‌برداری‌شده (Sampled) و جامع (Exhaustive) پشتیبانی می‌کند.
  • رابط خط فرمان (CLI): دستوراتی مثل jac run برای اجرا، jac check برای بررسی، jac hash برای هویت، jac fmt برای فرمت، jac diff برای تفاوت‌ها و jac infer (که از enumerate و وزن‌دهی احتمال lw پشتیبانی می‌کند). دستورات اضافی شامل jac replay برای ردپایه‌ها (Traces) و jac build برای باینری‌های Native است.
  • کامپایل Native: دستور jac build حامل هسته .jqd را می‌گیرد و به یک باینری مستقل تبدیل می‌کند. خروجی این باینری از نظر بایتی با jac run (شامل stdout، stderr و کدهای خروج) کاملاً یکسان است.

مرزهای تحقیقاتی و محدودیت‌ها

در حالی که نمونه اولیه طبق برنامه اصلی تکمیل شده است—با افزودن سینتکس سطحی عمومی، کتابخانه استاندارد حلقوی و باینری‌های بسته‌بندی‌شده—تیم توسعه صراحتاً چندین محدودیت را در مستندات docs/release/0.1/LIMITS.md ذکر کرده است.

کمبودهای فعلی (Current Omissions):

  • زیرساخت: در حال حاضر هیچ VM/JIT، پشتیبانی از همزمانی (Concurrency) یا مدیریت بسته‌های زبان وجود ندارد.
  • منطق پیشرفته: توزیع‌های پیوسته، گرادینت‌ها و Typed Staging پیاده‌سازی نشده‌اند.
  • ایمنی: اثبات‌های رسمی soundness وجود ندارند و اعطاهای جهانی (World Grants) همچنان کلی (Coarse) هستند.
  • میزبانی شخصی: زبان هنوز به مرحله Self-hosting نرسیده است.

شواهد انتشار و کیفیت:

  • پینینگ معنایی: مرز معنایی RC1 توسط ۵۵۴ مورد تست Alcotest/QCheck، ۳۲ ترنسکریپت cram و ۲۱ مثال مستندات به‌طور دقیق پین شده است.
  • اعتبارسنجی: فرآیند کیفیت شامل مسیرهای Native Sanitizer، Leak و Fuzz، به علاوه گردش کار شواهد Fresh-clone است.
  • تکامل: نسخه RC2 بسته‌بندی دموی باینری را اصلاح کرد و RC3 یک استثنای لایسنس صریح برای runtime/output اضافه کرد و محیط اجرای Native را بسته‌بندی نمود.
  • لایسنس: پروژه تحت لایسنس Apache 2.0 منتشر شده است، با این توضیح صریح که مجوز runtime/output اجازه می‌دهد خروجی‌های کامپایل‌شده با هر لایسنسی (مثلاً تجاری) توسط نویسنده منتشر شوند.

کاربردهای عملی و دموها

پروژه چندین مورد مطالعاتی برای نمایش این مکانیسم‌ها ارائه کرده است که بسیاری از آن‌ها توسط تست‌های cram در test/cli/ پین شده‌اند:

  • ریسک انتشار (Release Risk): اجرای یک سیاست انتشار تحت دنیاهای تله‌متری واقعی و احتمالی، و سپس یک اثبات ایمنی Warp روی ۱۸ دنیا.
  • Stormglass: یک سیاست چک-اوت تحت قوانین شبیه‌سازی‌شده شبکه و ساعت، شامل پیش‌بینی‌های دقیق حوادث و اثبات Warp روی هر ۲۷ دنیا.
  • رویاهای عامل (Agent Dreams): اجرای یک سیاست تحت هندلرهای دنیای سناریو-محور و احتمالی برای امتیازدهی به برنامه‌های کاندید عامل قبل از اینکه به شبکه زنده متصل شوند. سیاست زنده همچنان پس از عبور از «رویاها» به مجوز Net نیاز دارد. در این راستا، ابزارهایی مانند Herdr برای مدیریت وضعیت عامل‌ها در محیط‌های عملیاتی طراحی شده‌اند تا رصد دقیق‌تری از فعالیت آن‌ها ارائه دهند.
  • Escrow: یک گردش کار تولیدشده با شکل محصول که استفاده از مانیفست‌ها، اجرای آزمایشی (Dry-runs)، تأیید توسط هش و اکتشاف خطا (Fault Exploration) را نمایش می‌دهد.
  • پرسش‌های شفاف‌کننده (Clarifying Questions): عاملی که «ارزش اطلاعات» را محاسبه می‌کند تا تصمیم بگیرد آیا قطع کردن کاربر با یک سؤال، ارزش هزینه زمانی را دارد یا خیر. این نوع تحلیل‌های تصمیم‌ساز یادآور تلاش‌های Anthropic برای رصد افکار پنهان مدل‌ها با ابزار J-lens است تا شفافیت بیشتری در منطق داخلی مدل ایجاد شود.
  • دموی خصمانه (Hostile Demo): کدی با ظاهر تولیدشده توسط AI که سعی می‌کند به شبکه دسترسی پیدا کند؛ امضاها و مانیفست‌ها این تلاش برای کسب اعتبار را فوراً لو می‌دهند.
  • خط لوله ابهام (Ambiguity Pipeline): یک خط لوله استخراج که عدم قطعیت را حفظ می‌کند تا زمانی که کلیک کاربر یک رویداد observe ایجاد کند.
  • مبانی عمومی: شامل محاسبه فاکتوریل، انتخاب چند-شات و eval گیت‌شده از طریق demos/basics/m1.sh و همچنین مقایسه وزن‌دهی احتمال در مقابل شمارش دقیق روی یک هش مدل واحد در demos/inference/m3.sh.

نصب و استقرار

نصب باینری:
برای کاربرانی که به OCaml یا opam نیاز ندارند، باینری انتشار را می‌توان از طریق دستور زیر نصب کرد: curl -fsSL https://raw.githubusercontent.com/jbwinters/jacquard-lang/jacquard-core-0.1-rc3/scripts/install.sh | sh. این نصب‌کننده سیستم‌عامل و CPU را شناسایی می‌کند (پشتیبانی از Linux x86-64، macOS Intel و Apple Silicon)، چک‌سام SHA-256 را تأیید کرده و به‌طور پیش‌فرض در ~/.local نصب می‌کند. بسته باینری شامل نام مستعار jac، محیط اجرای Native C و پیش‌درآمد (Prelude) کتابخانه استاندارد است. کاربران می‌توانند مسیر دلخواه را با JACQUARD_INSTALL_PREFIX یا نسخه خاص را با JACQUARD_INSTALL_VERSION تعیین کنند.

تنظیمات توسعه:
برای توسعه‌دهندگان، نصب شامل یک کلون تازه و محیط جامع OCaml با استفاده از asdf و opam 2.5.1 با هدف‌گذاری OCaml 5.1.1 است. این فرآیند شامل موارد زیر است:
۱. مقداردهی اولیه opam و ایجاد یک local switch.
۲. نصب وابستگی‌ها از طریق opam install --deps-only . --with-test --with-dev-setup --with-doc -y.
۳. گیت توسعه به‌طور سخت‌گیرانه توسط توالی dune build @all ، dune runtest و dune fmt و در نهایت یک git diff --exit-code پاک اجرا می‌شود.

بازتولید انتشار:
شواهد انتشار را می‌توان از یک چک-اوت با دستور زیر بازتولید کرد: JACQUARD_RELEASE_REF=HEAD JACQUARD_RELEASE_BASE=738dc8e scripts/release/reproduce-0.1.sh. این اسکریپت تمام مجموعه تست‌ها را اجرا کرده، شواهد را در .scratch/release/0.1/ تولید می‌کند و لاگ‌هایی را برای مستنداتی مانند EVIDENCE.md ، CLAIMS.md و GAUNTLET.md می‌نویسد.

این تغییر در فلسفه، بارِ ایمنی را از دیسیپلین شخصی توسعه‌دهنده به محدودیت‌های زبان منتقل می‌کند. Jacquard با صریح کردن اثرات و هویت، محیطی امن ایجاد می‌کند که در آن عامل‌های هوش مصنوعی می‌توانند بدون داشتن اعتماد کورکورانه بر محیط‌های عملیاتی، بهره‌ور باشند.

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

این پروژه با تکیه بر تخصص در نظریه زبان‌های برنامه‌نویسی، راهکاری برای بحران «تولید انبوه کد توسط AI» ارائه می‌دهد. اعتبار این سیستم از طریق اثبات‌های ساختاری تأمین می‌شود تا اعتماد به کدهای ماشین جایگزین بازبینی دستی و خطاپذیر شود.

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

به‌دلیل ماهیت پژوهشی و متن‌باز بودن پروژه در گیت‌هاب، توسعه‌دهندگان ایرانی می‌توانند بدون محدودیت API از آن برای ساخت سیستم‌های بازبینی کد امن استفاده کنند.

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

Jacquard تلاش می‌کند مفهوم «اعتبار کد» را از یک قرارداد انسانی (کامنت‌ها) به یک ویژگی ریاضی تبدیل کند. این تغییر پارادایم، نقش برنامه‌نویس را از «نویسنده» به «گیت‌کیپر» تغییر می‌دهد و اجازه می‌دهد امنیت کد را نه با خواندن خطوط، بلکه با بررسی اثرات (Effects) آن بسنجیم. در واقع، این زبان به جای جنگ با توهمات هوش مصنوعی در کد، یک حصار سخت‌افزاری دور آن‌ها می‌کشد.

منابع

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

گفتگو

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

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

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

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

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

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

دات‌هوش

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

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