185 похожих чатов

Кстати, вот у меня есть интерпретатор языка на OCaml. я

хочу сделать из него компилятор. сложность в том, что eval для выражений вызывается на стадии проверки типов (зависимая типизация), и если я сделаю "втупую" ещё и компилятор выражений в какой-то другой язык, то получается, что при добавлении нового выражения мне нужно изменить свою кодовую базу в двух местах: eval и compile. это муторно, к тому же эти реализации могут расходиться из-за багов, т.е. во время компиляции одна семантика, а во время исполнения совсем другая.

есть какие-то общепринятые подходы для решения этой проблемы?

4 ответов

15 просмотров

Идея в том, что разные семантики - это просто разные параметры у eval. eval пишется один раз, а потом в него подставляются разные методы "вычисления". Гуглить надо "стандартную семантику".

Михаил Бахтерев
Идея в том, что разные семантики - это просто разн...

Это вы хотите сказать, что модные эффекты придумали в лиспе?

а чем вас не устраивает разные семантики? Они вам и понадобятся разные скорее всего. Как минимум на тайп-левеле нужно вычислять в том числе и открытые термы, а на терм-левеле только закрытые (ну если у вас там не что-то странное). Агда к примеру заглядывает под лямбды во время нормализации, а в рантайме это нетипично делать. В рантайме у вас с высокой вероятностью типов уже не будет (хаскель выкидывает типы, к примеру, но часть инфы оставляет), так что не получится сделать type-driven partial evaluation, а на тайп-левеле это удобно, потому что позволяет делать такие вещи: https://raw.githack.com/effectfully/inference-in-agda/master/InferenceInAgda.html#eta-rules Ну и так далее. Можете попытаться сделать универсальный вычислитель, но скорее всего будет и неудобно и тормозно. Но если у кого-то есть статьи на эту тему, то я бы тоже почитал

hirrolot- Автор вопроса
Roman
а чем вас не устраивает разные семантики? Они вам ...

> Как минимум на тайп-левеле нужно вычислять в том числе и открытые термы, а на терм-левеле только закрытые у меня eval просто принимает список значений для вычисления терма. если значение "отсутствует", то это будет просто нейтральная переменная в списке > гда к примеру заглядывает под лямбды во время нормализации, а в рантайме это нетипично делать. меня устраивает энергичная стратегия и во время компиляции, и в рантайме > В рантайме у вас с высокой вероятностью типов уже не будет (хаскель выкидывает типы, к примеру, но часть инфы оставляет) это зависит от системы типов. емнип, идрис не "выкидывает" все типы в рантайме, а вычисляет. у хаскелля может быть с этим попроще, т.к. у него нет зав. типов из коробки

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта