Я читав про мета-кругові інтерпретатори в Інтернеті (включаючи SICP) і вивчив код деяких реалізацій (таких як PyPy та Narcissus).
Я прочитав трохи про дві мови, які чудово використовували метациркулярну оцінку, Lisp та Smalltalk. Наскільки я зрозумів, Lisp був першим компілятором самозвернення, а Smalltalk мав першу "справжню" реалізацію JIT.
Одне, що я не до кінця зрозумів, це те, як ті перекладачі / компілятори можуть досягти такої хорошої продуктивності, або, іншими словами, чому PyPy швидше, ніж CPython? Це через роздуми?
А також моє дослідження Smalltalk змусило мене повірити, що існує зв'язок між JIT, віртуальними машинами та рефлексією. Віртуальні машини, такі як JVM та CLR, дозволяють дуже багато типів самоаналізу, і я вважаю, що вони чудово використовують його у компіляції Just-in-Time (і AOT, я думаю?). Але наскільки я знаю, віртуальні машини схожі на процесори, оскільки вони мають базовий набір інструкцій. Чи віртуальні машини ефективні, оскільки вони включають тип та довідкову інформацію, яка б дозволила мовно-агностичному відображенню?
Я запитую це, тому що багато хто з інтерпретованих та компільованих мов зараз використовують байт-код в якості цілі (LLVM, Parrot, YARV, CPython), а традиційні VM, такі як JVM та CLR, набули неймовірного підвищення продуктивності. Мені сказали, що мова йде про JIT, але, наскільки я знаю, JIT - це не нове, оскільки Smalltalk та власне «Я» Sun робили це перед Java. Я не пам’ятаю, що в минулому VM виступили особливо добре, поза межами JVM та .NET було не так багато академічних, і їхня робота, безумовно, була не такою хорошою, як зараз (я б хотів, щоб я міг подати цю претензію, але я говорити з особистого досвіду).
Потім раптом, наприкінці 2000-х щось змінилося, і багато віртуальних машин почали з'являтися навіть для усталених мов і з дуже хорошими показниками. Чи було виявлено щось про реалізацію JIT, що дозволило майже кожному сучасному віртуозному аппарату злетіти у виконанні? Можливо папір чи книга?