The OpenNET Project / Index page

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



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

"Реализация генераторов через макросы на C++"  +/
Сообщение от opennews (??), 26-Мрт-26, 15:56 
Энтузиасты написали генераторы на C++, которые базируются на do-нотации, которая тоже сделана на макросах.  Реализация открыта под лицензией MIT...

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

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

Оглавление

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

1. Сообщение от Аноним (1), 26-Мрт-26, 15:56    Скрыто ботом-модератором–1 +/
Ответить | Правка | Наверх | Cообщить модератору

4. Сообщение от Аноним (4), 26-Мрт-26, 16:15   +/
Если кому надо, то на Habr можно прочитать подробнее про эти генераторы. Про реализацию на лупхолах и реализацию без.

Там особенно про оптимизацию.

https://habr.com/ru/companies/timeweb/articles/1006490/

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

6. Сообщение от Ананоним (?), 26-Мрт-26, 16:25   +6 +/
Эти лямбда-функции только уродуют язык. Для ленющих погромистов, которым влом было писать имена инлайновых функций по старому стилю.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #37, #41

7. Сообщение от Аноним (7), 26-Мрт-26, 16:45   +11 +/
Без do-нотации - набор заклинаний, с do-нотацией - тоже набор заклинаний. А какую задачу решают - неизвестно.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #13, #15, #20, #36

8. Сообщение от Аноним (8), 26-Мрт-26, 16:49   +/
Сначала был императивный язык, затем поверх навертели функциональный, затем уже поверх него накрутили опять императивный. Цикл замкнулся...
Ответить | Правка | Наверх | Cообщить модератору

10. Сообщение от Аноним (10), 26-Мрт-26, 17:03   +/
Сабж в GNU g++ работает?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #11

11. Сообщение от Аноним (4), 26-Мрт-26, 17:05   +/
В гитхаб репозитории есть CI/CD. Там и показано, что на gcc оно работает. Да и в статье про это написано (нужен g++ 15.2.1 и выше)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10

13. Сообщение от Аноним (-), 26-Мрт-26, 17:11   +/
> А какую задачу решают - неизвестно.

А ты на хабр сходи - сразу узнаешь.
(Ссылка есть в тексте новости, под новостью и в комментариях, чтобы ты случайно не пропустил)

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

14. Сообщение от Мемоним (?), 26-Мрт-26, 17:22   +1 +/
Можно, а зачем?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #18

15. Сообщение от Аноним (15), 26-Мрт-26, 17:23   +1 +/
> А какую задачу решают - неизвестно.

Возобновляемые функции.
Удобно при всяком получении данных.

Типа
let records = getRecords(тут твои параметры)


А дальше ты просто интегрируешь records, пока есть данные. getRecords может отдавать записия скажем по 100, инкапсулируя логику перебора и текущие офсеты.

К слову, через yield в него еще и передавать значения можно, правда хз зачем, это будет сложно дебажить

> Без do-нотации - набор заклинаний, с do-нотацией

Ну так оно и сделанно черт пойми какими костылями тут.

При нормальной реализации он должен выглядеть как-то так:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7 Ответы: #16, #27, #47

16. Сообщение от Аноним (4), 26-Мрт-26, 17:26   –1 +/
Так есть же статьи на хабр с объяснением работы.

Про do-нотацию: https://habr.com/ru/companies/timeweb/articles/1003272/
Про генераторы: https://habr.com/ru/companies/timeweb/articles/1006490/

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

17. Сообщение от Аноним (17), 26-Мрт-26, 17:27   +4 +/
А говорят, что у раст уродливый синтаксис...
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #40, #45

18. Сообщение от Аноним (4), 26-Мрт-26, 18:36   +/
Потому что могут. Могут и делают. А на основе этого можно сделать ещё что-нибудь другое.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14 Ответы: #46

20. Сообщение от Аноним (-), 26-Мрт-26, 18:47   +/
Чтобы вручную не выпиливать конечный автомат ты можешь воспользоваться генератором, написать вполне себе императивный код, который из цикла будет выплёвывать значения. Генератор выпилит тебе этот конечный автомат. Или это может быть реализовано как корутина. Но фишка в том, что конечный автомат выпиливать вручную требует заметно больше усилий.

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

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

22. Сообщение от Обычный человек (?), 26-Мрт-26, 18:54   +/
Автор писал новость по принципу: "Посмотрите какой я умный, если интересуюсь такими вещами!"
Ответить | Правка | Наверх | Cообщить модератору

24. Сообщение от Аноним (24), 26-Мрт-26, 19:23   +1 +/
Выглядит как неграмотная попытка студента в TMP. Велосипедов этих написано несчитанное количество. Штука запутывающая код, вызывающая удивление у анализаторов, IDE и сторонних разработчиков.
Автор не мог бы быть любезен озвучить свою фамилию чтобы его точно на работу не брать?
И вообще зачем это здесь?

Низачот.

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

25. Сообщение от Аноним (24), 26-Мрт-26, 19:59   +2 +/
Вот разбираешь легаси код в проекте которому больше 10 лет и такие вот "подарки" коллегам частенько попадаются от какого нибудь неумного студентика который давно свалил и вызывает это много негативных эмоций... приходится вычищать разумеется.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #29

