تصور کنید مجبور باشید ۱۰,۰۰۰ خط کدی را که یک عامل هوش مصنوعی در چند ثانیه تولید کرده، برای یافتن یک حفره امنیتی بازبینی کنید؛ در دنیای فعلی، این کار تقریباً غیرممکن است. 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 با صریح کردن اثرات و هویت، محیطی امن ایجاد میکند که در آن عاملهای هوش مصنوعی میتوانند بدون داشتن اعتماد کورکورانه بر محیطهای عملیاتی، بهرهور باشند.




گفتگو