на сколько сложно будет сделать интерпритатор Н2?
От: Аноним  
Дата: 10.04.12 08:38
Оценка:
дело в том что во встраиваемой ИД за частую компиляция не возможна/запрещена с помощью политики, в этом случае интерпретация будет выходом. Падение скорости в данном случае не играет ни малейшей роли.
Re: на сколько сложно будет сделать интерпритатор Н2?
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.04.12 08:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>дело в том что во встраиваемой ИД за частую компиляция не возможна/запрещена с помощью политики, в этом случае интерпретация будет выходом. Падение скорости в данном случае не играет ни малейшей роли.


Интерпретатор всегда делать проще. Просто придется отказаться от сервисов которы предоставляет Н2 в области трансформации и делать рантайм интерпретатора самому.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: на сколько сложно будет сделать интерпритатор Н2?
От: Ziaw Россия  
Дата: 10.04.12 16:49
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Интерпретатор всегда делать проще. Просто придется отказаться от сервисов которы предоставляет Н2 в области трансформации и делать рантайм интерпретатора самому.


Не первый раз cлышу это. Почему проще? Интерпретатор в лоб делается примерно так же как и компилятор, и там и там генерируем код для выполнения (сейчас все интерпретаторы генерируют байткод). Потом уже идут оптимизации, в обоих случаях не совсем тривиальные. Интерпретатор позволяет делать некоторые вещи проще чем компилятор, но сливает по быстродействию.
Re: на сколько сложно будет сделать интерпритатор Н2?
От: Ziaw Россия  
Дата: 10.04.12 16:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>дело в том что во встраиваемой ИД за частую компиляция не возможна/запрещена с помощью политики, в этом случае интерпретация будет выходом. Падение скорости в данном случае не играет ни малейшей роли.


Если скорость выполнения не критична — не слишком сложно. Надо взять компилятор, догнать его до стадии генерации кода и воспользоваться деревом, которое получилось. Конечных операций совсем не много, сделать матч по ним и выполнить каждую не проблема.
Re[3]: на сколько сложно будет сделать интерпритатор Н2?
От: catbert  
Дата: 10.04.12 17:00
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Не первый раз cлышу это. Почему проще?


Простейшая интерпретация достигается пробеганием по синтактическому дереву кода.

Z>Интерпретатор в лоб делается примерно так же как и компилятор, и там и там генерируем код для выполнения (сейчас все интерпретаторы генерируют байткод).


Генерировать байткод — это уже компиляция.
Re[3]: на сколько сложно будет сделать интерпритатор Н2?
От: para  
Дата: 10.04.12 17:21
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Не первый раз cлышу это. Почему проще? Интерпретатор в лоб делается примерно так же как и компилятор, и там и там генерируем код для выполнения (сейчас все интерпретаторы генерируют байткод). Потом уже идут оптимизации, в обоих случаях не совсем тривиальные. Интерпретатор позволяет делать некоторые вещи проще чем компилятор, но сливает по быстродействию.


если нужен байт-код, то достаточно будет воспользоваться компилятором (compilier as service) и выполнить этот байт-код
(скомпилировать новую сборку в памяти или же на прямую создать байт-код через SRE)

но автору поста это сделать(загрузить байт код) не позволяет политика безопасности — тогда надо именно интерпретировать и без особых оптимизаций:
в простейшем случае это парсер+рефлексия.
Re[4]: на сколько сложно будет сделать интерпритатор Н2?
От: Ziaw Россия  
Дата: 11.04.12 03:55
Оценка:
Здравствуйте, para, Вы писали:

P>если нужен байт-код, то достаточно будет воспользоваться компилятором (compilier as service) и выполнить этот байт-код

P>(скомпилировать новую сборку в памяти или же на прямую создать байт-код через SRE)

P>но автору поста это сделать(загрузить байт код) не позволяет политика безопасности — тогда надо именно интерпретировать и без особых оптимизаций:

P>в простейшем случае это парсер+рефлексия.

байткод это не обязательно CLR. Но да, если быстродействие не критично — парсер + рефлексия.
Re[4]: на сколько сложно будет сделать интерпритатор Н2?
От: Ziaw Россия  
Дата: 11.04.12 03:56
Оценка:
Здравствуйте, catbert, Вы писали:

Z>>Интерпретатор в лоб делается примерно так же как и компилятор, и там и там генерируем код для выполнения (сейчас все интерпретаторы генерируют байткод).


C>Генерировать байткод — это уже компиляция.


Да нету сейчас интерпретаторов без генерации промежуточного байткода.
Re[5]: на сколько сложно будет сделать интерпритатор Н2?
От: Аноним  
Дата: 11.04.12 03:58
Оценка: +1 :)
Здравствуйте, Ziaw, Вы писали:

Z>Да нету сейчас интерпретаторов без генерации промежуточного байткода.