26. Сообщение от Аноним (4), 26-Мрт-26, 20:02   +/
Так оно не для прода. В статье так и сказано, что в прод брать не стоит. В статье всё написано.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #24 Ответы: #43

27. Сообщение от Bottle (?), 26-Мрт-26, 20:55   +1 +/
Хорошо, а как возобновляемые функции помогут тебе на практике?
Что оно решит? Какие технические расчёты проще написать в do-нотации? Станет ли код от этого быстрее?
Станет ли написание кода быстрее?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15 Ответы: #30

28. Сообщение от Аноним (28), 26-Мрт-26, 21:53    Скрыто ботом-модератором+/
Ответить | Правка | Наверх | Cообщить модератору

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

30. Сообщение от Вася Пупкин (?), 26-Мрт-26, 23:58   +/
"возобновляемые функции" позволяют лаконично отдавать куски данных дальше в следующую часть логики - например обработать и раньше начинать отдавать ответ клиенту потоково. при этом затрачивая меньше оперативы, поскольку не нужно хранить весь итерируемый массив целиком.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #27 Ответы: #32, #39

31. Сообщение от Сусанин (?), 27-Мрт-26, 02:49   +1 +/
Я не понял, какую реальную проблему всё это решает?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #35, #38

32. Сообщение от Аноним (7), 27-Мрт-26, 02:53   +1 +/
> лаконично отдавать

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

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

33. Сообщение от Аноним (7), 27-Мрт-26, 02:59   +1 +/
Плохой пример. Лексер, которого дёрнули за next_token, не нуждается уже ни в каких "ду без ду с ду". Вы, наверно, никогда процедурный парсер плюсов не видели безо всякой такой канители.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #20 Ответы: #49

35. Сообщение от Аноним (7), 27-Мрт-26, 03:06   +1 +/
Проблему присутствия слишком большого объёма свободного времени, которое можно потратить на попытку переварить макроспагетти и создать вокруг него хоть какую-то удобоваримую оболочку.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #31

36. Сообщение от Смузихлеб забывший пароль (?), 27-Мрт-26, 07:28   +/
Максимально неподдерживаемый код ? ( всм, получить )
Чтобы заказчик потом в любом случае вернулся за доработками именно к тому, кто написал вот-это-вот-всё, т.к остальные тупо отказываются браться за допиливание подобного

В остальном, похоже, давно на плюсЫ не смотрел. А они год от года, похоже, становятся всё уродливей и запутанней

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

37. Сообщение от Алоним (?), 27-Мрт-26, 07:39   +1 +/
Этот C++ только уродует язык C. Для ленющих погромистов, которым влом было писать грамотно структуры и функции.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6

38. Сообщение от bOOster (ok), 27-Мрт-26, 08:11   +1 +/
Проблему абстрактного мышления студента перед зачетом.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #31

39. Сообщение от Аноним (39), 27-Мрт-26, 09:31   +1 +/
Как говорил ричард фейнман, если ты не можешь объяснить просто, то ты сам не понимаешь
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #30

40. Сообщение от Аноним (39), 27-Мрт-26, 09:33   +/
да
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17

41. Сообщение от Аноним (41), 27-Мрт-26, 10:02   +/
А если инлайновую нужно вызвать всего лишь один раз, то зачем напрягать фантазию для придумываия ещё одного имени?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6

43. Сообщение от Аноним (7), 27-Мрт-26, 10:12   +/
> оно не для прода

Это было сразу понятно по стилю оформления.

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

44. Сообщение от Аноним (45), 27-Мрт-26, 10:41   +2 +/
> auto result = ::bind(mx, [&](auto&& x) {
>     return ::bind(my, [&](auto&& y) {

Господи!! Я сдавал экзамен на 5 баллов по С++, но я уже неспособен читать эти загадочные каракули! Это же ужас... Сейчас пишу на C# и даже не могу представить, что можно так ужасно писать код из сикарашек! Весь C# код читается как бейсик - просто и понятно. И да, указателей тоже полно.

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

45. Сообщение от Аноним (45), 27-Мрт-26, 10:44   –1 +/
...и не только синтаксис! Сама идеология языка - "программистский урод". Вместо того, чтобы ОБЛЕГЧИТЬ программисту работу с такой тонкой штукой, как память, авторы сбросили весь груз на программиста, который сам должен танцевать на костылях и оформлять в коде то, что можно было просто вычислить. Молодцы, чо - слегка приподнялись над ассемблером! 😆
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17

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

47. Сообщение от mumu (ok), 27-Мрт-26, 13:17   +/
> let records = getRecords(тут твои параметры)

Вот ТАК и должна выглядеть эта запись. А примеры из новости - грабли по отстреливанию себе ног.

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

49. Сообщение от Аноним (-), 27-Мрт-26, 13:35   +/
> Лексер, которого дёрнули за next_token, не нуждается уже ни в каких "ду без ду с ду".

Ты про контекстно независимую грамматику? Да, в ней не нуждается. Но где ты в последний раз видел контекстно-независимую грамматику?

> Вы, наверно, никогда процедурный парсер плюсов не видели безо всякой такой канители.

Это тот, который не мог различить две закрывающие угловые скобки и оператор сдвига вправо?

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

50. Сообщение от Аноним (50), 27-Мрт-26, 14:13   +/
Прочитал, и всё ещё не понимаю, зачем всё это.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #16


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

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




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

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