О! И ещё про Parrot.

May 26, 2010 20:13

Надысь случилась небольшая революция, которая готовилась почти год мной и @cotto. Теперь у нас op'ы парсяться самим парротом.

Остальное под катом.


В двух словах:
  1. VM на самом деле совсем тупой. Его дело просто испольнять "поток" инструкций. Нечто вроде ассемблерных: положить значение сюда, сложить пару чиселок, перейти на +/- столько-то команд, и т.п.
  2. Инструкции в парроте называются "op". "shl", "eq", "add", бла-бла-бла.
  3. Эти "опы" написаны (сейчас) на термоядерной смеси C с кучкой макро-замен.

Примерно так:

inline op add(inout INT, in INT) :base_core {
$1 += $2;
}

Так определяется add для 2-х целочисленных переменных. В приципе понять можно. Человеку.

Во всём этом есть куча суровых недостатков:
  • На чуть более высоком уровне, чем VM runloop про семантику операции нифига не известно.
  • ... что ведёт к тому, что JIT для неё написать, мягко говоря, сложно.
  • ... ибо при компиляции это просто всё скармливается в "gcc" и всё.
  • ... и писать всяческие оптимизации под такие дела можно просто застрелиться. Ибо приходится хардкодить семантику всех 1200+ операций в оптимизаторе.
  • ... и так далее.

Под это дело внутри Parrot'а уже примерно год обсуждается идея Lorito - маленький набор инструкций, через которые выражаются все остальные. (Да-да, RISC vs CISC).

На этом пути дофига чего нужно сделать. Но самое главное - научиться парсить "инструкции" семантически. Т.е. честно понимать, где тут "if", а где "доступ к переменной".

Так вот вчера (по Сиднейскому времени) мы таки вкрутили в "продакшн" новый компилятор оп'ов основаный на PCT! Это такой хоооороший фундамент, что бы двигаться дальше.

Тьфу. Сумбур и смятение для тех, кто "не в теме"... Ну и фиг с ним. Задавайте вопросы, если что.

ironman, parrot, tech

Previous post Next post
Up