ruby?
Re[5]: на сколько сложно будет сделать интерпритатор Н2?
От: catbert  
Дата: 11.04.12 08:50
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Да нету сейчас интерпретаторов без генерации промежуточного байткода.


Если вы пишете интерпретатор с генерацией промежуточного байткода, то выйдет просто отдельный компилятор байткода и отдельно интерпретатор байткода. Но так делать необязательно.

Интерпретатор с байткодом все равно писать проще, потому что вы полностью контролируете вашу "виртуальную машину", и не нужно выкручиваться для поддержки фич языка, которые сложно выразить в примитивах процессора.
Re[6]: на сколько сложно будет сделать интерпритатор Н2?
От: Ziaw Россия  
Дата: 11.04.12 14:38
Оценка:
Здравствуйте, Аноним, Вы писали:

Z>>Да нету сейчас интерпретаторов без генерации промежуточного байткода.

А>ruby?

И перл. Оба активно страдают от этого и надеются на паррот или еще что.
Re[7]: на сколько сложно будет сделать интерпритатор Н2?
От: WolfHound  
Дата: 11.04.12 14:41
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

Z>И перл. Оба активно страдают от этого и надеются на паррот или еще что.

Они динамически типизированные. Им надеяться не на что.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: на сколько сложно будет сделать интерпритатор Н2?
От: Ziaw Россия  
Дата: 11.04.12 14:44
Оценка: -1
Здравствуйте, catbert, Вы писали:

C>Интерпретатор с байткодом все равно писать проще, потому что вы полностью контролируете вашу "виртуальную машину", и не нужно выкручиваться для поддержки фич языка, которые сложно выразить в примитивах процессора.


Все равно все приходится выразить в примитивах процессора. Интерпретатор в лоб написать проще, да. Но нормальные интерпретаторы имеют сложность не меньше чем компиляторы. Просто там проблемы другие. Возьмем lua, python или v8 и сравним, например, с D/OCaml/Coffeescript (дада, последний тоже компилятор).
Re[3]: на сколько сложно будет сделать интерпритатор Н2?
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.04.12 14:41
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Не первый раз cлышу это. Почему проще?


Потому что не нужна сложная стадия типизации и генерации низкоуровневого пушистого кода, ваш КО.

Z> Интерпретатор в лоб делается примерно так же как и компилятор, и там и там генерируем код для выполнения (сейчас все интерпретаторы генерируют байткод).


Интерпретаторы еще обычно динамически типизируется делают. Это резко упрощает рабту.

К тому же не обязательно промежуточный код создавать. Можно и по АСТ интепретировать. Руби так и делает, вроде.
Уж для доморощенного языка это точно приемлемо.

Z> Потом уже идут оптимизации, в обоих случаях не совсем тривиальные. Интерпретатор позволяет делать некоторые вещи проще чем компилятор, но сливает по быстродействию.


Интерпретаторы динамики в разы проще в реализации. Потому их столько и наклепано.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: на сколько сложно будет сделать интерпритатор Н2?
От: Аноним  
Дата: 12.04.12 14:45
Оценка:
Здравствуйте, catbert, Вы писали:

C>Простейшая интерпретация достигается пробеганием по синтактическому дереву кода.


И обычно это намного сложнее чем компиляция. Потому как надо заботиться о контексте (переменные, стек вызовов, и т.п.), тогда как при компиляции это все получаем бесплатно.
Re[5]: на сколько сложно будет сделать интерпритатор Н2?
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.04.12 21:40
Оценка:
Здравствуйте, Аноним, Вы писали:

C>>Простейшая интерпретация достигается пробеганием по синтактическому дереву кода.


А> И обычно это намного сложнее чем компиляция. Потому как надо заботиться о контексте (переменные, стек вызовов, и т.п.), тогда как при компиляции это все получаем бесплатно.


Это смотря во что компилировать. Если в код немерла (макросы), то возможно. Если речь идет о генерации IL-а, или не дай Бог, машкодов, то иньтерпретация многократно проще.

Кроме того для интерпретации ДСЛ-я не обязательно писать полный по тьюрингу движок. Достаточно придумать модель, а из ДСЛ-я "заполнить" ее. Написать же интерпретатор по этой модели задача довольно плевая.

Скажем, вместо того чтобы генерировать код парсера, можно сделать интерпретатор его модели (по которой код и генерируется). Это будет в разы проще. Как минимум уже будет плевать на скорость. Ее ведь все равно загубили .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: на сколько сложно будет сделать интерпритатор Н2?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 14.04.12 10:32
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

Z>>И перл. Оба активно страдают от этого и надеются на паррот или еще что.


Если чуть точнее, то в руби вплоть до 1.8 был чистый интерпретатор с проходом по АСТ, а в 1.9 уже компиляция в байткод и его выполнение. И этой версии не один год уже.

WH>Они динамически типизированные. Им надеяться не на что.


