1563
Обсуждение дизайна языков программирования (как новых, так и существующих). Литература: https://github.com/true-grue/Compiler-Development Создание и устройство компиляторов: @CompilerDev Для новичков: @pld_beginners
Задача интенсиональной эквивалентности решается через введение нормальной формы.
Читать полностью…
И когда белые ящики, тоже нерешаемая. )
Читать полностью…
Если реализация поменялась, можно кинуть варн (даже на несходящиеся части внутри коллбека) и кинуть ошибку компиляции/впихнуть старую реализацию
Читать полностью…
диаграммы понятные, но очень любопытно, как так эта нотация хитро их описывает
Читать полностью…
понятия не имею. повторяю, это скопировано из https://raw.githubusercontent.com/marvinborner/optimal-effects/refs/heads/bachelor/thesis.pdf, страница 16
Читать полностью…
например, недавно вышел тезис Марвина Борнера про оптимальные эффекты через token-passing semantics. можно начать изучать этот тезис, который дает ссылки на другую литературу по эффектам в лямбда-исчислении.
https://raw.githubusercontent.com/marvinborner/optimal-effects/refs/heads/bachelor/thesis.pdf
но ваше развитие как PLD дизайнера начинается не с изобретения велосипеда, а с исследования prior art.
Читать полностью…
Скучно перекладывать жсоны на работе
Вообще это чисто исследовательский проект, для развлечения и моего развития как pld дезигнера
Господа!
В общем я тоже занимаюсь аутизмом в меру сил и делаю свой нескучный язык. Но я взял за основу уже существующий calculus (самое близкое это combinator calculus, но не оно)
Соответственно, у меня есть несколько правил редукции термов. Я захотелось мне сделать что-то похожее на ml, в том отношении, что мне не хочется полностью всё заворачивать в монады для io и мутабельности. Проблема тут в том, что в чистом исчислении такое не сделаешь без монад или их аналогов. Но! Я могу попробовать наворотить новых правил редукции. Я думал сделать прям отдельные правила, с отдельными "комбинаторами" типа seq или print и сделать их интринсиками. Мне не понравилось, по многим причинам, например потому что не скейлится. После обсуждений с чатомгпт пришли к такой схеме: оставить чистое исчисление, но кодировать специальные термы (он называл их request, но я предпочитаю opcode по аналогии с машинными инструкциями) структурно, а не номинально.
Пример: терм (который мы выбрали определенным образом, я написал рандомный) S K K I K S S это условно print, бинарный комбинатор и когда его встречает редусер, то он делает сайд-эффект. По такому принципу можно сделать и стейтменты, и io и даже мутации или лямбды (но там немного сложнее)
Вопрос: вы встречали языки которые так делают?
Ну, а в чём вопрос то?
Как я сказал, у меня в языке, в разных ситуациях используются разные редукции.
Например в языке есть нечто что я пока называю формами — то там идёт оперирование типизированными синтаксическими конструкциями — переписывание деревьев/термов короче
я просто не знаю, как скоупы обозначаются, потому использовал свою предполагаемую нотацию. можно и без неё. допустим, у нас есть
let e1 := a * b;
let e2 := e1 * c;
let a * let b * let c := d;
let program := e2;
program по правилу 4 будет выведено e2, затем по правилу 2 — e1 * c, из которого по правилу 1 — a * b * c, из которого по правилу 3 — d
Читать полностью…
ну как же? синтаксически конструкции b * c * d в программе не существует, но значение такое строится
Читать полностью…
кстааати. а можно написать правило вида let a * (let b * let c) := ..., редуцирующее a * (b * c)?
Но, проблема останова тоже нерешаемая... однако жеж живем и даже иногда работаем... )
Читать полностью…
Не решаема задача определения экстенсиональной эквивалентности. Нельзя определить эквивалентность двух черных ящиков с входом и выходом, когда каждый ящик — машина тьюринга.
Читать полностью…
Который указывает компилятору, как менять аст взятой функции
Читать полностью…
короче, не помню. когда-то просто из принципа научился читать нотацию Лафонта, но потом забыл из-за ненадобности. в тезисе диаграммы есть, а если хочется умственного онанизма, можно почитать Цицерона в оригинале, и то интереснее будет.
Читать полностью…
а чем отличаются скобки [] от скобок ()? этого тоже в Лафонтовской нотацией нет
Читать полностью…
а что такое ∘? по-моему этого не было в Лафонтовской нотации
потыкался в гпт с целью понять лафонтовскую нотацию 𝛿∘[𝑎(x1, … , x𝑛), 𝑎(y1, … , y𝑛)] ⋈ 𝑎[𝛿∘(x1, y1), … , 𝛿∘(x𝑛, y𝑛)], но это совершенно бестолковая затея, т.к. Т9 путается в показаниях и противоречит себе
может кто-то пояснить, как это правило соответствует этой диаграмме?
Да, поэтому такой вопрос и возник, относительно возможностей такого кодирования эффектов (и не только) через термы
Читать полностью…
Касаемо языка -- не хочется оставаться только с чистым исчислением, хочется сделать более императивный по форме язык, с сохранением функционального ядра. То есть я не против добавить seq mut и возможно ещё несколько стандартных императивных вещей, типа циклов
Читать полностью…
какую бизнес-проблему вы решаете?
Читать полностью…
вопрос: соответствует ли моё предположение реальности
Читать полностью…
но это будет работать только либо если редукции применяются на значениях, либо если в языке как таковых значений нет и он оперирует типизированными синтаксическими конструкциями (как в лямбда-исчислении, т.е. одно выражении буквально переписывается в другое)
Читать полностью…
Короче я не понял это сообщение.
Перефразируйте пожалуйста.
потому что теоретически если сделать { let a := b * c; a * d }, то синтаксически правило let b * let c * let d := .... не будет возможно редуцировать