خانه / امکانات
امکانات
آنچه ماشین امروز انجام میدهد، و آنچه برای آن ساخته شده است.
چه میکند
فراخوانی دنبالهای درست
فراخوانی در موقعیت دنبالهای فریم ادامهٔ فعلی را دوباره استفاده میکند و چیزی اضافه نمیکند. بازگشت خود-بازگشتی و متقابل هر دو در فضای ثابت حلقه میزنند.
ماشین CEK صریح
کنترل، محیط و مقدار فیلدهای جدای ماشیناند. بازگشت در ارزیاب خودش دنبالهای است، پس پشتهٔ V روی یک حلقهٔ vlip سرریز نمیکند.
تنها #f نادرست است
مانند R5RS و Clojure: صفر، رشتهٔ خالی، nil و () همه درستاند. Ruby و JavaScript برعکس میگویند و به همین دلیل تازهواردها باید این را از نو یاد بگیرند.
فرمهای هستهای و مشتق
یک هستهٔ کوچک که هر چیز دیگر به آن تبدیل میشود، پس هر فرم مشتق فراخوانی دنبالهای را رایگان میگیرد و به ترامپول جداگانه نیاز ندارد.
ارزیابی کراندار
حد گام و عمق ادامه، فیلدهای ماشیناند نه ثابتها؛ پس میزبان میتواند کد نامطمئن را محدود کند.
بدون state سراسری
همهچیز در یک مقدار Machine است. دو ماشین بدون تداخل کنار هم اجرا میشوند و همین چیزی است که جاسازی و تست را ممکن میکند.
چرا ماشین صریح
ارزیاب درختی که تابع بازگشتی نوشته شود، پیش از پشتهٔ vlip، پشتهٔ C را تمام میکند. هر فراخوانی غیردنبالهای vlip یک فریم دیگر V میشود، پس حد میزبان به حد شما تبدیل میشود.
نوشتن ارزیاب به شکل ماشینی صریح با پشتهٔ خودش روی heap این مرز را جایی میبرد که میشود دیدش. هزینهاش یک شمارندهٔ گام و یک حلقهٔ dispatch است. سودش این است که اعداد جدول زیر اندازهگیری شدهاند، نه امیدوارانه.
اندازهگیریشده
| آزمون | تکرار | نتیجه | پشته در پایان |
|---|---|---|---|
| فراخوانی دنبالهای خودی | 250,000 | 250000 | 0 |
| فراخوانی دنبالهای متقابل | 20,000 | pong | 0 |
| فراخوانی دنبالهای در cond | 100,000 | 100000 | 0 |
| فراخوانی دنبالهای در let | 50,000 | 50000 | 0 |
| fib، غیردنبالهای | 20 | 6765 | 0 |
| حلقه، با جمع | 20,000 | 199990000 | 0 |
ستون آخر را بخوانید
عمق صفر پشته در پایان، تمام ادعای ماست. بدون فراخوانی دنبالهای واقعی، آن ستون بهجای صفر تعداد تکرار را نشان میداد. هر عدد اینجا را مجموعهٔ آزمونی میسازد که CI اجرا میکند، پس هیچکدام بیسروصدا از پیادهسازی فاصله نمیگیرند.