Руби переход на ВМ с байткодом дал все же заметное ускорение. Конечно, до статических нативных языков еще очень далеко, но задача их догонять и не стоит.
Re[6]: на сколько сложно будет сделать интерпритатор Н2?
От: Аноним  
Дата: 16.04.12 09:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это смотря во что компилировать. Если в код немерла (макросы), то возможно. Если речь идет о генерации IL-а, или не дай Бог, машкодов, то иньтерпретация многократно проще.


Генерация IL все еще существенно проще чем интерпретация (по той же причине — не надо заниматься контекстом, все VM сделает сама), IL все еще очень высокоуровневый. Компиляция в нейтив сложна только в двух местах — register scheduling и instruction selection. Если компилировать по тупой схеме (например, все переменные сразу на стеке, а регистры только для специальных случаев), наплевав на оптимизации, то все равно выходит на порядок проще чем интерпретация.

VD>Кроме того для интерпретации ДСЛ-я не обязательно писать полный по тьюрингу движок. Достаточно придумать модель, а из ДСЛ-я "заполнить" ее. Написать же интерпретатор по этой модели задача довольно плевая.


Опять же ровно до того момента, когда для DSL потребуется какой либо сложный контекст. Наличие переменных и функций этот контекст неизбежно предполагает.

VD>Скажем, вместо того чтобы генерировать код парсера, можно сделать интерпретатор его модели (по которой код и генерируется). Это будет в разы проще.


Не. Генерировать код намного проще.
Re[7]: на сколько сложно будет сделать интерпритатор Н2?
От: catbert  
Дата: 16.04.12 09:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Не. Генерировать код намного проще.


Ну, мне проще писать интерпретаторы По крайней мере, игрушечный интерпретатор написать проще, чем игрушечный компилятор.
Re[7]: на сколько сложно будет сделать интерпритатор Н2?
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.04.12 14:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, VladD2, Вы писали:


VD>>Это смотря во что компилировать. Если в код немерла (макросы), то возможно. Если речь идет о генерации IL-а, или не дай Бог, машкодов, то иньтерпретация многократно проще.


А> Генерация IL все еще существенно проще чем интерпретация


Это заблуждение. Попробуй сам и поймешь, что это не так.

А>(по той же причине — не надо заниматься контекстом, все VM сделает сама), IL все еще очень высокоуровневый.


IL то? Акстись! В нем почти никаких проверок не делается. Ты с легкостью сможешь сгенерировать модуль которые вылетит в рантайме, не пройдет верификацию или вообще завалит приложение.

А>Компиляция в нейтив сложна только в двух местах — register scheduling и instruction selection.


Она вообще сложна. А качественная компиляция, да еще и под разные платформы — это вообще отдельная наука. В разных GCC бэкэнды составляют основной объем кода.

А>Если компилировать по тупой схеме (например, все переменные сразу на стеке, а регистры только для специальных случаев), наплевав на оптимизации, то все равно выходит на порядок проще чем интерпретация.


Не фига не выходит. Интерпретировать можно прямо сразу. Для компиляции в низкоуровневый язык вроде ассемблера по любому нужно городить огород с преобразованием древесной формы в линейную и т.п.

VD>>Кроме того для интерпретации ДСЛ-я не обязательно писать полный по тьюрингу движок. Достаточно придумать модель, а из ДСЛ-я "заполнить" ее. Написать же интерпретатор по этой модели задача довольно плевая.


А> Опять же ровно до того момента, когда для DSL потребуется какой либо сложный контекст. Наличие переменных и функций этот контекст неизбежно предполагает.


У тебя какой-то пунктик с этим контекстом. Модель полностью определяет весь контекст ДСЛ-я. Если есть модель, то написание ее интерпретатора — это примитивнешая задача. Может стать и так, что будет достаточно просто вызвать метод модели — это и будет интерпретацией.

VD>>Скажем, вместо того чтобы генерировать код парсера, можно сделать интерпретатор его модели (по которой код и генерируется). Это будет в разы проще.


А> Не. Генерировать код намного проще.


Для тех кто этого не делал — да. Займись этим на практике и увидишь, что это отнюдь не просто. Это не просто даже при генерации высокоуровневого языка.

Потом от компилируемого кода все ожидают быстрой работы. А сделать генерацию оптимального кода в разы сложней.

Вот погляди. Это (включая все вложенные подкаталоги и файлы) — код связанный с генерацией кода для парсера. И он еще очень компактен, так как сделан с помощью весьма выскороуровневых средств (квази-цитирования и паттерн-матчинга). Аналогичный код на C# будет раз в 5-10 больше.

А это код модели. Он существенно проще. Можно написать интерпретатор по нему всего лишь добавив по одной функции в каждый тип из этого списка. Объем кода интерпретатора получится в разы меньше. Но и в разы (точнее в десятки раз) понизится скорость работы парсера.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.