languagedev | Unsorted

Telegram-канал languagedev - Programming Language Design

1563

Обсуждение дизайна языков программирования (как новых, так и существующих). Литература: https://github.com/true-grue/Compiler-Development Создание и устройство компиляторов: @CompilerDev Для новичков: @pld_beginners

Subscribe to a channel

Programming Language Design

Ну, а в чём вопрос то?

Как я сказал, у меня в языке, в разных ситуациях используются разные редукции.

Например в языке есть нечто что я пока называю формами — то там идёт оперирование типизированными синтаксическими конструкциями — переписывание деревьев/термов короче

Читать полностью…

Programming Language Design

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

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

Читать полностью…

Programming Language Design

ну как же? синтаксически конструкции b * c * d в программе не существует, но значение такое строится

Читать полностью…

Programming Language Design

кстааати. а можно написать правило вида let a * (let b * let c) := ..., редуцирующее a * (b * c)?

Читать полностью…

Programming Language Design

Если коротко, то есть нечто вроде первоклассных скоупов. Но оно же и словари/мапки/ассоциативные массивы, но гетерогенные.

Читать полностью…

Programming Language Design

Есть аналог. Как нибудь распишу.

Спасибо за вопрос🤗

Читать полностью…

Programming Language Design

с пушами и инсёртами этими обфускация хорошая получается

Читать полностью…

Programming Language Design

есть локальный скоуп или его аналог? чтобы переписать a * b * (c * d * (e * f * g) * h * i) * k * l в виде примерно { let efg := e * f * g; let cdhi := c * d * efg * h * i; a * b * cdhi * k * l }

Читать полностью…

Programming Language Design

У меня вдруг возник вопрос:

А как соотносятся зипперы (ФП) и паттерн-матчинг?

Спашиваю ибо у меня в языке это как будто одно и тоже 🤔

Читать полностью…

Programming Language Design

ага, я вроде такое для того самого языка с перегрузкой по возвращаемому типу реализовывал поверх парсера на комбинаторах, чтобы операторы раскидывать по заданным для них в коде приоритетам и ассоциативностям

Читать полностью…

Programming Language Design

да-да, я понял. непосредственно сам язык напоминает КЗГ

Читать полностью…

Programming Language Design

атомы — терминалы, переменные — нетерминалы. плюс типизация

Читать полностью…

Programming Language Design

Если знаете парсер Пратта то вот по поводу моего варианта:
/channel/LanguageDev/251239

Читать полностью…

Programming Language Design

то, что я пока увидел, больше похоже на вдохновление контекстно-зависимыми грамматиками, как будто

Читать полностью…

Programming Language Design

пожалуй что да, интересная концепция

Читать полностью…

Programming Language Design

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

Читать полностью…

Programming Language Design

Короче я не понял это сообщение.

Перефразируйте пожалуйста.

Читать полностью…

Programming Language Design

Вот тут мне не понятно

Читать полностью…

Programming Language Design

потому что теоретически если сделать { let a := b * c; a * d }, то синтаксически правило let b * let c * let d := .... не будет возможно редуцировать

Читать полностью…

Programming Language Design

единственное, что при таком подходе, как я предложил, потребуется редукция не синтаксическая, а на значениях. как сейчас сделано?

Читать полностью…

Programming Language Design

А я не могу понять почему я тащусь от этого подхода, хотя естественно у него есть недостатки

Читать полностью…

Programming Language Design

А как тебе мысль поменять звёздочку и точку местами?

Читать полностью…

Programming Language Design

Можем обсудить как сделать более читабельно 😏

Можете пожалуйста привести пример того что вам с трудом читается и почему?

Мне не особо важно какой будет синтаксис на самом деле. Но мне важна максимальная линейность нотации — я бы использовал s-expr, но там можно потеряться к скобках. Да и язык у меня по сути работает с последовательностями. Я показывал что можно хоть
++++++++
писать, не смотря на то что + это инфикс.

Ещё можно по разному строить выражения. Например имеется значение:

a * b * (c * d * (e * f * g) * h * i) * k * l

Его можно построить иначе:

[a; b]
* push [c; d; h; i]
* insert
. after [2; 2]
. [e; f; g]
* push [k; l]
* combine


Я всё больше подумываю оставить в языке только этот вариант. Он больше соответствует идее/концепции, чем первый —
то есть вместо вложенных скобок (любых) использовать только подобные конструкции с использованием одномерных кортежей или "одномерных скобок", а также мультиметоды в инфиксной форме (пробел, точка, звёздочка, плюс) и значений вроде push, insert и т.п.

Я открыт к предложениям🤗

UPD: исправил второй вариант — была лишняя строчка

Читать полностью…

Programming Language Design

в рамках дешугаринга

Читать полностью…

Programming Language Design

Вы кстати уже не первый кто сравнивает мой язык с БНФ.

Но я не думал о том чтобы сделать его таким - как-то само получилось)

Читать полностью…

Programming Language Design

ну если так то да)

Но для разбора моего языка КЗГ не нужна

Читать полностью…

Programming Language Design

я про арифметические и не говорил. похоже на набор правил БНФ
a B c ::= d e F G h I

Читать полностью…

Programming Language Design

да нет, тут грамматика не многим сложнее чем у арифметических выражений.

Парсер Пратта знаете?

Читать полностью…

Programming Language Design

Вдохновлённая химией и молекулярной биологией

Читать полностью…

Programming Language Design

а, понял. прям так. f * 1 * #i-want-int

Читать полностью…
Subscribe to a channel