| 1.1, Аноним (-), 14:13, 12/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| –2 +/– | |
> сама техника может быть использована и просто в си-препроцессоре.
Поподробнее, как это на си? Функциональщина на си? Это был бы номер, в чемпионате перверсий от айти это было бы где-то в призовых местах :))
| | |
| |
| 2.5, Жироватт (ok), 14:17, 12/03/2026 [^] [^^] [^^^] [ответить]
| +2 +/– |
Потому, что могут.
Осталось сделать заголовочник для моноидов и вообще, транспилятор из хаскелла в С, с сохранением монад
| | |
| |
| 3.78, Аноним (78), 18:07, 12/03/2026 [^] [^^] [^^^] [ответить]
| +1 +/– |
Это всё интересно, но статья похожа на демонстрацию какого-то инструмента с рукояткой в розовую полосочку, но совершенно непонятно, что им делать.
| | |
|
| 2.8, Аноним (8), 14:22, 12/03/2026 [^] [^^] [^^^] [ответить]
| –1 +/– |
Про технику это не про do-нотацию. Там другая техника. Она про то, как посреди произвольного кода вставлять ключевые слова для макросного DSL. И уже на основе этого можно делать другие DSL.
| | |
| |
| 3.9, Аноним (8), 14:27, 12/03/2026 [^] [^^] [^^^] [ответить]
| –1 +/– |
(если просто определить макросы напрямую, то парсинг будет сильно ограничен, тогда как с этой техникой оно становится намного гибке)
| | |
|
| |
| 3.81, Аноним (8), 18:58, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Вот только тут пример лишь с maybe (с ним и корутины справятся неплохо). Но есть ведь и другие монады. Та же монада List. И её тоже можно использовать с этим DSL. С монадами, которые приостанавливают выполнение, немного сложнее, но тоже можно использовать, в репе есть пример с генератором (хотя там и не монады).
| | |
| 3.93, Аноним (8), 20:06, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Там суть техники не в этом. Тут ещё дело в том, что посреди LET IS может быть произвольный код. Так ещё и WHILE есть с BREAK и CONTINUE, IF-ы.
| | |
|
|
| 1.10, Аноним (10), 14:28, 12/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| –4 +/– | |
> сама техника может быть использована и просто в си-препроцессоре.
Чего? 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 [^] [^^] [^^^] [ответить]
| +/– | |
> А вы предлагаете техники из функциональных языков.
А внутри все равно обычная императивщина - так проц работает, не умеет он в эти твои монады-шмонады. А подобные финты давно в сишке в препроцессоре используются, ты просто йододефицитный и не знаешь об этом.
| | |
| 2.70, Аноним (70), 17:30, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
Да уж куда им, не то что вы, продвинутые - операцию на глаза через опу делаете.
| | |
|
| |
| 2.17, Аноним (17), 14:50, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
они такого слова не знают! Надо говорить, успешной разгадки! :)
| | |
|
| |
| 2.21, Аноним (21), 14:54, 12/03/2026 [^] [^^] [^^^] [ответить]
| –1 +/– |
А как определите такое и будет. Можно передавать весь последующий код в 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. И означает монадическое связывание
| | |
|
| 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(), чтобы запоминать проще было ;)
| | |
|
|
| 1.25, Аноним (26), 15:01, 12/03/2026 [ответить] [﹢﹢﹢] [ · · · ] | +4 +/– | Начнём с того, что за использование макросов без острой на то необходимости и 10... большой текст свёрнут, показать | | |
| |
| 2.30, Аноним (19), 15:10, 12/03/2026 [^] [^^] [^^^] [ответить]
| +3 +/– |
согласен, еще надо unsafe из раст выпилить, не умеешь safe - не берись
| | |
| |
| 3.32, Аноним (-), 15:14, 12/03/2026 [^] [^^] [^^^] [ответить]
| –1 +/– | |
> согласен, еще надо 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 [^] [^^] [^^^] [ответить]
| +/– |
В 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-е место, если не дальше.
| | |
|
|
|
| 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++ он в ядро пустит. Но спонсоры увидели выгоду только в расте.
| | |
|
| |
| 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 [^] [^^] [^^^] [ответить]
| +/– |
Так тут прямо как в хаскеле. Можно разные монады брать, а синтаксис один будет. Но тут не только монады можно, а вообще всё, у чего можно вызвать bind
| | |
|
|
| 1.48, Анлним (?), 16:05, 12/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| –2 +/– |
Препроцессор это как goto.
Путает, тяжело разбирать, разводит много хаков которые тяжело проверить.
И это одна из причин почему раст должен умереть.
| | |
| |
| 2.87, анон (?), 19:16, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
> Препроцессор это как goto.
> Путает, тяжело разбирать, разводит много хаков которые тяжело проверить.
> И это одна из причин почему раст должен умереть.
Потому что гладиолус или где?
У раста, если че, нет препроцессора.
| | |
| |
| 3.88, Аноним (8), 19:30, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
У раста есть макросы. Которые тоже НЕ имеют доступа к семантике языка. Они пытаются притворяться, что информация об этом у них есть, но они только притворяются. Это всё равно текстоподстановка, ака препроцессор.
| | |
| |
| 4.99, анон (-), 22:29, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– |
> У раста есть макросы. Которые тоже НЕ имеют доступа к семантике языка.
> Они пытаются притворяться, что информация об этом у них есть, но
> они только притворяются. Это всё равно текстоподстановка, ака препроцессор.
-
Ну-ну. Хоть бы в доку глянул, но не ... как на опеннете принято: прочитал и додумал, как оно там на самом деле 🤦:
--
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.
| | |
|
|
| 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!
Человек это машина, а машина это человек, понимаете?
| | |
|
|
| 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 [^] [^^] [^^^] [ответить]
| +/– |
> В 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 +/– |
Когда функциональщики внезапно поняли что наделали дичи, они изобрели монады. И они молодцы. А те кто монады тянет в си подобные языки, их лечить надо.
| | |
| 1.74, Аноним (74), 17:52, 12/03/2026 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Вот, блин, комсомольцы! Сами себе создают трудности, потом преодолевают. Эту шнягу еще сопровождать надо!
| | |
| |
| 2.79, Аноним (79), 18:07, 12/03/2026 [^] [^^] [^^^] [ответить]
| +/– | |
> Сами себе создают трудности, потом преодолевают.
Таков путь Си++
| | |
|
|