| 1.1, Аноним (-), 14:13, 12/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| –3 +/– | |
> сама техника может быть использована и просто в си-препроцессоре.
Поподробнее, как это на си? Функциональщина на си? Это был бы номер, в чемпионате перверсий от айти это было бы где-то в призовых местах :))
| | |
| |
| 2.5, Жироватт (ok), 14:17, 12/03/2026 [^] [^^] [^^^] [ответить]
| +4 +/– |
Потому, что могут.
Осталось сделать заголовочник для моноидов и вообще, транспилятор из хаскелла в С, с сохранением монад
| | |
| |
| 3.78, Аноним (78), 18:07, 12/03/2026 [^] [^^] [^^^] [ответить]
| +3 +/– |
Это всё интересно, но статья похожа на демонстрацию какого-то инструмента с рукояткой в розовую полосочку, но совершенно непонятно, что им делать.
| | |
| |
| 4.128, Жироватт (ok), 12:35, 13/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Интересно, но какой-то куцеватый раздел SupportedTypes
Надо бы поглядеть, какие есть ограничения реально, а не "есть подмножество хаскелла, которое мы можем нормально раскрутить в императивный С"
| | |
|
|
| 2.8, Аноним (8), 14:22, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Про технику это не про do-нотацию. Там другая техника. Она про то, как посреди произвольного кода вставлять ключевые слова для макросного DSL. И уже на основе этого можно делать другие DSL.
| | |
| |
| 3.9, Аноним (8), 14:27, 12/03/2026 [^] [^^] [^^^] [ответить]
| –1 +/– |
(если просто определить макросы напрямую, то парсинг будет сильно ограничен, тогда как с этой техникой оно становится намного гибке)
| | |
|
| |
| 3.81, Аноним (8), 18:58, 12/03/2026 [^] [^^] [^^^] [ответить]
| +1 +/– |
Вот только тут пример лишь с maybe (с ним и корутины справятся неплохо). Но есть ведь и другие монады. Та же монада List. И её тоже можно использовать с этим DSL. С монадами, которые приостанавливают выполнение, немного сложнее, но тоже можно использовать, в репе есть пример с генератором (хотя там и не монады).
| | |
| 3.93, Аноним (8), 20:06, 12/03/2026 [^] [^^] [^^^] [ответить]
| +1 +/– |
Там суть техники не в этом. Тут ещё дело в том, что посреди LET IS может быть произвольный код. Так ещё и WHILE есть с BREAK и CONTINUE, IF-ы.
| | |
| |
| 4.114, Джон Титор (ok), 11:02, 13/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
> Там суть техники не в этом. Тут ещё дело в том, что
> посреди LET IS может быть произвольный код. Так ещё и WHILE
> есть с BREAK и CONTINUE, IF-ы.
Ой, да это притянуто за уши аргумент. Предлагаю посмотреть вот этот код:
https://gitflic.ru/project/cruso/tor/blob/?file=main.c&branch=master
Начиная со строки 65. Вы знаете, можно и так писать на С. Вы знаете, если бы можно было как-то переделывать сами препроцессоры на С, из него можно было бы сделать метаязык причем весьма разнообразно. На метаязыке можно было бы сделать свой язык. Я понимаю что вы можете не доверять чужим препроцессорам, но своим то можно? Вы ведь можете перейти по ссылке которая в статье по слову написал и открыть исходный код, например для do let is: https://github.com/j4niwzis/do_let_is/blob/main/include/do_let_is/do_let_is.h
и разобрать. А дальше сами решаете что вам важнее - более читабельный код или вместо препроцессоров самому писать такой код который вы хотите, но может менее читабельный. Я вообще не программист С - мне как-то всё-равно как там написано, более важно что в итоге оно там делает. Но читать и писать на С в целом умею. Спасибо школе, институту.
| | |
| |
| 5.115, Аноним (8), 11:29, 13/03/2026 [^] [^^] [^^^] [ответить]
| +1 +/– |
Так этот код в do_let_is репе мой. Там макросы на порядок сложнее, чем самые примитивные. Там LET ... IS(...) разрезает поток токенов на 2 - ), _LET_IS(..., (...)), _CODE(. Так создаётся список меток. А весь остальной код оказывается в метках _CODE. И потом уже пройтись по всему списку меток через рекурсию и уже разобрать так.
| | |
| |
| 6.118, Джон Титор (ok), 11:46, 13/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
> Так этот код в do_let_is репе мой. Там макросы на порядок сложнее,
> чем самые примитивные. Там LET ... IS(...) разрезает поток токенов на
> 2 - ), _LET_IS(..., (...)), _CODE(. Так создаётся список меток. А
> весь остальной код оказывается в метках _CODE. И потом уже пройтись
> по всему списку меток через рекурсию и уже разобрать так.
А, вы просто хотели дополнить, а не раскритиковать то что написано, ну я вам плюсик поставил.
| | |
| 6.119, Джон Титор (ok), 11:55, 13/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Я вам рекомендую лучше описывать проект в статье, потому что работы проделано много, а статья маленькая и можно было больше написать - больше примеров, разнообразные варианты использования. Сейчас же есть множество ИИ, которые могут в этом помочь. А то что написано можно как-то по одному воспринимать и какие-то нюансы пропустить. Мы впервые видим этот код и хотим разобраться. Естественно что у многих первое что придёт в голову - скепсис, это нормальная защитная реакция людей. Но вы не волнуйтесь, я вижу что многие люди оценили, просто это реактивное мышление - сначала оно вызывает отторжение что есть что-то новое, что кто-то лучше, потом вызовет принятие, но об этом уже не напишут. Просто тихо будут использовать.
| | |
| |
| 7.127, Аноним (8), 12:32, 13/03/2026 [^] [^^] [^^^] [ответить] | +/– | gt оверквотинг удален Так в понедельник выйдет подробная статья на хабре про в... большой текст свёрнут, показать | | |
|
|
|
|
|
|
| 1.10, Аноним (10), 14:28, 12/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| –6 +/– | |
> сама техника может быть использована и просто в си-препроцессоре.
Чего? do-нотация в СИ?
Они только недавно в C23 смогли осилить Predefined Boolean constants.
А вы предлагаете техники из функциональных языков.
Пожалейте йододефицитных, это ж им мозг сломает))
| | |
| |
| 2.14, Аноним (8), 14:33, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Техника это не сама do-нотация, а техника парсинга. Чтобы делать другие DSL. Но можно попробовать и do-нотацию сделать попробовать, но там немного другой вид будет (т.к. в си лямбд нет обычно, придется через макросы разбивать на несколько функций и строить цепочки вызовов, так ещё и захваты переменных придётся руками прописывать)
| | |
| |
| 3.26, Аноним (26), 15:03, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
техника парсинга нафиг не нужна, есть ctll на основе шаблонов, а не на осонове макросов, уродующих AST самой программы, в результате чего написано одно, а делает программа другое, потому что шаблоны втихаря воруют исходник и меняют его на подделку.
| | |
| |
| 4.35, Аноним (8), 15:26, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Если бы всё было так просто... Шаблоны это, разумеется, хорошо (и в том репозитории они активно применяются), но могут то они далеко не всё. В таком виде (и в целом в юзабельном) do-нотацию на шаблонах не сделать. Там же гибрид шаблонов и макросов.
| | |
| 4.47, Аноним (47), 16:04, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Ого, не знал. У нас на работе как раз используют макросы, нужно будет поручить прекратить это.
| | |
|
|
| 2.28, Аноним (28), 15:08, 12/03/2026 [^] [^^] [^^^] [ответить]
| +1 +/– | |
> А вы предлагаете техники из функциональных языков.
А внутри все равно обычная императивщина - так проц работает, не умеет он в эти твои монады-шмонады. А подобные финты давно в сишке в препроцессоре используются, ты просто йододефицитный и не знаешь об этом.
| | |
| 2.70, Аноним (70), 17:30, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Да уж куда им, не то что вы, продвинутые - операцию на глаза через опу делаете.
| | |
| 2.111, Аноним (111), 10:23, 13/03/2026 [^] [^^] [^^^] [ответить]
| +1 +/– |
Во-первых, не Си, а Си-плюс-плюс. А во-вторых, Си десятилетиями обходился без "Predefined Boolean constants", а если кто-то без них не может - гнать такого от Си поганой метлой.
| | |
|
| |
| 2.17, Аноним (17), 14:50, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
они такого слова не знают! Надо говорить, успешной разгадки! :)
| | |
| |
| 3.103, Аноним (103), 03:28, 13/03/2026 [^] [^^] [^^^] [ответить]
| +2 +/– | |
Это отсылка к старой шутке, которую вам не удалось распарсить.
#define true (rand() > 10) // Happy debugging, suckers!
| | |
|
|
| |
| 2.21, Аноним (21), 14:54, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
А как определите такое и будет. Можно передавать весь последующий код в DO блоке в функцию как лямбду. Но изначально было придумано для монад. В std::optional bind это тот же and_then. На основе bind можно сделать генераторы, корутины, разные монады (и не только монады).
| | |
| 2.24, Аноним (28), 15:00, 12/03/2026 [^] [^^] [^^^] [ответить]
| +3 +/– |
Это чтоб путаться с bind() из libc - биндить сокет к транспортному порту.
| | |
| |
| 3.51, Аноним (17), 16:10, 12/03/2026 [^] [^^] [^^^] [ответить]
| –7 +/– |
это просто д*билы позикса используют в именах функций обобщенные многозначные термины (понятия). Там по факту должно было быть нечто bind_socket или socket_bind, лучше sys_socket_bind, что говорит о sys/socket.h.
| | |
| |
| 4.52, Аноним (28), 16:17, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Кто первый встал, того и тапки. Так что пусть плюсовики меняют имя на std::BindGeneratesAForwardingCallWrapperForAGivenFunctionOrCallableObject()
| | |
| |
| 5.55, Аноним (28), 16:21, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
А если без шуток, и в позиксе *билы, которые используют в именах функций обобщенные многозначные термины (понятия), то кто тогда коммитет плюсовиков, если они делают так же? По факту должно быть std::functional_bind, что говорит о <functional>
| | |
| |
| 6.56, Аноним (8), 16:22, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Так а тут в проекте используется и не std::bind. А другая функция. Там она определяется в неймспейсе doletis. И означает монадическое связывание
| | |
| |
| |
| |
| |
| |
| 11.91, Аноним (17), 19:47, 12/03/2026 [^] [^^] [^^^] [ответить] | –1 +/– | это идиотизм, никаких using в помине быть не должно, все должно быть явно и одно... текст свёрнут, показать | | |
|
|
|
|
|
|
| 5.92, Аноним (17), 19:51, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– | |
> Так что пусть плюсовики меняют имя на
Так они обречены писать так, когда два using-а столкнутся :) Суть то не в этом, а в использовании многозначного понятия (понятия приписываемое к разным сущностям) в качестве имени функции или переменного.
| | |
|
|
| 3.80, Аноним (80), 18:46, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– | |
Это чтоб путаться с bind() из libc
Они там внутри <sys/stat.h> сами себя путают. И struct stat и функция stat(), чтобы запоминать проще было ;)
| | |
|
| 2.105, Аноним (105), 05:51, 13/03/2026 [^] [^^] [^^^] [ответить]
| +/– | |
>и что такое bind?
Когда Связываешь две сущности через Цепочку действий, которые надо выполнить. В функциональных языках состояние переменной недопустимо (недостижимо), но оно необходимо существует. Есть только опосредованный доступ через функцию.
| | |
| |
| 3.106, Аноним (105), 05:54, 13/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Интерес к функциональным языкам подогревается наличием посредника. Данные пользователю вроде доступны, но могут лежать где угодно. Сущность скрыта.
| | |
|
|
| 1.25, Аноним (26), 15:01, 12/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| +7 +/– |
Начнём с того, что за использование макросов без острой на то необходимости и 100% невозможности сделать по-другому с переиспользованием кода (и всяки свистелки перделки вроде do-нотаци сюда не катят, если не хочешь писать на C++ как на C++, то сиди уже на своей сишке, за си головного мозга, когда на си переизобретают фичи C++ на основе макросов или бойлерплейта кстати тоже надо гнать из профессии) надо гнать из профессии с волчьим билетом. Я прекрасно знаю что ranges недоделаны и ни один компилятор их не умеет оптимизировать, именно поэтому такие фичи должны быть частью ядра языка, а не частью стандартной библиотеки, всё равно новая стандартная библиотека без интринсиков компилятора работать не будет, зачем тогда выпендриваться с шаблонным метапрограммированием, чтобы компиляция была помедленнее и чтобы километровые портянки получать? Такие вещи должны быть first-class citizens языка, разумеется кодить их реализацию надо не на самом языке, а на специальном DSLе, который к сишке имеет такое же отношение, как микрокод процессора (процессоры оказались по сути очень кастрированными FPGA, блин, хотеть полноценный FPGA с полной интеграцией в процессор с полноценной компиляцией программ напрямую в микрокод, а ещё больше хотеть современный аналог трансметы на coarse-grained reconfigurable architecture, где code morphing крутится на арсенид-галлиевом высокоскоростном горячем ядре, а дальше микрооперации через сеть с коммутацией пакетов топологии "звезда" раскидываются по вычислительным блокам на низкой тактовой частоте (но их дохрена параллельных, и по самому тонкому техпроцессу, и к каждому - HBM), но в обычном режиме сеть большую часть времени работает как систолический массив) к машинному коду.
| | |
| |
| 2.30, Аноним (19), 15:10, 12/03/2026 [^] [^^] [^^^] [ответить]
| +5 +/– |
согласен, еще надо unsafe из раст выпилить, не умеешь safe - не берись
| | |
| |
| 3.32, Аноним (-), 15:14, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– | |
> согласен, еще надо unsafe из раст выпилить, не умеешь safe - не берись
Заодно и всю системщину на Rust зарубите как раз. Ну или как вы "safe" допустим адрес в DMA автомат вообще можете загнать? Это вообще - за пределами понимания компилера.
| | |
| |
| 4.62, Аноним (19), 16:39, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
это был сарказм на предложение выпилить целый язык (препроцессор) из си
| | |
|
|
| 2.34, Аноним (8), 15:23, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Так эта do-нотация и сделана в первую очередь для C++, а на C в таком виде её не сделать (можно сделать в другом). Тут добавлена новая фича в C++, которой раньше в нём не было (корутины достаточно ограничены)
| | |
| |
| 3.42, аролп5 (?), 15:56, 12/03/2026 [^] [^^] [^^^] [ответить]
| +1 +/– |
В go - горутины
В Kotlin - корутины
В C++ - должны быть сирутины 😁
| | |
|
| |
| 3.89, Аноним (89), 19:39, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
На арсениде галлия технология должна быть отработана, на нём ещё чипы ещё в Cray 3 были.
| | |
| |
| 4.97, tkzv (ok), 20:38, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Вот только внедрение арсенид-галлиевых полупроводников страшно буксует. 40 лет назад всюду трубили, что они скоро сменят кремниевые, но с тех пор наизобретали новых материалов, которые понемногу вытеснили GaAs на 5-е место, если не дальше.
| | |
| |
| 5.104, Аноним (104), 05:21, 13/03/2026 [^] [^^] [^^^] [ответить] | +/– | Буксует-то буксует, но настолько же разработанных высокоскоростных альтернатив к... большой текст свёрнут, показать | | |
|
|
|
| 2.130, Аноним (130), 13:33, 13/03/2026 [^] [^^] [^^^] [ответить]
| +/– | |
> хотеть
Что за дибилизм выражать свои желания в инфинитиве? Ещё хуже, чем в третьем лице.
| | |
|
| 1.33, Аноним (39), 15:19, 12/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| +/– | |
> В представленном проекте реализована новая техника для парсинга DSL, что может поспособствовать созданию дальнейших DSL на препроцессоре C и C++.
Раз Торвальц не пускает C++ в ядро, то превратим этим способом C в C_with_classes для ядра.
| | |
| |
| 2.38, Аноним (38), 15:40, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Вангую что подобные выкрутасы Торвальдс тоже не пропустит. А если надо, то C++ он в ядро пустит. Но спонсоры увидели выгоду только в расте.
| | |
| |
| 3.123, Аноним (123), 12:15, 13/03/2026 [^] [^^] [^^^] [ответить]
| –1 +/– |
В линуксе не меньше вирусни чем в винде, хоть user space хоть kernel space
| | |
|
|
| |
| 2.102, Аноним (102), 00:59, 13/03/2026 [^] [^^] [^^^] [ответить]
| –1 +/– |
Я за 10 секунд забил это в чатжпт, он всё быстро и понятно объяснил.
| | |
| |
| 3.116, Аноним (8), 11:32, 13/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Чатжпт, по моему опыту, не уловливает главную идею кода, но улавливает всё остальное. Если объяснения чатгпт достаточны сразу для того, чтобы написать что-то подобное, то это ладно. А если нет?
| | |
|
|
| |
| 2.69, Джон Титор (ok), 16:59, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Да, классика жанра 😄
Perl с его $_, контекстами и цепочками операций — это фактически монадический стиль, просто никто так не называл.
А если смотреть шире — каждое поколение переизобретает одно и то же:
Perl — неявные монады через контекст и $_
Shell pipelines — | это буквально bind для потоков
jQuery — .then().filter().map() — монада над DOM
Promise/async-await — монада над асинхронностью, do-нотация в disguise
Rust ? — монада Either/Result, синтаксический сахар над bind
C макросы — вот это
И каждый раз разработчики говорят "мы не хотим теорию категорий, мы просто хотим удобный синтаксис" — и приходят ровно к тому же месту.
Хаскелисты на это смотрят с тихой улыбкой уже лет 30. 🙂
| | |
| |
| 3.84, Аноним (8), 19:06, 12/03/2026 [^] [^^] [^^^] [ответить]
| +1 +/– |
Так тут прямо как в хаскеле. Можно разные монады брать, а синтаксис один будет. Но тут не только монады можно, а вообще всё, у чего можно вызвать bind
| | |
|
|
| 1.48, Анлним (?), 16:05, 12/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| –1 +/– |
Препроцессор это как goto.
Путает, тяжело разбирать, разводит много хаков которые тяжело проверить.
И это одна из причин почему раст должен умереть.
| | |
| |
| 2.87, анон (?), 19:16, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
> Препроцессор это как goto.
> Путает, тяжело разбирать, разводит много хаков которые тяжело проверить.
> И это одна из причин почему раст должен умереть.
Потому что гладиолус или где?
У раста, если че, нет препроцессора.
| | |
| |
| 3.88, Аноним (8), 19:30, 12/03/2026 [^] [^^] [^^^] [ответить]
| +2 +/– |
У раста есть макросы. Которые тоже НЕ имеют доступа к семантике языка. Они пытаются притворяться, что информация об этом у них есть, но они только притворяются. Это всё равно текстоподстановка, ака препроцессор.
| | |
| |
| 4.99, анон (-), 22:29, 12/03/2026 [^] [^^] [^^^] [ответить]
| +1 +/– |
> У раста есть макросы. Которые тоже НЕ имеют доступа к семантике языка.
> Они пытаются притворяться, что информация об этом у них есть, но
> они только притворяются. Это всё равно текстоподстановка, ака препроцессор.
-
Ну-ну. Хоть бы в доку глянул, но не ... как на опеннете принято: прочитал и додумал, как оно там на самом деле 🤦:
--
However, unlike macros in C and other languages, Rust macros are expanded into abstract syntax trees,
--
Procedural macros allow you to run code at compile time that operates over Rust syntax, both consuming and producing Rust syntax. You can sort of think of procedural macros as functions from an AST to another AST.
| | |
| |
| 5.112, Аноним (8), 10:46, 13/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
AST в расте это НЕ AST у плюсах. У плюсовых компиляторов в AST есть все типы и прочее. У раста там только синтаксис и ничего более. Они не имеют доступа к типам и нормального доступа к семантике, только к синтаксису
| | |
|
| 4.100, Аноним (-), 23:08, 12/03/2026 [^] [^^] [^^^] [ответить]
| +1 +/– | |
> У раста есть макросы. Которые тоже НЕ имеют доступа к семантике языка. Они пытаются притворяться, что информация об этом у них есть, но они только притворяются. Это всё равно текстоподстановка, ака препроцессор.
Раст-макросы работают с AST‑деревом, их единственная связь с семантикой - способность сопоставлять группу токенов с конкретным типом мета‑переменной. Токены имеют место происхождения, и этой информации достаточно для гигиеничности.
| | |
| |
| 5.113, Аноним (8), 10:48, 13/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Вот именно. Больше связи с семантикой языка у них никакой. Они не имеют доступа к типам внутри языка. AST в расте это просто синтаксис. AST в плюсах же содержит и типы и всё прочее
| | |
|
|
|
| 2.90, Аноним (89), 19:42, 12/03/2026 [^] [^^] [^^^] [ответить]
| +1 +/– |
Препроцесор на порядки хуже goto. В коде с goto ты хотя-бы код видишь, а в коде с препроцессором #define true (rand() > 10) // happy debugging, suckers!
| | |
| |
| 3.98, Аноним (17), 21:45, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– | |
> Препроцесор на порядки хуже goto.
это вообще-то функция текстового редактора :)
> #define true (rand() > 10) // happy debugging, suckers!
Человек это машина, а машина это человек, понимаете?
| | |
|
| 2.125, Аноним (123), 12:21, 13/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
А ведь можно просто разобраться в ООП и DSL и понять что по сути это одно и тоже, и то и то отвечает на вопрос "Что делать?", а не "Как это сделать?", но тут думать нужно ведь
| | |
|
| 1.61, Rodegast (ok), 16:38, 12/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
> который работает как do-нотация из функциональных языков
Там монад нету, зачем им do-нотация?
| | |
| |
| 2.63, Аноним (8), 16:42, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
В std::optional с C++23 есть монадический интерфейс (and_then), в std::expected тоже. Вот и можно для них использовать do-нотацию. Можно и не только для них и не только для монад. В репе есть пример с генераторами, которые не через монады сделаны, но через do-нотацию.
| | |
| |
| 3.72, Rodegast (ok), 17:34, 12/03/2026 [^] [^^] [^^^] [ответить]
| –1 +/– |
> В std::optional с C++23 есть монадический интерфейс (and_then), в std::expected тоже
Зачем в императивном языке со строгой семантикой нужны монады?
| | |
| |
| |
| 5.95, Rodegast (ok), 20:13, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
> Потому что монады удобные на практике.
Вот только что бы их использовать почему то DSL нужен 😁
| | |
|
|
|
|
| 1.71, Аноним (70), 17:32, 12/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Когда функциональщики внезапно поняли что наделали дичи, они изобрели монады. И они молодцы. А те кто монады тянет в си подобные языки, их лечить надо.
| | |
| 1.101, Аноним83 (?), 00:09, 13/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| +/– | |
Нечитабельное и плохо понимабельное.
Я вот на C для LUA сделал куд более полезный макрос:
LUA_TABLE_FORECH(__L, __IDX)
чтобы по всем элементам таблицы по указанному индексу (относительный или абс) проходится.
| | |
| 1.109, user1985 (?), 09:13, 13/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
"Любая достаточно сложная программа на C или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp." Филип Гринспен.
| | |
| 1.121, Аноним (123), 12:10, 13/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Откройте для себя ООП в C++ или любом другом ЯП, это и есть DSL с отличной предметной абстракцией
| | |
| 1.126, Аноним (8), 12:22, 13/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| –1 +/– | |
> Энтузиаст
А ничего, что это делали несколько, просто в репозитории один контрибьютор?
| | |
|