The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Энтузиасты создали do-нотацию для C++"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Энтузиасты создали do-нотацию для C++"  +/
Сообщение от opennews (??), 12-Мрт-26, 14:13 
Сообщество энтузиастов написало собственный DSL на макросах, который работает как do-нотация из функциональных языков. Используются продвинутые возможности препроцессора. В представленном проекте реализована новая техника для парсинга DSL, что может поспособствовать созданию дальнейших DSL на препроцессоре C и C++. Код в репозитории написан на C++23 и открыт под лицензией MIT, а сама техника может быть использована и просто в си-препроцессоре...

Подробнее: https://www.opennet.ru/opennews/art.shtml?num=64975

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от Аноним (-), 12-Мрт-26, 14:13   –1 +/
> сама техника может быть использована и просто в си-препроцессоре.

Поподробнее, как это на си? Функциональщина на си? Это был бы номер, в чемпионате перверсий от айти это было бы где-то в призовых местах :))

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #5, #8, #67

5. Сообщение от Жироватт (ok), 12-Мрт-26, 14:17   +1 +/
Потому, что могут.
Осталось сделать заголовочник для моноидов и вообще, транспилятор из хаскелла в С, с сохранением монад
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

8. Сообщение от Аноним (8), 12-Мрт-26, 14:22   +/
Про технику это не про do-нотацию. Там другая техника. Она про то, как посреди произвольного кода вставлять ключевые слова для макросного DSL. И уже на основе этого можно делать другие DSL.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #9

9. Сообщение от Аноним (8), 12-Мрт-26, 14:27   +/
(если просто определить макросы напрямую, то парсинг будет сильно ограничен, тогда как с этой техникой оно становится намного гибке)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8 Ответы: #22

10. Сообщение от Аноним (10), 12-Мрт-26, 14:28   –3 +/
> сама техника может быть использована и просто в си-препроцессоре.

Чего? do-нотация в СИ?
Они только недавно в C23 смогли осилить Predefined Boolean constants.

А вы предлагаете техники из функциональных языков.
Пожалейте йододефицитных, это ж им мозг сломает))

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #14, #28, #70

12. Сообщение от Аноним (12), 12-Мрт-26, 14:33   +4 +/
> Сообщество энтузиастов

1 контрибьютор в репозитории

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #59

13. Сообщение от Аноним (13), 12-Мрт-26, 14:33   +1 +/
бгг… успешной им отладки! =)
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #17

14. Сообщение от Аноним (8), 12-Мрт-26, 14:33   +/
Техника это не сама do-нотация, а техника парсинга. Чтобы делать другие DSL. Но можно попробовать и do-нотацию сделать попробовать, но там немного другой вид будет (т.к. в си лямбд нет обычно, придется через макросы разбивать на несколько функций и строить цепочки вызовов, так ещё и захваты переменных придётся руками прописывать)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10 Ответы: #26

17. Сообщение от Аноним (17), 12-Мрт-26, 14:50   +/
они такого слова не знают! Надо говорить, успешной разгадки! :)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #13 Ответы: #39

19. Сообщение от Аноним (19), 12-Мрт-26, 14:50   +/
и что такое bind?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #20, #21, #24, #40, #64

20. Сообщение от Аноним (19), 12-Мрт-26, 14:53   +/
это явно не std::bind
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19

21. Сообщение от Аноним (21), 12-Мрт-26, 14:54   –1 +/
А как определите такое и будет. Можно передавать весь последующий код в DO блоке в функцию как лямбду. Но изначально было придумано для монад. В std::optional bind это тот же and_then. На основе bind можно сделать генераторы, корутины, разные монады (и не только монады).
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19

22. Сообщение от Аноним (22), 12-Мрт-26, 14:54    Скрыто ботом-модератором+3 +/
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #53

24. Сообщение от Аноним (28), 12-Мрт-26, 15:00   +3 +/
Это чтоб путаться с bind() из libc - биндить сокет к транспортному порту.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19 Ответы: #51

25. Сообщение от Аноним (26), 12-Мрт-26, 15:01   +4 +/
Начнём с того, что за использование макросов без острой на то необходимости и 100% невозможности сделать по-другому с переиспользованием кода (и всяки свистелки  перделки вроде do-нотаци сюда не катят, если не хочешь писать на C++ как на C++, то сиди уже на своей сишке, за си головного мозга, когда на си переизобретают фичи C++ на основе макросов или бойлерплейта кстати тоже надо гнать из профессии) надо гнать из профессии с волчьим билетом. Я прекрасно знаю что ranges недоделаны и ни один компилятор их не умеет оптимизировать, именно поэтому такие фичи должны быть частью ядра языка, а не частью стандартной библиотеки, всё равно новая стандартная библиотека без интринсиков компилятора работать не будет, зачем тогда выпендриваться с шаблонным метапрограммированием, чтобы компиляция была помедленнее и чтобы километровые портянки получать? Такие вещи должны быть first-class citizens языка, разумеется кодить их реализацию надо не на самом языке, а на специальном DSLе, который к сишке имеет такое же отношение, как микрокод процессора (процессоры оказались по сути очень кастрированными FPGA, блин, хотеть полноценный FPGA с полной интеграцией в процессор с полноценной компиляцией программ напрямую в микрокод, а ещё больше хотеть современный аналог трансметы на coarse-grained reconfigurable architecture, где code morphing крутится на арсенид-галлиевом высокоскоростном горячем ядре, а дальше микрооперации через сеть с коммутацией пакетов топологии "звезда" раскидываются по вычислительным блокам на низкой тактовой частоте (но их дохрена параллельных, и по самому тонкому техпроцессу, и к каждому - HBM), но в обычном режиме сеть большую часть времени работает как систолический массив) к машинному коду.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #30, #34, #37

