Виртуальные машины / Forth
От: voidlizard  
Дата: 25.07.08 05:43
Оценка:
Для одного из проектов с использованием GSM/GPS трекеров, пришлось разработать виртуальную машину
для исполнения скриптов на самих устройствах.

Сами трекеры построены на базе Microchip PIC18 — если кто не знает — около 3Kb RAM, 40 Kb Program Flash ну и в нашем
случае есть еще дополнительно 32Kb EEPROM, куда и пишутся байткоды скриптов, тк больше некуда — при питании от батарейки
устройство не сможет, например, само себе прошить program flash. Исходя из ограниченных ресурсов, ASM в качестве языка
разработки прошивки, отсутствия внятной документации по теме — было принято решение разработать Fort-машину, которая бы
исполняла на байткод, скомпилированный вовне и залитый в EEPROM, что и было сделано. Операции и переменные — в основном
8-битные, адреса — от 8 до 24 бит, но в принципе можно поднатужиться и реализовать 16-разрядную арифметику (это все специфика PIC-а).

Forth, при всех своих достоинствах, язык несколько жутковатый, к тому же его подход заставляет решать множество проблем,
которые в нормальной жизни обычно не возникают. Грубо говоря, бывают языки, которые стремятся сократить побочные эффекты,
а бывают языки, которые строятся из побочных эффектов (это про форт). Соответственно, в следующем поколении устройств
хочется переехать с форта на что нибудь еще.

Вопрос, собственно, вот в чем:

0) Есть ли какие-то языки, которые можно успешно компилировать в байткоды для форт-машины ( двухстековая машина, произвольного доступа к
элементам стека — нет, доступ к памяти есть, но дороговато обходится) ?

1) Есть ли какие-то хорошо специфицированные, несложные (в принципе любая несложная, если в ней не более сотни инструкций) виртуальные машины,
с компактными опкодами? Желательно, что бы были готовые компиляторы, которые генерировали для них код. LUA5, Python — некомпактны, Java — хороша,
но писать компилятор и VM сложно (много инструкций, разрядность и тп) ?

2) Может быть есть хотя бы какие-то заготовки, в виде парсера языка в AST, или просто язык с компактной VM которую несложно портировать.

То есть, что хотелось бы иметь в идеале: язык, компилятор с него в байткоды (компактность не хуже форта) и четкая спецификация виртуальной машины, которую надо реализовать, что бы эти байткоды исполнять. Управление памятью должно быть за счет компилятора (что вполне возможно, кмк)

В качестве программы-минимума, хотя бы какой-нибудь неплохой язык и парсер его в AST, но отдельно стоящий, т.е. что бы не приходилось выдирать его из LUA,
а можно было просто взять и использовать, в этом случае хорошо бы что бы язык и компилятор были реализованы на каком-нибудь человеческом языке, а не С/С++/Java,
тк придется дописывать трансляцию в байткоды, и нет столько времени, что бы ковыряться с чужим кодом на вышеозначенных языках.


Бэкграунд: смотрел PyPy, за отведенное время не осилил (вероятно, к нему еще вернусь, тк выглядит как почти то, что надо, но непонятно как это использовать).
Смотрел LLVM, не портируемо (куда нам надо). Смотрел Parrot, сложно и не портируемо.


Мнения?

---
dmz

если модераторы восстановят пароль от моего старого аккаунта, я буду совсем не против
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.