воскресенье, 27 апреля 2008 г.

Pixilang2: новые горизонты

Какое-то время назад я уже писал про перспективы JIT-компиляции при помощи библиотеки LLVM. И даже были мысли, внедрить эту замечательную штуковину в Pixilang. Но возникло несколько вопросов:
1. LLVM конечно жутко мощный, но в самом минимальном комплекте будет весить несколько мегабайт... Все понимаю, память становится больше, компы мощнее, инет дешевле :) Но всетаки, это серьезный контраст по сравнению с 200-300 килобайтами Pixilang :)
2. LLVM написан на Си++ с использованием всех самых мощных фич Си++. Исходный код от этого не стал более читабельным, плюс появляются сложности с портированием под девайсы c WindowsMobile и PalmOS.
3. А можно ли вообще включить JIT-компилятор в Pixilang? Дело в том, что Pixi не совсем обычный язык, и многие приемы в нем отличаются от подхода классических языков программирования.

Вот... После этого был небольшой перерыв, я разбирался в мыслях :) А в итоге пришел к следующему.
Необходимо писать свой собственный JIT-компилятор, который будет на лету преобразовывать Pixi-программу в чистый машинный код любого процессора. Пусть этот JIT изначально не будет настолько оптимизирован, как LLVM, но зато он будет компактным и очень быстрым.
И вот, по прошествии некоторого времени, с удовольствием сообщаю, что первые лабораторные результаты уже есть :) Назвал я эту штуку - Pixilang2. С виду он ничем не отличается от первой версии - тот же интерфейс, тот же язык, те же команды. Но вот начинка языка - уже не виртуальная машина с байт-кодом, а настоящий JIT-компилятор, который генерирует код для Intel-овских процессоров. Первые же тесты старых пикси-программ дали прирост скорости в 2 раза! Это очень хороший результат. И это только начало. Далее планируется ввести поддержку процессора ARM (для работы с наладонниками), различные типы оптимизации, использование вкусностей архитектуры процессоров Pentium (например, MMX) и т.д. и т.п.
То есть, по сути Pixilang перешагнул ту планку, за которой он был обычным скриптовым-языком интерпретатором.
В самое ближайшее время выложу beta-версию в сети.

p.s. Если вы не в курсе, я поясню приемущества JIT-компилятора по сравнению с обычным компилятором. Например, в коде вы выделили какой-то участок памяти и указатель на него поместили в переменную PTR. Теперь в обычной проге процессор должен сначала считать адрес из переменной PTR, а потом уже записывать/читать по полученному адресу. А вот с использованием JIT все упрощается, т.к. на стадии компиляции нам уже известен точный адрес выделенного участка памяти - соответственно в коде просто забиваются статические ссылки на созданный объект и процессору не нужно читать значение из переменной PTR - убирается один "лишний" шаг.

2 комментария:

Анонимный комментирует...

Думаю, если к миниатюрности и простоте Пикси добавится и серьезная производительность (в два раза большая чем ныне) - перед ним действительно откроются новые горизонты. А именно области применения.

Zuf комментирует...

Мощно!