26. Сообщение от Аноним (26), 12-Мрт-26, 15:03   +/
техника парсинга нафиг не нужна, есть ctll на основе шаблонов, а не на осонове макросов, уродующих AST самой программы, в результате чего написано одно, а делает программа другое, потому что шаблоны втихаря воруют исходник и меняют его на подделку.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14 Ответы: #27, #35, #47

27. Сообщение от Аноним (26), 12-Мрт-26, 15:03   +/
тфу, не шаблоны, а макросы
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #26

28. Сообщение от Аноним (28), 12-Мрт-26, 15:08   –1 +/
> А вы предлагаете техники из функциональных языков.

А внутри все равно обычная императивщина - так проц работает, не умеет он в эти твои монады-шмонады. А подобные финты давно в сишке в препроцессоре используются, ты просто йододефицитный и не знаешь об этом.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10

30. Сообщение от Аноним (19), 12-Мрт-26, 15:10   +2 +/
согласен, еще надо unsafe из раст выпилить, не умеешь safe - не берись
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #25 Ответы: #32

32. Сообщение от Аноним (-), 12-Мрт-26, 15:14   +/
> согласен, еще надо unsafe из раст выпилить, не умеешь safe - не берись

Заодно и всю системщину на Rust зарубите как раз. Ну или как вы "safe" допустим адрес в DMA автомат вообще можете загнать? Это вообще - за пределами понимания компилера.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #30 Ответы: #62

33. Сообщение от Аноним (39), 12-Мрт-26, 15:19   +/
> В представленном проекте реализована новая техника для парсинга DSL, что может поспособствовать созданию дальнейших DSL на препроцессоре C и C++.

Раз Торвальц не пускает C++ в ядро, то превратим этим способом C в C_with_classes для ядра.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #38

34. Сообщение от Аноним (8), 12-Мрт-26, 15:23   +/
Так эта do-нотация и сделана в первую очередь для C++, а на C в таком виде её не сделать (можно сделать в другом). Тут добавлена новая фича в C++, которой раньше в нём не было (корутины достаточно ограничены)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #25 Ответы: #42

35. Сообщение от Аноним (8), 12-Мрт-26, 15:26   +/
Если бы всё было так просто... Шаблоны это, разумеется, хорошо (и в том репозитории они активно применяются), но могут то они далеко не всё. В таком виде (и в целом в юзабельном) do-нотацию на шаблонах не сделать. Там же гибрид шаблонов и макросов.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #26

36. Сообщение от 12yoexpert (ok), 12-Мрт-26, 15:34   –2 +/
не позорься, школотрон
Ответить | Правка | Наверх | Cообщить модератору

37. Сообщение от Аноним (39), 12-Мрт-26, 15:39   +/
Нитрид галлия не быстрее будет?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #25

38. Сообщение от Аноним (38), 12-Мрт-26, 15:40   +/
Вангую что подобные выкрутасы Торвальдс тоже не пропустит. А если надо, то C++ он в ядро пустит. Но спонсоры увидели выгоду только в расте.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #33

39. Сообщение от Аноним (39), 12-Мрт-26, 15:45   +/
printf() хватит всем.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17 Ответы: #46

40. Сообщение от Аноним (39), 12-Мрт-26, 15:49   +/
#include <sys/socket.h>
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19

41. Сообщение от warlock66613email (ok), 12-Мрт-26, 15:55   +4 +/
Это мегакруто, но я не смог понять в коде почти ни одной строчки.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #44, #45

42. Сообщение от аролп5 (?), 12-Мрт-26, 15:56   +/
В go - горутины
В Kotlin - корутины
В C++ - должны быть сирутины 😁
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #34 Ответы: #49

43. Сообщение от Аноним (43), 12-Мрт-26, 15:57   +/
Перл изобретают
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #69

44. Сообщение от Аноним (59), 12-Мрт-26, 15:58   +/
Когда сишники не хотят переходить на раст, то раст переходит в си.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41 Ответы: #58

45. Сообщение от Аноним (8), 12-Мрт-26, 15:59   +2 +/
В понедельник на хабре выйдет статья с разбором этого кода
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41

46. Сообщение от Аноним (17), 12-Мрт-26, 16:03   +/
отладка это процесс!
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #39

47. Сообщение от Аноним (47), 12-Мрт-26, 16:04   +/
Ого, не знал. У нас на работе как раз используют макросы, нужно будет поручить прекратить это.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #26

