паттерн интерпретатор
От: VVVa  
Дата: 20.04.23 07:20
Оценка:
А как в паттерне интерпретатор
https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B0%D1%82%D0%BE%D1%80_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
организовывают условные конструкции, циклы или хотя бы переход на метки?
Я так понимаю большинство интерпретаторов используют его?
Re: паттерн интерпретатор
От: Qulac Россия  
Дата: 20.04.23 08:03
Оценка:
Здравствуйте, VVVa, Вы писали:

VVV>А как в паттерне интерпретатор

VVV>https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B0%D1%82%D0%BE%D1%80_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
VVV>организовывают условные конструкции, циклы или хотя бы переход на метки?

Я бы сначала определил бы в грамматике нетерминал "блок операторов" ибо во многих местах пригодится, это то что обычно между {}. Потом не терминал цикл, т.е. лог выражение с блоком операторов и т.д.

VVV>Я так понимаю большинство интерпретаторов используют его?


Нет.
Программа – это мысли спрессованные в код
Re[2]: паттерн интерпретатор
От: VVVa  
Дата: 20.04.23 08:56
Оценка:
Здравствуйте, Qulac, Вы писали:

VVV>>Я так понимаю большинство интерпретаторов используют его?


Q>Нет.

а что тогда используют?
Re[3]: паттерн интерпретатор
От: Qulac Россия  
Дата: 20.04.23 09:11
Оценка: 2 (1)
Здравствуйте, VVVa, Вы писали:

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


VVV>>>Я так понимаю большинство интерпретаторов используют его?


Q>>Нет.

VVV>а что тогда используют?

Интерпретатор — это ооп шаблон, а так конечные автоматы используются вроде бы.
Программа – это мысли спрессованные в код
Re: паттерн интерпретатор
От: koenjihyakkei Россия  
Дата: 20.04.23 11:26
Оценка:
Здравствуйте, VVVa, Вы писали:

VVV>Я так понимаю большинство интерпретаторов используют его?


Большинство каких интерпретаторов? Например, в интерпретаторах виртуальных машин точно нет, там в большинстве пишется на ассембелере или близко к нему.
Re[2]: паттерн интерпретатор
От: VVVa  
Дата: 20.04.23 13:08
Оценка:
Здравствуйте, koenjihyakkei, Вы писали:

K>Большинство каких интерпретаторов? Например, в интерпретаторах виртуальных машин точно нет, там в большинстве пишется на ассембелере или близко к нему.


Ну например Питон, Рубин, ЯваСкрипт
Re[3]: паттерн интерпретатор
От: koenjihyakkei Россия  
Дата: 20.04.23 13:22
Оценка: 85 (2)
Здравствуйте, VVVa, Вы писали:

VVV>Ну например Питон, Рубин, ЯваСкрипт


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

Поэтому серьезные конторы пишут сильно замороченные вещи:

Adroid ART(Java interpreter) написан на чистом ассемблере, но поддерживается в основном только х86 и Арм.

V8(JavaScript interpreter) написан на самописном языке Torque, бакендом которого выступает их же компилятор Turbofan. Иными словами тоже на ассемблере, но более грамотно и замороченно, поэтому поддерживается гораздо больше архитектур.

Webkit JavaScriptCore(JavaScript interpreter) — написан на собственном макроассемблере offlineasm (довольно уродливая вещь), но также позволяет легче поддерживать новые архитектуры.

И да, у них у всех были(есть) С/С++ интерпретаторы, но они медленнее процентов на 20%.

В питоне и руби вроде все еще Сишные интерпретаторы.
Re[4]: паттерн интерпретатор
От: VVVa  
Дата: 20.04.23 14:00
Оценка:
Здравствуйте, koenjihyakkei, Вы писали:


K>В питоне и руби вроде все еще Сишные интерпретаторы.

а всётаки какова плана они?
Re[5]: паттерн интерпретатор
От: koenjihyakkei Россия  
Дата: 20.04.23 16:28
Оценка:
Здравствуйте, VVVa, Вы писали:

VVV>а всётаки какова плана они?


Да обычные switch/case по опкоду.

Вот как пример интерпретатор в WasmEdge. Это WebAssembly VM для крипты.
Re[6]: паттерн интерпретатор
От: VVVa  
Дата: 21.04.23 05:20
Оценка:
Здравствуйте, koenjihyakkei, Вы писали:

K>Да обычные switch/case по опкоду.

вот только юмора не надо ...

там действительно switch/case ... кто так мог написать?
там же каждая инструкция по 100 раз проверяется каждым кейсом ...
Отредактировано 21.04.2023 5:26 VVVa . Предыдущая версия . Еще …
Отредактировано 21.04.2023 5:26 VVVa . Предыдущая версия .
Re[7]: паттерн интерпретатор
От: LaptevVV Россия  
Дата: 21.04.23 05:47
Оценка:
VVV>там действительно switch/case ... кто так мог написать?
VVV>там же каждая инструкция по 100 раз проверяется каждым кейсом ...
У меня в курсовых по написанию интерпретатора VM было специальное требование — не писать switch/case...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: паттерн интерпретатор
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 21.04.23 06:01
Оценка: 3 (1)
Здравствуйте, VVVa, Вы писали:

VVV>там же каждая инструкция по 100 раз проверяется каждым кейсом ...


Зачем? Это же не if/else.
Re[8]: паттерн интерпретатор
От: VVVa  
Дата: 21.04.23 06:24
Оценка:
Здравствуйте, Nuzhny, Вы писали:


N>Зачем? Это же не if/else.

хоть тем хоть тем — всё равно код сгенерирует с множеством CMP последовательно...
Re[9]: паттерн интерпретатор
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 21.04.23 06:33
Оценка: 3 (1) +1
Здравствуйте, VVVa, Вы писали:

N>>Зачем? Это же не if/else.

VVV>хоть тем хоть тем — всё равно код сгенерирует с множеством CMP последовательно...

Не согласен. В зависимости от значений, там может быть или просто таблица с переходами, или что-то типа бинарного поиска. Так делали компиляторы ещё лет 15 назад. Не думаю, что с тех пор что-то ухудшилось
Re[10]: паттерн интерпретатор
От: VVVa  
Дата: 21.04.23 07:33
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Не согласен. В зависимости от значений, там может быть или просто таблица с переходами, или что-то типа бинарного поиска. Так делали компиляторы ещё лет 15 назад. Не думаю, что с тех пор что-то ухудшилось


Сколько ASM код не смотрел такого не видел ...
Re[11]: паттерн интерпретатор
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 21.04.23 08:14
Оценка: 3 (1)
Здравствуйте, VVVa, Вы писали:

VVV>Сколько ASM код не смотрел такого не видел ...


Вот например
Re[7]: паттерн интерпретатор
От: koenjihyakkei Россия  
Дата: 21.04.23 11:09
Оценка:
Здравствуйте, VVVa, Вы писали:

VVV>там действительно switch/case ... кто так мог написать?

VVV>там же каждая инструкция по 100 раз проверяется каждым кейсом ...

Ну опкоды обычно все плотные, то есть от 0 до какого-то значения без пропусков, поэтому там всегда jump table генерируется.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.