1563
Обсуждение дизайна языков программирования (как новых, так и существующих). Литература: https://github.com/true-grue/Compiler-Development Создание и устройство компиляторов: @CompilerDev Для новичков: @pld_beginners
Если коротко, то есть нечто вроде первоклассных скоупов. Но оно же и словари/мапки/ассоциативные массивы, но гетерогенные.
Читать полностью…
Есть аналог. Как нибудь распишу.
Спасибо за вопрос🤗
с пушами и инсёртами этими обфускация хорошая получается
Читать полностью…
есть локальный скоуп или его аналог? чтобы переписать 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 }
У меня вдруг возник вопрос:
А как соотносятся зипперы (ФП) и паттерн-матчинг?
Спашиваю ибо у меня в языке это как будто одно и тоже 🤔
ага, я вроде такое для того самого языка с перегрузкой по возвращаемому типу реализовывал поверх парсера на комбинаторах, чтобы операторы раскидывать по заданным для них в коде приоритетам и ассоциативностям
Читать полностью…
да-да, я понял. непосредственно сам язык напоминает КЗГ
Читать полностью…
атомы — терминалы, переменные — нетерминалы. плюс типизация
Читать полностью…
Если знаете парсер Пратта то вот по поводу моего варианта:
/channel/LanguageDev/251239
то, что я пока увидел, больше похоже на вдохновление контекстно-зависимыми грамматиками, как будто
Читать полностью…
пожалуй что да, интересная концепция
Читать полностью…
Вы хотели бы участвовать в группе по моему языку?
Читать полностью…
Больше того, если посмотреть на статьи про АОП, то можно заметить, что оно и придумано _для_того_, чтобы менять свойства частей программы.
Читать полностью…
Disable кнопки — это только с целью UX/usability, в том случае, если повторные нажатия не имеют смысла в течении некоторого таймаута.
Читать полностью…
единственное, что при таком подходе, как я предложил, потребуется редукция не синтаксическая, а на значениях. как сейчас сделано?
Читать полностью…
А я не могу понять почему я тащусь от этого подхода, хотя естественно у него есть недостатки
Читать полностью…
А как тебе мысль поменять звёздочку и точку местами?
Читать полностью…
Можем обсудить как сделать более читабельно 😏
Можете пожалуйста привести пример того что вам с трудом читается и почему?
Мне не особо важно какой будет синтаксис на самом деле. Но мне важна максимальная линейность нотации — я бы использовал 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: исправил второй вариант — была лишняя строчка
Вы кстати уже не первый кто сравнивает мой язык с БНФ.
Но я не думал о том чтобы сделать его таким - как-то само получилось)
ну если так то да)
Но для разбора моего языка КЗГ не нужна
я про арифметические и не говорил. похоже на набор правил БНФ
a B c ::= d e F G h I
да нет, тут грамматика не многим сложнее чем у арифметических выражений.
Парсер Пратта знаете?
Вдохновлённая химией и молекулярной биологией
Читать полностью…
а, понял. прям так. f * 1 * #i-want-int
Читать полностью…
Нет, но у меня есть класс специальных значений, которые я называю тегами - вот как раз для таких случаев.
let f * (i : Int) * #i-want-int : Int := ...;Читать полностью…
let f * (i : Int) * #i-want-string : String := ...;
Что-то у меня не получилось найти, с чего тема про аспекты началась, но хотелось бы заметить, что АОП это по сути частный случай метапрограммирования.
Навешивание логирующего аспекта на фрагмент программы ни по смысловой нагрузке ни по семантике ничем не отличается от ручного раскидывания вызова логирующей функции по коду.
В зависимости от способа реализации АОПшные аспекты могут функционировать как угодно - встраиваться в цепочку вызовов статически или динамически, переписывать код как макросы на котором-то уровне абстракции, и т.д.
В конечном счёте они являются просто ещё одним способом абстракции и обобщения элементов поведения программы. Поэтому они по определению должны и будут влиять на семантику программы - в общем случае. Поэтому мне глубоко непонятны все эти рассуждения о "правильности"/"неправильности"/"корректности"/"некорректности" аспектов.
Написали реализацию, зависящую от нелокального состояния - получили внезапные эффекты при нарушении ожидаемого порядка выполнения. Не важно, каким способом мы это в программу принесли. Это прямое логическое следствие, вытекающее из природы сущности.
Так и я об этом: порядок вызовов не определен из-за асинхронности (обработчики вызываются в ответ на события, и порядок этих событий определен весьма частично).
Читать полностью…