Який взаємозв'язок між метакруговими перекладачами, віртуальними машинами та підвищеною продуктивністю?


12

Я читав про мета-кругові інтерпретатори в Інтернеті (включаючи 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, що дозволило майже кожному сучасному віртуозному аппарату злетіти у виконанні? Можливо папір чи книга?


3
Гроші. Гроші, які раніше виливали у C ++ та Fortran, зараз виливаються у HotSpot, CLR, Mono, V8, Nitro, SpiderMonkey тощо.
Jörg W Mittag

Я можу лише здогадуватися, але я думаю, що це просто покращення з часом, як описано тут joelonsoftware.com/articles/fog0000000017.html
Doc Brown


1
@Gomi Справа не в тому, наскільки схожою є мова реалізації з реалізованою мовою. Є інтерпретатори JavaScript, Lisp, Prolog, SmallTalk і Ruby, написані на RPython, і вони отримують абсолютно ті самі вигоди, які пропонує PyPy. Єдина причина, по якій RPython базується на Python, полягає в тому, що він був створений купою ентузіастів Python. Особливості RPython, які роблять PyPy швидким, не мають нічого спільного з Python: автоматичне генерація компілятора JIT, сміттєзбірники тощо - і так, більшість із цього в принципі можна зробити за допомогою інших мов. Однак вам доведеться створити зовсім новий компілятор.

4
-1 тому що у вас, мабуть, виникає щонайменше 3 різні питання: (a) Чому метакругові реалізації такі гарні? (b) Чи ефективні відеомагнітофони через інформацію про тип і чи вигідна самоаналіз для продуктивності? (c) Звідки популярність ВМ зросла в кінці 2000-х років, і як раптом вони мають хороші результати? Я думаю, що краще задати ці питання окремо.
Дуб

Відповіді:


1

2 з 3: Не існує взаємозв'язку між "мета-круговим" та "високоефективним" мовним виконанням. Мета-кругові періоди виконання, які досягають високої продуктивності, роблять це за допомогою JIT-компіляції до початкового коду та запуску нативного коду. Немає жодних причин, чому ваш привіт Perf Python повинен бути написаний на Python або Lisp в Lisp тощо. Але якщо ви думаєте, що ваша мова є більш потужною, виразною тощо, ніж інші, чому б не використати її для написання власний час виконання? Або якщо ви не думаєте, що ваша мова якимось чином "краща", ніж інші, чому ви взагалі збираєтеся втілити її в життя?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.