| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Другие языки > [???] виртуальная машина |
| Автор: GoldFinch 21.5.2010, 15:15 |
| Хочу создать язык, компилируемый в байткод, и виртуальную машину (ВМ), выполняющую этот байткод. Основное требование - минимальный размер скомпилированного байткода, и минимальный размер файлов исполняемых модулей. При этом размер ВМ, ее потребление ресурсов при выполнении байткода, производительность, имеют существенно меньшее значение. ВМ должна быть написана на нативном языке (асм, Си или С++) под Windows. Язык должен быть способен выполнять любые задачи, какие может выполнять асм или Си. ================= Способы реализации: Наиболее простой - сжимать байткод zip'ом, а перед выполнением распаковывать. Такое можно использовать как последний способ уменьшить размер байткода. Очевидно, что уменьшения объема байткода можно добиться встраивая в ВМ мощные средства, типа solve_me_this_task. На низком уровне, можно использовать упаковку бит инструкций ВМ. Интуитивно понятно, что если взять программу на высокоуровневом языке типа перла, и перевести текст исходника в бинарный вид, то это и будет минимальный размер программы. Причем чем более язык высокоуровневый, тем меньше объем кода программы. Тогда как если ВМ будет RISC, то размер программ будет большим. |
| Автор: Lipetsk 21.5.2010, 15:23 |
| может быть вас Lua устроит? и не надо ничего создавать? ;) |
| Автор: GoldFinch 21.5.2010, 15:51 |
| Lipetsk, прочитайте 3й абзац. Переписывать Lua под нужные мне требования - это слишком затратно. У программы должен быть полный доступ к регистрам процессора и памяти (в том числе TEB, [fs:18]). Поддержка импорта и вызова функций из длл, и прочие низкоуровневые вещи которых нет в Lua. |
| Автор: GoldFinch 21.5.2010, 18:18 | ||
kemiisto, возможности ВМ определяются ее назначением. В настоящее время есть большой класс ВМ которые не "efficient" и не "isolated" в силу своего назначения. Но если вас смущает термин ВМ, можно использовать термин "платформа /для выполнения байткода/".
Наоборот, я считаю что у ВМ должен быть максимально высокоуровневый ЯП, тогда код для нее будет минимален. Доступ к памяти реальной машины можно реализовать например введя встроенный массив Memory[] в который будет отображена реальная память. Для регистров процессора - встроенную переменную-структуру Registers (соответствующую регистрам на входе в функцию, для коллбеков с соглашением вызова использующим регистры). Как я уже писал, сжатие кода zip-ом, это способ который стоит применять когда все другие уже исчерпаны. Тем более что я ожидаю что размер программ для ВМ будет небольшим, порядка единиц килобайт. |