خانه / امکانات

امکانات

آنچه ماشین امروز انجام می‌دهد، و آنچه برای آن ساخته شده است.

مستندات را بخوانید کد منبع

چه می‌کند

فراخوانی دنباله‌ای درست

فراخوانی در موقعیت دنباله‌ای فریم ادامهٔ فعلی را دوباره استفاده می‌کند و چیزی اضافه نمی‌کند. بازگشت خود-بازگشتی و متقابل هر دو در فضای ثابت حلقه می‌زنند.

ماشین CEK صریح

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

تنها #f نادرست است

مانند R5RS و Clojure: صفر، رشتهٔ خالی، nil و () همه درست‌اند. Ruby و JavaScript برعکس می‌گویند و به همین دلیل تازه‌واردها باید این را از نو یاد بگیرند.

فرم‌های هسته‌ای و مشتق

یک هستهٔ کوچک که هر چیز دیگر به آن تبدیل می‌شود، پس هر فرم مشتق فراخوانی دنباله‌ای را رایگان می‌گیرد و به ترامپول جداگانه نیاز ندارد.

ارزیابی کراندار

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

بدون state سراسری

همه‌چیز در یک مقدار Machine است. دو ماشین بدون تداخل کنار هم اجرا می‌شوند و همین چیزی است که جاسازی و تست را ممکن می‌کند.

چرا ماشین صریح

ارزیاب درختی که تابع بازگشتی نوشته شود، پیش از پشتهٔ vlip، پشتهٔ C را تمام می‌کند. هر فراخوانی غیردنباله‌ای vlip یک فریم دیگر V می‌شود، پس حد میزبان به حد شما تبدیل می‌شود.

نوشتن ارزیاب به شکل ماشینی صریح با پشتهٔ خودش روی heap این مرز را جایی می‌برد که می‌شود دیدش. هزینه‌اش یک شمارندهٔ گام و یک حلقهٔ dispatch است. سودش این است که اعداد جدول زیر اندازه‌گیری شده‌اند، نه امیدوارانه.

اندازه‌گیری‌شده

آزمونتکرارنتیجهپشته در پایان
فراخوانی دنباله‌ای خودی250,0002500000
فراخوانی دنباله‌ای متقابل20,000pong0
فراخوانی دنباله‌ای در cond100,0001000000
فراخوانی دنباله‌ای در let50,000500000
fib، غیردنباله‌ای2067650
حلقه، با جمع20,0001999900000

ستون آخر را بخوانید

عمق صفر پشته در پایان، تمام ادعای ماست. بدون فراخوانی دنباله‌ای واقعی، آن ستون به‌جای صفر تعداد تکرار را نشان می‌داد. هر عدد اینجا را مجموعهٔ آزمونی می‌سازد که CI اجرا می‌کند، پس هیچ‌کدام بی‌سروصدا از پیاده‌سازی فاصله نمی‌گیرند.