48. Сообщение от Анлним (?), 12-Мрт-26, 16:05   –1 +/
Препроцессор это как goto.
Путает, тяжело разбирать, разводит много хаков которые тяжело проверить.
И это одна из причин почему раст должен умереть.
Ответить | Правка | Наверх | Cообщить модератору

49. Сообщение от Аноним (39), 12-Мрт-26, 16:08   +/
Сирутины в C.
В C++ - Плюрутины.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #42

50. Сообщение от Аноним (50), 12-Мрт-26, 16:09   +1 +/
хе хе, растов порвало.
Ответить | Правка | Наверх | Cообщить модератору

51. Сообщение от Аноним (17), 12-Мрт-26, 16:10   –5 +/
это просто д*билы позикса используют в именах функций обобщенные многозначные термины (понятия). Там по факту должно было быть нечто bind_socket или socket_bind, лучше sys_socket_bind, что говорит о sys/socket.h.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #24 Ответы: #52

52. Сообщение от Аноним (28), 12-Мрт-26, 16:17   +/
Кто первый встал, того и тапки. Так что пусть плюсовики меняют имя на std::BindGeneratesAForwardingCallWrapperForAGivenFunctionOrCallableObject()
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #51 Ответы: #54, #55

53. Сообщение от Жироватт (ok), 12-Мрт-26, 16:17   +/
Главное, чтобы не стало настолько гибко, чтоб и из рук не выпадал, и не гнулся, завязываясь узлами, пока в руках держишь. Я про код, если что
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #22

54. Сообщение от Аноним (8), 12-Мрт-26, 16:19   +/
Проще тогда взять оператор >>= и его переопределить
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #52

55. Сообщение от Аноним (28), 12-Мрт-26, 16:21   +/
А если без шуток, и в позиксе *билы, которые используют в именах функций обобщенные многозначные термины (понятия), то кто тогда коммитет плюсовиков, если они делают так же? По факту должно быть std::functional_bind, что говорит о <functional>
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #52 Ответы: #56

56. Сообщение от Аноним (8), 12-Мрт-26, 16:22   +/
Так а тут в проекте используется и не std::bind. А другая функция. Там она определяется в неймспейсе doletis. И означает монадическое связывание
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #55 Ответы: #57

57. Сообщение от Аноним (28), 12-Мрт-26, 16:24   +/
почему тогда не doletis_bind()?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #56 Ответы: #60

58. Сообщение от warlock66613email (ok), 12-Мрт-26, 16:28   +/
В Rust как раз нет в явном виде монад и нет do-нотации. Может когда-нибудь и появятся -- я бы этого исключать не стал -- но не в ближайшем будущем.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #44

59. Сообщение от Аноним (59), 12-Мрт-26, 16:29   +/
Сообщество было с ним в одном помещении.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12

60. Сообщение от Аноним (21), 12-Мрт-26, 16:30   +/
Потому что тут C++, а не Си. Там он doletis::bind
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #57 Ответы: #68

61. Сообщение от Rodegast (ok), 12-Мрт-26, 16:38   +/
> который работает как do-нотация из функциональных языков

Там монад нету, зачем им do-нотация?

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #63

62. Сообщение от Аноним (19), 12-Мрт-26, 16:39   +/
это был сарказм на предложение выпилить целый язык (препроцессор) из си
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #32

63. Сообщение от Аноним (8), 12-Мрт-26, 16:42   +/
В std::optional с C++23 есть монадический интерфейс (and_then), в std::expected тоже. Вот и можно для них использовать do-нотацию. Можно и не только для них и не только для монад. В репе есть пример с генераторами, которые не через монады сделаны, но через do-нотацию.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #61 Ответы: #72

64. Сообщение от Rodegast (ok), 12-Мрт-26, 16:43   +/
> и что такое bind?

Вангую что аналог оператора >>=

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19 Ответы: #66

66. Сообщение от Аноним (8), 12-Мрт-26, 16:49   +/
Оно и есть, да
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #64

67. Сообщение от Джон Титор (ok), 12-Мрт-26, 16:54    Скрыто ботом-модератором+/
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

68. Сообщение от Аноним (28), 12-Мрт-26, 16:55   +/
а если я использую
using namespace std;
using namespace doletis;
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #60

69. Сообщение от Джон Титор (ok), 12-Мрт-26, 16:59    Скрыто ботом-модератором+/
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #43

70. Сообщение от Аноним (70), 12-Мрт-26, 17:30   +/
Да уж куда им, не то что вы, продвинутые - операцию на глаза через опу делаете.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10

71. Сообщение от Аноним (70), 12-Мрт-26, 17:32   +/
Когда функциональщики внезапно поняли что наделали дичи, они изобрели монады. И они молодцы. А те кто монады тянет в си подобные языки, их лечить надо.
Ответить | Правка | Наверх | Cообщить модератору

72. Сообщение от Rodegast (ok), 12-Мрт-26, 17:34   +/
> В std::optional с C++23 есть монадический интерфейс (and_then), в std::expected тоже

Зачем в императивном языке со строгой семантикой нужны монады?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #63


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2026 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру