Сохранен 88
https://2ch.hk/pr/res/2019584.html
Прошлые домены не функционирует! Используйте адрес ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Yupiel

 Аноним 04/05/21 Втр 22:39:52 #1 №2019584 
logo.png
Тред языка мечты.

Yupiel - языко-ориентированный язык программирования основанный на механизме перезаписи строк.

Синтаксис
В языке есть только одна конструкция - правило. Вся программа на Юпиель представляет из себя список правил вида:
Type :: Pattern => Replacement
или
Type :: Pattern

Type - терм, обознающий тип выражение.

Pattern - набор символов и нетерменалов.

Нетерминалы обозначаются как |var : Type|, где var - имя переменой (может быть любой последовательностью символов, кроме `|` и ` `.

Replacement - набор символов и нетерминалов вида |var|.

Пример:
Effect :: print |arg : Expr| => console.log(|arg|)

Всякий набор правил Юпиель называется модулем (module).

Текст, подаваемый в модуль, называется источником (source).

Текст, выдаваемый модулем, называется целью (target).

Задача модуля - превратить код из языка Source в код языка Target.

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

Твоя говноконтора программирует на говноязыке X? Просто прозрачно превращай свой идеальный язык Y в говноязык X с помощью Yupiel.

Выразительность
Код на Юпиель такой, каким ты хочешь его видеть.

Простота
В Юпиеэль есть только одна вещь - правило.

Простая отладка
Просматривай поэтапно процесс транспиляции.

> имплементация?
Её пока нет. Однако будет создан proof-of-concept транспилятор Yupel.

И да, язык назван в честь одной хентай-манги.
Аноним 04/05/21 Втр 22:41:28 #2 №2019587 
>>2019584 (OP)
> ` `
`:`
самофикс надо же так обосраться
Аноним 04/05/21 Втр 22:44:09 #3 №2019590 
>>2019584 (OP)
Ты изобрёл макросы.
Аноним 04/05/21 Втр 22:48:14 #4 №2019598 
>>2019590
По-сути, в правила Юпиэль - это макросы, но с произвольным синтаксисом. Правила Юпиель можно рассматривать как правила парсера Эрли, но с дополнительной частью в виде замены. Невероятно просто, однако, почему-то это еще никто не реализовал.

Алсо, макросы во всех языках могут работать только с термами языка, а не с произвольными синтаксическими конструкциями. К примеру, лишп. В лишпе макросы могут работать только с s-exp.
Аноним 04/05/21 Втр 22:48:49 #5 №2019600 
>>2019584 (OP)
Хуюпель.
Аноним 04/05/21 Втр 22:50:32 #6 №2019603 
>>2019600
Два чая адеквату
Аноним 04/05/21 Втр 22:52:39 #7 №2019608 
>>2019600
>>2019603
Принимаем только объективную критику.
sageАноним 05/05/21 Срд 00:28:03 #8 №2019756 
>>2019600
Хуюпиель*
Аноним 05/05/21 Срд 01:41:06 #9 №2019789 
Yupiel Sama no geboku?
Аноним 05/05/21 Срд 01:54:48 #10 №2019794 
>>2019789
Оно самое.
Аноним 05/05/21 Срд 02:05:50 #11 №2019801 
>>2019584 (OP)
Имбецилы переизобрели лисп. Спешите видеть.
Аноним 05/05/21 Срд 02:11:58 #12 №2019804 
>>2019598
ОП, как мне статически тайпчекнуть то что оно высрет в итоговой программе? Ведь я пишу только исходную программу. Без этого твой язык мне не нужен.

Второе: допустим я написал траспилятор на твоём языке. Потом траспильнул вторым транспилятором. Где гарантии типобезопасности на target?

сделай нормально, иначе можно и на racket макросы бомбить
Аноним 05/05/21 Срд 03:46:04 #13 №2019820 
>>2019804
> как мне статически тайпчекнуть то что оно высрет в итоговой программе?
Статический тайпчек это тоже самое что синтаксический анализ. Статический тапочек доказывает над термами, а синтаксический анализ доказывает над синтаксическими конструкциями переводя их в термы.

Предположим, что мы имеем правило Natural (его определение опустим).
Тогда определение операции (+) над Natural будет очевидным:
Natural :: |x : Natural| + |y : Natural| => (+ |x| |y|)

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

Однако, не скрывая правды, target не обязан быть корректным. Если Source и Target представляют из себя Тьюринг-полный языки, то нельзя исключить левую рекурсию. Как ты понимаешь, это не проблема Yupiel, а проблема остановки.

К тому же есть очень большой, но никаким образом неразрешимый минус статичной типизации - все данные поступаемые извне невозможно проверить статично. Для этого придется добавлять тайпчек в рантайм. Для говноязыков, типа js, придется создавать функции-предикаты и оборачивать ими input-эффекты. Для языков с встроенной сильной системой типов, можно обойтись и нативным для этого языка тайпчеком.

Важно так же отметить, что Yupiel - гибкая штука. Она не накладывает никаких ограничений на код. Нормально делай - нормально будет.

К примеру, для надежной системы нужно соблюсти следующие паттерны:

- Отделить выражения и эффекты.
Не допустить конструкции вида ‹print(x) + print(print(y))›
Есть выражения, которые что-то возвращают, а есть действия/эффекты, которые что-то делают, но сами ничего не возвращают. Взболтать но не смешивать.

- Запретить общую рекурсию.
Если в Source-язык не может в общую рекурсию, то есть четкие гарантии того, что твой код не упадет в бесконечную петлю.
Используй только структурную рекурсию над конструкторами, и соответствующие комбинаторы для этого.

Аноним OP 05/05/21 Срд 03:51:51 #14 №2019822 
>>2019801
Lisp вообще не про это.

Первое - все лиспы имеют рантайм. Нет лиспа без рантайма. Это сразу выносит на нет возможности бесшовной транспиляции.

Второе - лисп, как и все остальные языки, ограничен синтаксисом, а именно s-exp. Если начнешь расширять s-exp кастомным парсером, то просто создашь ограниченную версию Yupiel.

Третье - лисп это язык (хоть и с мощным метапрограммированием). Yupiel - это метаязык. Как EBNF.
Аноним 05/05/21 Срд 08:38:43 #15 №2019879 
>>2019794
Довольно красивая девочка...
Аноним OP 05/05/21 Срд 08:40:10 #16 №2019880 
>>2019879
А то.
Аноним 05/05/21 Срд 10:13:02 #17 №2019934 
>>2019590
Грамматику нулевого уровня по Хомскому, если быть точнее.
Аноним OP 05/05/21 Срд 10:46:10 #18 №2019999 
>>2019934
Несешь бред. Грамматика нулевого уровня типа Semi-Thue это иная, очень упрощённая концепция, и что важно неюзабельная концепция. Погугли Thue lang. Yupiel использует CFG (Context Free Grammar), а это нихуя не нулевой уровень.
Аноним 05/05/21 Срд 10:59:06 #19 №2020045 
>>2019999
> Pattern => Replacement
У тебя нет ни ограничения по длине слов, а значит это уже не уровень 1, и хотя про уровень 2 уже нельзя говорить, у тебя

> Pattern - набор символов и нетерменалов.
нет ограничений по нетерминалам слева, какой нахуй контекст фри граммар.

В любом случае, советую почитать про нормальный алгоритм Маркова, мб, ты переизобретаешь велосипед, только корявый.
Аноним OP 05/05/21 Срд 11:07:20 #20 №2020062 
>>2020045
> нет ограничений по нетерминалам слева, какой нахуй контекст фри граммар.
Реплейсмент идет ровно до \n.
Аноним OP 05/05/21 Срд 11:08:23 #21 №2020064 
>>2020045
> алгоритм Маркова
Та же хуйня, что и система Semi-Thue, только в профиль. Ты сам на них программировать пробовал?
Аноним OP 05/05/21 Срд 11:29:25 #22 №2020095 
>>2020045
> нет ограничений по нетерминалам слева, какой нахуй контекст фри граммар.
В случае паттерна, исключением из символов является соответственно (=>). Если нужно использовать (=>) как символ используй экранирование (\=>). Тоже касается табов (\t), перевод строки (\n). Так же, для удобства один символ пробела (" ") считается за (whitespace+).
Т.е паттерн "print x" соответствует "print x", так и "print x".
Аноним 05/05/21 Срд 12:40:12 #23 №2020182 
Что читать, чтобы оперировать такими же терминами как вы?
Аноним OP 05/05/21 Срд 15:55:08 #24 №2020465 
>>2020182
Как минимум Википедию. Важно самому всё пробовать и разбираться.
Аноним 05/05/21 Срд 15:59:43 #25 №2020475 
>>2020465
Так а что гуглить то вообще?
Аноним OP 05/05/21 Срд 16:37:45 #26 №2020521 
>>2020475
Для понимания треда:
- Полнота по Тьюрингу.
- Иерархия Хомского.
- Система переписывания.
- Парсинг.
- Алгоритм Маркова и Semi-Thue (Грамматики типа 0).
- Метапрограммирование
Аноним 06/05/21 Чтв 02:57:21 #27 №2021075 
>>2020095
Ииииии, мы изобрели s-expressions.

>>2019822
Твой яп наверное не в вакууме работает а в каком-то вычислительном устройстве "рантайме".
С точки зрения теории яп все реальные языки имеют рантайм.
И уже поэтому твои заявления мягко говоря странные.
Аноним OP 06/05/21 Чтв 09:24:56 #28 №2021153 
>>2021075
> Ииииии, мы изобрели s-expressions.
Я действительно не понимаю где тут связь.

Чтобы вы поняли, что такое Юпиэль, я приведу пример программы.

# модуль HelloWorld.ypl

Effect :: say |n : Note|! => console.log("|Hi World|")
Letter :: |x : or C D E F G B A|
Octave :: |x : 1 2 3 4 5 6 7 8|
Note :: |l : Letter||o : Octave| => note("|l|", |o|)

# source source.txt
say C4!

# после запуска в консоли "yupiel -m HelloWorld -s source.txt -t target.js" в папочке с проектом появится target.js с таким содержанием:
console.log(note("C", 4))

Теперь понятно, что такое Юпиэль?

> Твой яп наверное не в вакууме работает а в каком-то вычислительном устройстве "рантайме".
Хех, у него действительно нет рантайма. Юпиэль не знает ни о операции (+), ни о IO. Юпиэль занимается транспиляцией только и всё, соответственно "паразитируя" на других языках. Как в примере выше. Используется встроенная в js console.log. Можно транслировать в какой хочешь язык.
Аноним 06/05/21 Чтв 12:46:58 #29 №2021398 
>>2021153
И в чём основное преимущество такого подхода перед обычными языками? Только сформулируй по делу самый главный тезис
Аноним OP 06/05/21 Чтв 14:08:30 #30 №2021516 
>>2021398
> И в чём основное преимущество такого подхода перед обычными языками?
Всё предельно просто - тотальная универсальность. Yupiel можно использовать буквально везде. Это всё сочетается с тем, что ты делаешь язык под код, а не код под язык. Можно писать действительно человеко-читаемый код на языке который больше подходит задаче проекта, чем какой-либо язык общего назначения.

Нет проблем с производительностью самих DSL. Можешь транслировать либо в C, либо в какой-нибудь Python, или даже в ASM. Производительность зависит от выбранного Target и от прямости рук самого программиста.
Аноним 06/05/21 Чтв 20:03:26 #31 №2022089 
>>2019820
спасибо за ответ, ОП.
Извини, что я плохо во всём таком разбираюсь. У меня есть только хотелки сумелок нет

Хотелка 0 (?):
Мне всё-таки кажется что я хочу корректный таргет. Понятно, что source программу я не смогу запустить, а только таргет. Если некорректно был написан сорс, то запуск таргета может выдать непонятную балалайку в консоль и ищи свищи где в сорсе ошибка. Там же будет в этом юпиэле тайп инфиренс, хиндли милнер вот это всё? Я правильно понимаю, что нормальные сообщения об ошибках невозможно получить, так как это проблема останова уже?

Хотелка 1:
Так как это языко-ориентированный язык, хочу писать собственные DSLы (например JSON-подобные (в которых будут в том числе enumerable типы полей)), хочу под каждый такой dsl сгенерированный language server, чтобы в редакторе мне подсказочки выдавало при написании на таком dsl, и говорило валидный у меня файл или невалидный, выдавало где ошибочки. DSL безо всяких вычислений, чисто декларативная простыня чтобы для конфигов. Сможет ли юпиэль в такое?
Я знаю существует Xtext и Jetbrains MPS. Но они выглядят всратыми, даже лень осиливать такое. Кроме того они требуют целые IDE.

Хотелка 2:
хочу писать и запускать домэйн специфик стэйт машины. Xtext такое кажется умеет

Вопрос:
Сущестует ли что-то более лайтвэйт на рынке чем xtext и mps? Просто лень эти читать простыни из документации для того чтобы написать dsl уровня "пук-среньк"

Похвалить:
У юпиэль отличная маркетинговая стратегия: собирать лидов на три строчки синтаксиса
Аноним OP 06/05/21 Чтв 21:02:11 #32 №2022124 
>>2022089
> Хотелка 0 (?):
Надо еще думать о возможности создавать прозрачный для кода дебаг. Сильной стороной Yupiel является (будет) прозрачная встраиваемость. Что если в рантайме появился эксепшен? Как фиксить? Над этим стоить думать. Решением может быть:
- На этапе создания DSL: юнит-тесты языка.
- На этапе использования DSL: зависимые типы.

> Хотелка 1:
Будет поддержка Yupiel в каких-нибудь VSCode. Если где-то появилась синтаксическая ошибка, редактор пометит. Для всех остальных фич редакторов не может быть универсального решения. Можно только создать универсальный формат для написания документации, откуда его можно будет транслировать в специфичный формат редактора.

> Вопрос:
Ну, я знаю Racket. Но там тоже ахуеешь всю документацию языка читать.

Единственным решением является, ВНЕЗАПНО, Юпиэль. Не просто так я её решил создать. Если бы был, хотя бы даже шизотреический, язык с свойствами схожими с Юпиэль, то мысль о создании этой утилиты у меня даже бы не появилась.

> У юпиэль отличная маркетинговая стратегия: собирать лидов на три строчки синтаксиса
Хех, это да. Лиды делают DSL, джуны на этих DSL пишут.
Аноним 06/05/21 Чтв 22:52:33 #33 №2022231 
>>2021153
> Хех, у него действительно нет рантайма. Юпиэль не знает ни о операции (+), ни о IO. Юпиэль занимается транспиляцией только и всё
Это слишком тупой троллинг.
х86 цп знает что такое транспиляция? А +- он знает. Так КАК твой дупель делает транспиляцию на железе с +- и без транспиляции?

Ты на какой доске вообще решил дерьма в уши людям лить придурок?
Аноним 06/05/21 Чтв 22:55:42 #34 №2022235 
>>2021153
> Я действительно не понимаю где тут связь.
Учи лисп.
Аноним OP 06/05/21 Чтв 23:07:14 #35 №2022243 
>>2022231
Ты компиляцию от рантайма отличаешь? Ясен хуй, что транспилятор/компилятор это программа, которая запускается на компьютере. Однако с рантаймом это не связано. Есть этап компиляции/транспиляции, есть рантайм. Yupiel занимается только транспиляцией. Что там в рантайме произойдет уже не забота Юпиэль, а забота какого-то другого компилятора/интерпретатора (V8, ghc, python, к примеру).

>>2022235
> Учи лисп.
Чел, я пишу прототип Yupiel на Racket.
Лисп и Yupiel это совершенно разные языки.
Ты где вообще взаимосвязь нашел?
Аноним OP 06/05/21 Чтв 23:23:40 #36 №2022258 
74Rm5ct6Ybw.jpg
>>2022235
Если пикрилейтед для тебя лисп - не знаю, что тебе сказать.
Аноним 07/05/21 Птн 02:42:50 #37 №2022433 
>>2022258
Выглядит как типичный лисп.

>>2022243
> Чел, я пишу прототип Yupiel на Racket.
Ты используешь лисп для создания dsl чтобы сделать dsl для создания dsl.

> Ты компиляцию от рантайма отличаешь?
Окей, я немного протупил.
Так есть лиспы компилируемые в С, и что теперь?

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

>>2021153
По-моему у тебя ошибка в коде.

Интересно как в юпеле записать что в случае чисел от 10 до 20 делать одно, а в случае от 21до 23 другое. Ну например это часть имени функции - делать21 например.

Или как простейшую типизацию описать.
Аноним OP 07/05/21 Птн 08:35:04 #38 №2022496 
lXVmHtWpPNo.jpg
>>2022433
> Но ты реально лисп переизобретаешь
Блядь. Дай хоть один аргумент, почему Yupiel это Lisp?

> Интересно как в юпеле записать что в случае чисел от 10 до 20 делать одно
Сначала опишем лямбда-терм, будем использовать JS как таргет.

Lambda |A| -> |B| :: λ |v : Var| . |e : define |v| as |A| in |e : |B||| => ((|v|) => |e|)

Define |Pattern| as |Type1| in |Expr : Type2| определяет правило |Type1| для паттерна локально для выражения |Expr|.

Отлично. Теперь определим функции (>) и (<).

Boolean :: |Number| > |Number|
Boolean :: |Number| > |Number|

Теперь определим функцию (if):
|A| or |B| :: if |e : Boolean| then |A : Expr| else |B : Expr|

Теперь определим (and):
Boolean :: |Boolean| and |Boolean|

Определим дунофинг:
Nothing :: do nothing => null

Ну, а теперь выполняем то, что просил.
λ x . if x > 10 and x < 20 then do nothing else do nothing


Конечно, правила можно было бы сделать рекурсивными. Тогда Yupiel было Тьюринг-полной, и пикрилейтед-код был бы допустимым в Yupiel. Однако, хоть пикрилейтед невероятно элегантен, если слишком много «против» против рекурсивных правил.
Аноним 07/05/21 Птн 09:13:06 #39 №2022516 
>>2019822
> Первое - все лиспы имеют рантайм. Нет лиспа без рантайма. Это сразу выносит на нет возможности бесшовной транспиляции.
Есть лиспы, которые паразитируют транспилируются в другие языки, та же Clojure, Fennel.
Аноним 07/05/21 Птн 10:05:04 #40 №2022544 
>>2021153
Пиздос, а не легче самим ручками написать в .js файле console.log чем описывать его в каком то юпель несколькими строками кода, которые ещё и хуй поймёшь как работают
Аноним OP 07/05/21 Птн 10:14:46 #41 №2022555 
>>2022544
> Пиздос, а не легче самим ручками написать в .js файле console.log
Это просто пример. Понятное дело, Yupiel нужно для простого создания DSL.
Аноним 07/05/21 Птн 10:23:29 #42 №2022563 
>В языке есть только одна конструкция - правило. Вся программа на Юпиель представляет из себя список правил вида: Type :: Pattern => Replacement или Type :: Pattern
>первый пример: какие-то стрелки, ООП
Быстро ты сломался, как и твой недо-пролог с уебищной парадигмой.
Аноним OP 07/05/21 Птн 10:30:28 #43 №2022571 
>>2022563
> ООП
Чел, у тебя каша в голове. Какой еще ООП? Ты где его увидел?
Да и прологом Yupiel не является, хотя имеется логический вывод (переменные логические) для того чтобы разрешать типы.

> какие-то стрелки
Сначала изучи Term Rewriting. Yupiel это про Term Rewriting. Когда познаешь Лямбду и перезапись терминов, тогда приходи.
Аноним 07/05/21 Птн 11:25:25 #44 №2022683 
>>2019584 (OP)
Ты переизобрел алгоритм маркова и назвал его своим ЯП?
Аноним OP 07/05/21 Птн 12:00:05 #45 №2022746 
>>2022683
Алгоритм Маркова это совершенно иная вещь, сколько раз объяснять.
В Нормальном Алгоритме Маркова паттерны рассматриваются по полному точному соответствию. То есть в алгоритме Маркова у правил нет параметров и переменных.
Простой пример:
Пусть будет правило (a ->. b), тогда применив его к (aab) мы получим (bbb)
Но возьмем задачку посложнее:
Написать такую функцию, которая меняла свои аргументы местами: (swap x y) -> (swap y x).
В алгоритме Маркова это невозможно выполнить очевидным способом, потому что нет понятия о переменных и параметрах функций.
Алгоритм Маркова это Тьюринг-полная грамматика, который важен так же как и брейнфак.

Напротив, Yupiel не является Тьюринг-полной (по понятной причине). У правил Yupiel есть параметры, и с помощью их можно обрабатывать конечные рекурсивные структуры, что делает их CFG.
Аноним 07/05/21 Птн 13:01:33 #46 №2022867 
>>2022124

>X0:
>Решением может быть:
>- На этапе использования DSL: зависимые типы.
вот это пожалуйста. можно? голосую за зависимые типы

>X1:
>Будет поддержка Yupiel в каких-нибудь VSCode.
Требуется поддержка не самого юпиел в вскод а автоматическая поддержка созданного dsl. Понятно, что скорее всего одним ypl не обойтись
надо вот так чтоб:
https://youtu.be/5WA8kCdg6Ek?t=997
и как-то так
https://youtu.be/ESRk7NmCDFA?t=608

>Хех, это да. Лиды делают DSL, джуны на этих DSL пишут.
I mean https://en.wikipedia.org/wiki/Lead_generation


> Racket
>я пишу прототип Yupiel на Racket.
А пакеж сорсы. Интересно
Аноним OP 07/05/21 Птн 19:50:39 #47 №2023369 
>>2022867
> Требуется поддержка не самого юпиел в вскод а автоматическая поддержка созданного dsl
А в чем принципиальная проблема? Не всё сразу, конечно. Но автоматизация всей рутины, это то, чем должен заниматься программист в первую очередь.
> А пакеж сорсы.
К сожалению, оставил зарядку от ноута в общаге. Сам иногда удивляюсь своей неряшливости. Однако, истины ради, не сказать, что я там успел что-то значимое сделать. Я сначала хотел адаптировать Nearley-parser для своих задач, но это сложнее (хотя прототип почти рабочий и хеллоуворд отрабатывает), проще самому Earley алгоритм имплементировать в Racket.
Аноним 07/05/21 Птн 22:13:23 #48 №2023480 
>>2019584 (OP)
Еее, хоть что-то интересное на этой доске появилось.
Аноним 08/05/21 Суб 10:12:42 #49 №2023789 
16201495808480.png
16058589755560.jpg
16183266717450.jpg
Оп изобретатель велосипеда. Транскомпилятор, делающий ровно то, что описано в оп посте, мало того что давно существует, но ещё и не требует для своей работы понятия специального языка программирования. В общем, это поридж-тред, официально. Ах да, забыл сказать, выше я говорю о facebook transcoder.
/поридж-тред
Аноним 08/05/21 Суб 10:32:30 #50 №2023802 
Добавлю, что оп "изобрел" т.н rule-based transpiler, которые не только менее эффективны, чем пейсбуковский транскодер, но и требуют от пользователя знаний в обеих (сорс и таргет) языках, чего нет в транскодере.
Аноним OP 08/05/21 Суб 10:38:01 #51 №2023804 
15654776112030.jpg
>>2023789
> говно на нейронках
Ты серьезно? Ты вот сейчас реально серьезно, блядь? Мне даже не хочется объяснять тебе, почему твое говно - говно, но так уж и быть, объясню.

Во-первых, нейронки не предназначены для прувинга. Нейронка - черный ящик, допускающий неточность.
Во-вторых, нейронка не универсальна. Её надо будет дообучать, чтобы она смогла хоть как-то что-то да выдать.
В-третих, transcoder нужен для транспиляции существующих языков программирования. Ты не сможешь использовать его для создания DSL (а Yupiel создаётся именно для этого). Для нейрнок требуется нормальный такой датасет, а где ты его найдешь для еще не созданного DSL?

Гонору много, а сам нихуя не разумеет.
Аноним 08/05/21 Суб 11:04:10 #52 №2023825 
>>2023804
> DSL
Боярское программирование, лол. Что тебе мешает определить что угодно через дефайн и использовать для любой предметной области любой язык общего назначения? Насчёт неточности нейросетей, зря ты веруешь, что rule-based transpiler будет сильно точнее.
Аноним 08/05/21 Суб 11:10:30 #53 №2023832 
>>2019584 (OP)
Ты только что PEG.
https://en.wikipedia.org/wiki/Parsing_expression_grammar
Аноним OP 08/05/21 Суб 11:18:05 #54 №2023841 
>>2023825
> Что тебе мешает определить что угодно через дефайн
Ты про #define? Это достаточно хреновый инструмент, на самом деле.
> предметной области любой язык общего назначения?
Который, естественно, привязан к своей экосистеме? Нет, спасибо.
> Насчёт неточности нейросетей, зря ты веруешь, что rule-based transpiler будет сильно точнее.
"Rule-based" означает, что система завязана на точной математической логике. Я даже планирую добавить в STD Yupiel рационалы, вместо дырявых float.

>>2023832
> Ты только что PEG.
Так Юпиэль это CFG, я уже весь тред это говорю. Можно сказать, что Yupiel это продукт, как NPM к примеру. Пакетные менеджеры и до этого существовали, никто же не говорит, что NPM Inc. создало велосипед. Когда создавалась Scala никто не говорил, что разработчики Scala изобрели ФП, тоже самое с Clojure и Racket.

Алсо, Yupiel это не PEG. В PEG невозможны создания грамматик с левой рекурсивной частью типа: Expr -> Expr "*" Expr, а в Yupiel возможны, потому что под капотом Earley, а не PEG.
Аноним 09/05/21 Вск 04:07:01 #55 №2025105 
>>2023841
> потому что под капотом Earley, а не PEG.
Лисп у тебя под капотом.
Аноним OP 09/05/21 Вск 10:31:22 #56 №2025269 
>>2025105
> Лисп у тебя под капотом.
А у JS под капотом C++. Nani ka?
Аноним 09/05/21 Вск 14:59:37 #57 №2025675 
ОП, давай скорей пиши. Уже давно такое надо. Сразу его в индустриальные задачи и будем монетизировать бабло грести лопатами. DSLы будем писать для домохозяек. DSLы для управления башенными кранами, авторучками и газовыми горелками. DSL чтобы выйти из дома, открыть дверь, потушить свет в коридоре. DSLы в терминах бизнес сущностей, чтобы мышкой программировать серверлес приложения в реальном времени разворачиваемые на облаке. ДСЛ для неба и даже для велосипеда
Аноним 09/05/21 Вск 15:03:27 #58 №2025679 
>>2025675
DSL для DSL'ей забыл
Аноним 09/05/21 Вск 15:03:52 #59 №2025680 
Я так понимаю пока что:

LispMacro :: s-exp --> s-exp
YPL :: ypl-expression --> any_target
Аноним OP 09/05/21 Вск 15:20:58 #60 №2025709 
>>2025679
Ты только что Yupiel. Правда у Ypl как DSL крайне широкое применение.
Аноним 11/05/21 Втр 03:57:55 #61 №2027256 
>>2025680
> Я так понимаю пока что:

> LispMacro :: s-exp --> s-exp
> YPL :: ypl-expression --> any_target

Нет.
any_target + YPL :: ypl-expression --> any_target
Аноним 11/05/21 Втр 09:03:21 #62 №2027295 
>>2019584 (OP)
Зачем ты изобрел лисп?
Аноним OP 11/05/21 Втр 09:29:11 #63 №2027308 
>>2027295
Почитай тред. Устал объяснять.
Аноним 11/05/21 Втр 11:59:58 #64 №2027401 
>>2027308
Лисп изобретать не устал?
Аноним 12/05/21 Срд 01:33:06 #65 №2028085 
>>2027295
как в лисп ты заведёшь any_target?
Аноним 12/05/21 Срд 03:21:17 #66 №2028118 
Много умных слов, ничего не понял, но по-моему это можно сделать быстрее регулярками на перле.
мимовкатыш
Аноним OP 12/05/21 Срд 06:11:49 #67 №2028152 
>>2028118
> можно сделать быстрее регулярками на перле
Если смешать регулярки с перлом. Но там ебейшая темная магия происходит. И нет, не быстрее, потому что грамматики могут быть весьма сложными, а твой код будет полон синтаксического мусора. Как в своей грамматике разбираться будешь?
Аноним 12/05/21 Срд 08:28:09 #68 №2028186 
>>2019584 (OP)
Так и не понял, зачем автор изобрёл ещё один лисп.
Аноним 12/05/21 Срд 09:51:37 #69 №2028216 
>>2020521
А пока вы читаете ваши хуерархии хуёмского, нормальные люди зарабатывают деньги на Javascript. Поссал на задротов.
Аноним 12/05/21 Срд 15:20:52 #70 №2028582 
>>2028216
Вебмакака, спок.
Аноним 12/05/21 Срд 15:41:14 #71 №2028611 
2021-05-12-154101688x246scrot.png
>>2028085
Очень просто.
Аноним 12/05/21 Срд 20:59:53 #72 №2028916 
Всем привет, с вами Гоша Дударь, сегодня мы будем учить юпиль за 1 час
Аноним 12/05/21 Срд 21:13:17 #73 №2028934 
>>2028916
Пока вы пытаетесь сделать POC я уже все на жс написал
Аноним 13/05/21 Чтв 01:07:50 #74 №2029121 
B
Аноним 13/05/21 Чтв 01:12:52 #75 №2029123 
POC делается за вечер https://pastebin.com/YQLp47gT по внятному описанию. У ОПа какая-то каша в синтаксисе >>2019584 (OP), такое ощущение, что он примеры на ходу придумывает. Вот это >>2022496 я вообще не знаю, как воспринимать.
Аноним 13/05/21 Чтв 01:15:03 #76 №2029126 
Не >>2019584 (OP), а >>2021153.
Аноним 13/05/21 Чтв 01:33:15 #77 №2029138 
>>2029123
Мда, будь я ОПом мне было бы очень обидно и стыдно - когда твою идею реализуют за вечер, пока ты дрочишься с ракетом и споришь в треде...
Аноним OP 13/05/21 Чтв 11:09:51 #78 №2029351 
>>2029123
Чел, у тебя есть один огромных размеров прокол. У тебя там синтаксис должен соответствовать синтаксису хаскелла.
Аноним OP 13/05/21 Чтв 11:12:57 #79 №2029354 
>>2029351
Аннет, ты парсишь правила через parsec.
Аноним OP 13/05/21 Чтв 11:14:57 #80 №2029356 
>>2029138
> пока ты дрочишься с ракетом
Все эти дни я смотрел аниме и бухал.
Аноним 13/05/21 Чтв 13:41:24 #81 №2029504 
>>2029351
Оно вообще делается на голом Хаскеле:

import Text.Parsec hiding (letter)
main = either (putStrLn . show) (putStrLn) . parse effect "-" =<< getContents

effect = do { string "say"; spaces; n <- note; string "!"; () ==> "console.log(" ++ n ++ ")" }
letter = l oneOf "CDEFGBA"
octave = l oneOf "12345678"
note = do { l <- letter; o <- octave; () ==> "note(\"" ++ l ++ "\", " ++ o ++ ")" }

l p a = do { c <- p a; return $ c:[] }
infixl 0 ==>
_ ==> b = return b

Да вообще на любых парсер-комбинаторах.

Проблема всех этих метакомпиляторов в тулинге. Начиная от внятных сообщений об ошибках и заканчивая поддержкой редакторов. Что в Yacc, что в C preprocessor, что в шаблонизаторах, что в других подобных. Задумка ОПа, кстати, больше всего похожа на OMeta. У которой была та же проблема с тулингом, и которая в итоге выродилась в никому ненужный Ohm. JetBrains придумали MPS и вроде сделали автогенерацию тулинга, но у них там вообще всё своё, включая уёбищный редактор. Впрочем, я давно его смотрел, не знаю, как сейчас.
Аноним 13/05/21 Чтв 21:22:57 #82 №2029904 
Давайте уже быстрей пишите. Хоть на хаскеле хоть на чём
Аноним 14/05/21 Птн 01:57:54 #83 №2030053 
Если все равно нужно все писать вручную, тогда не ясно, чем это >>2022496 лучше foreign function interface в idris'е.
Аноним OP 14/05/21 Птн 06:17:13 #84 №2030101 
>>2030053
> Если все равно нужно все писать вручную, тогда не ясно, чем это
Чтобы сделать ПРАВИЛЬНЫЙ язык, даже если он транспилируется в НЕправильный язык (C++, JS).
Аноним 14/05/21 Птн 15:57:27 #85 №2030524 
>>2029904
Уже написали, см. >>2029504
Аноним 20/05/21 Чтв 01:18:17 #86 №2036052 
ОП НУ ШТО? ГДЕ?
Аноним 20/05/21 Чтв 01:22:14 #87 №2036055 
>>2019820
>Тогда определение операции (+) над Natural будет очевидным:
>Natural :: |x : Natural| + |y : Natural| => (+ |x| |y|)


сразу видно академического опущенца, ОЧЕВИДНО блять ему, ну давай напиши так программу строк тыща из этого очевидного кода
Аноним 20/05/21 Чтв 09:01:07 #88 №2036185 
>>2019820
>Lisp вообще не про это.
>Natural :: |x : Natural| + |y : Natural| => (+ |x| |y|)
comments powered by Disqus