Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [???] виртуальная машина 
:(
    Опции темы
GoldFinch
Дата 21.5.2010, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Хочу создать язык, компилируемый в байткод, и виртуальную машину (ВМ), выполняющую этот байткод.

Основное требование - минимальный размер скомпилированного байткода, и минимальный размер файлов исполняемых модулей.
При этом размер ВМ, ее потребление ресурсов при выполнении байткода, производительность, имеют существенно меньшее значение.

ВМ должна быть написана на нативном языке (асм, Си или С++) под Windows.
Язык должен быть способен выполнять любые задачи, какие может выполнять асм или Си.

=================

Способы реализации: 
Наиболее простой - сжимать байткод zip'ом, а перед выполнением распаковывать. Такое можно использовать как последний способ уменьшить размер байткода.
Очевидно, что уменьшения объема байткода можно добиться встраивая в ВМ мощные средства, типа solve_me_this_task.
На низком уровне, можно использовать упаковку бит инструкций ВМ.

Интуитивно понятно, что если взять программу на высокоуровневом языке типа перла, и перевести текст исходника в бинарный вид, то это и будет минимальный размер программы. Причем чем более язык высокоуровневый, тем меньше объем кода программы. 
Тогда как если ВМ будет RISC, то размер программ будет большим.

Это сообщение отредактировал(а) GoldFinch - 21.5.2010, 15:17
PM MAIL ICQ   Вверх
Lipetsk
  Дата 21.5.2010, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в форме ;)
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.1.2009
Где: Липецк

Репутация: 2
Всего: 5



может быть вас Lua устроит? и не надо ничего создавать? ;)
PM   Вверх
GoldFinch
Дата 21.5.2010, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Lipetsk, прочитайте 3й абзац.
Переписывать Lua под нужные мне требования - это слишком затратно.

У программы должен быть полный доступ к регистрам процессора и памяти (в том числе TEB, [fs:18]).
Поддержка импорта и вызова функций из длл, и прочие низкоуровневые вещи которых нет в Lua.

PM MAIL ICQ   Вверх
kemiisto
Дата 21.5.2010, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 1
Всего: 160



Я в замешательстве. smile 

Цитата
virtual machine was originally defined by Popek and Goldberg as "an efficient, isolated duplicate of a real machine".

Цитата
An essential characteristic of a virtual machine is that the software running inside is limited to the resources and abstractions provided by the virtual machine—it cannot break out of its virtual world.


А ты пишешь, что
Цитата(GoldFinch @  21.5.2010,  16:15 Найти цитируемый пост)
Язык должен быть способен выполнять любые задачи, какие может выполнять асм или Си.


Хочется уточнить, ты хочешь написать низкоуровневый ЯП для своей ВМ? Я правильно понял? Что-то вроде LLVM?

Цитата(GoldFinch @  21.5.2010,  16:15 Найти цитируемый пост)
Наиболее простой - сжимать байткод zip'ом, а перед выполнением распаковывать. Такое можно использовать как последний способ уменьшить размер байткода.

Так происходить на JVM. JAR.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
GoldFinch
Дата 21.5.2010, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



kemiisto, возможности ВМ определяются ее назначением. В настоящее время есть большой класс ВМ которые не "efficient" и не "isolated" в силу своего назначения. Но если вас смущает термин ВМ, можно использовать термин "платформа /для выполнения байткода/".

Цитата(kemiisto @  21.5.2010,  17:39 Найти цитируемый пост)
Хочется уточнить, ты хочешь написать низкоуровневый ЯП для своей ВМ? Я правильно понял? Что-то вроде LLVM?

Наоборот, я считаю что у ВМ должен быть максимально высокоуровневый ЯП, тогда код для нее будет минимален.

Доступ к памяти реальной машины можно реализовать например введя встроенный массив Memory[] в который будет отображена реальная память. Для регистров процессора - встроенную переменную-структуру Registers (соответствующую регистрам на входе в функцию, для коллбеков с соглашением вызова использующим регистры).

Как я уже писал, сжатие кода zip-ом, это способ который стоит применять когда все другие уже исчерпаны. Тем более что я ожидаю что размер программ для ВМ будет небольшим, порядка единиц килобайт.

Это сообщение отредактировал(а) GoldFinch - 21.5.2010, 18:21
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Добро пожаловать в раздел "Другие языки" форума Vingrad!

Void
Void

Раздел посвящён различным языкам программирования, для которых (в силу невысокой популярности) нет отдельного раздела (GPSS, Lua, MATLAB, Ada, Forth, Smalltalk, Tcl, REXX, AWK и др.)

  • Обязательно следуйте правилам Форума.
  • Пожалуйста, прочитайте и следуйте рекомендациям по работе в разделе и навигации по Форуму.
  • Для вставки текстов исходных кодов используйте подсветку синтаксиса из выплывающего списка Код в форме ответа. Если Ваш язык в списке не представлен, то используйте тег: [code=ваш_язык]код[/code], например, [code=ada]код[/code]. Если в будущем подсветка синтаксиса для указанного языка будет реализована, исходный код преобразится.
  • Помните, один вопрос - одна тема.

Приятного времяпрепровождения! С уважением, Void, kemiisto .

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Другие языки | Следующая тема »


 




[ Время генерации скрипта: 0.1401 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.