LINUX.ORG.RU

Pattern matching для С++20

 


0

3

Посоны, что-то я упоролся по хардкору и стал писать паттерн матчинг для С++20. Пример:

variant<int, string> v = 1+2+3+5+7+11;
const auto pattern = pm::any_of(29, "42");

cout << *match(v,
  // match with pattern although pass (fall through). also create side effect in the middle of matching
  pass(pattern,            [&v] { cout << "How does this work?\n"; v = "42"; })
| pass(pattern,            [&v] { v = R"(I wonder ¯\_(ツ)_/¯)"; }) // match with pattern again, also pass
| with(pm::type(string{}), [&v] { return get<string>(v); }) // match with stored type
| with(__,                 []   { return R"(('・ω・'))"s; })) // catch-all condition (default)
<< endl;

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

Я так почитал пропозал для паттерн матчинга, вроде много чего из фичей есть кроме некоторых вещей, хотя я не до конца понимаю всё, что там написано и зачем оно там.

Я это отложу пока что потому мне это надо осмыслить, но может кто-то из многоуважаемых регистрантов или не менее многоуважаемых анонимусов посмотрит пока на это барахло и что-то посоветует? В код может кто-то глянет, всё ли по феншую? Там не много, меньше 700 строк кода пока что и очень простой дизайн.

Ссылка: https://bitbucket.org/alekseyt/pm

Более полный пример использования: https://bitbucket.org/alekseyt/pm/src/master/examples/example.cpp

И там в тестах всякие guard(), within(), maybe() и т.д. Заранее спасибо.

Ответ на: комментарий от anonymous

А в с++ не все так просто с этими выражениями, не говоря уже о сопоставлении этих выражений.

Интересно, есть ли в C++ хоть что-то простое… Смотрел недавно CppCon 2015: Kate Gregory “Stop Teaching C" просто чтобы снова землю под ногами почувствовать. Классная тётка. А язык один х@# говно. Проблема в том, что альтернатив нет. (Rust и D не предлагать.)

dimgel ★★★★★
()
Ответ на: комментарий от dimgel

Интересно, есть ли в C++ хоть что-то простое…

Си начинался как корпоративная поделка, и с++ продолжил это начинание. В отличии от академичных лиспов, алголов, паскалей, мл, хаскелей и тп. Получилось то, что получилось.

(Rust и D не предлагать.)

Кстати, Rust - тоже корпоративная поделка.

anonymous
()
Ответ на: комментарий от dimgel

В С++ этот бездарный мусор ненужен. И это не «destructuring», а следствие отсутвие type refinement в твоём бездарном говне. В школу сходи, ну для начала, а уже потом будешь о чём-то кукарекать.

anonymous
()

паттерн матчинг

В императивщине нужен только для удобства, т.к. есть и классические способы. Но все реализации, которые я видел, сделаны через костыли. Много писанины со всякими закорючками. Т.е. теряется весь смысл. Фича ради фичи. Вот когда сделают удобный синтаксис, тогда и приходите.

anonymous
()
Ответ на: комментарий от anonymous

Злобнось и раздражительность – следствие закомплексованности и внутренних конфликтов. Почему-то говнистые люди думают, что ежели будут своё говно на окружающих выливать, то в них говна станет меньше. Нифига подобного: которого волка кормишь, тот и растёт.

UPD. Тот и срёт больше. :)

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 1)
Ответ на: комментарий от dimgel

Да, очередной клоун, который обгадился и начал нести дефолтное, шаблонное говно. Так, побежал показывать злобность и разрадражительность. А так же обосновывать все твои бездарные выводы.

Ну и так же клоун не ответил, конечно же. А отсутвием отсвета и обусловлен этот нелепый скулёжь. А сам клоун побежит сейчас плакаться мамке, чтобы его нелепый позор затёрли.

anonymous
()
Ответ на: комментарий от anonymous

Бедняжка. :) Так хочется посраться, а не с кем: на улицу опасно – морду набьют, а здесь – хоть и безопасно, но нет желающих демонстрировать такую же говнистость, чтобы потешить твоё ЧСВ что ты не один такой. Я бы тебя пожалел, да только смысла в этом никакого: измениться ты не сможешь.

dimgel ★★★★★
()
Ответ на: комментарий от anonymous

с чего ты взял что это плагиат? я видел и псевдоцарей, и самого царя. и могу сказать, что только у самго царя получается такие неприятные вещи писать, раз за разом, в каждом предложении.

это царь 99%

anonymous
()
Ответ на: комментарий от dimgel

Ты занимаешься тем же самым. Как только в тексте вижу слово «Говно» и ему подобные - желание читать пропадает и я просто сверху-вниз глазами пролистываю, стараясь зацепиться за что-то.

Не надо мне в жизни таких слов и образов.

anonymous
()
Ответ на: комментарий от anonymous

Царь обещал какой-то проект вроде разработать или блоги …

anonymous
()
Ответ на: комментарий от anonymous

Модули кто нибудь уже юзает?

cmake в них не умеет, да и в gcc что-то там коряво и недоделано было, когда я последний раз пробовал.

dimgel ★★★★★
()
Ответ на: комментарий от dimgel

Клоун обгадившийся ушёл ещё в большую несознанку. Морду набьют тебе, отребье, это раз. Два, мне есть с кем посраться. Это заверено и доказано. А вот посраться нескем тебе, убогому. Это так же заверено и доказано, именно поэтому ты обитаешь на этой помойке. И именно поэтому ты нонейм-мусор.

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

В результате, фиксирует. Дошколёнок прибежал и нанёс херни. Я ответил. Бездарность несмогши ничего ответить и хоть как-то защитить/обосновать своё блеяние - съехала с темы, ушла в несознанку и начала нести невнятную херню. При это даже с этой хернёй он обгадился и не смог ответить за кукаретинг.

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

anonymous
()
Ответ на: комментарий от anonymous

Ох, ну слава тебе господи! Я уж испугался, не случилось ли чего. Ну не может быть такого, чтобы говно не оставило за собой последнее слово, это ж одно из ключевых ваших характеристических свойств! Но теперь я спокоен. :) Давай напиши какую-нибудь херню ещё раз, я обещаю, что в следующий раз не отвечу. Хотя бы здесь – где ты нахрен никому не всрался – оставишь за собой последнее слово. :)

dimgel ★★★★★
()
Ответ на: комментарий от dimgel

Ещё бы ты там что-то пробовал. Зачем врёшь, убожество. Модулям в С++ ненужно никакое говнаке и никаких абстрактных «коряво» нет. Ты не назвал ничего.

В результате - очередной клоун, который пытается кукарекать о том, о чём даже представления не имеет.

anonymous
()
Ответ на: комментарий от dimgel

Нонейм-мусор, не всрался никому ты, а не я. Ты не проецируй себя, бездарное дерьмо, на меня.

Ты опущено - это фиксировано. Всё, ты можешь блеять что угодно - собака есть собака. Все потуги вида «тебе нескем», «нахрен никому». Каждое твоё блеяние всё больше и больше тебя хоронит.

Давай, шлюха, поиграем в игру. Ставим твою жопу, либо что там у тебя, убожества, ещё есть. Далее спрашиваем тут нужен ли ты кому, а потом спрашиваем обо мне. Ты же сможешь ответить за своё блеяние, собака безродная? Или опять дерьма пожрёшь, гниль опущенная?

Хотя это мало что даст, потому как ты, бездарное дерьмо, нахрен никому не упало. И это превратиться в игру за/против меня. С тобою, мусором, ввиде шильдика «против меня». Но я даже так сыграю.

anonymous
()
Ответ на: комментарий от anonymous

какая разница, нужен он кому или нет? раньше ты сам всегда говорил, что у тебя «факты», а у них «совместное блеяние»

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

применяй к себе дисциплину

anonymous
()
Ответ на: комментарий от dimgel

Ну не может быть такого, чтобы говно не оставило за собой последнее слово, это ж одно из ключевых ваших характеристических свойств!

:))))) Блин, я обещал не отвечать, но это восторг. :))) Давай, жги ещё. :)

dimgel, повеселил, чертяка!

P.S. Я не Царь.

anonymous
()
Ответ на: комментарий от anonymous

У меня выше есть факты, а это отребье съехало с темы, потому как не может и знает, что обгадится. Дошколёнок уже выдресированный.

По поводу «совместное блеяние» - у тебя проблемы с логикой. Я не использую какую-то нужность и поддержку чью-то для аргументации, вместо фактов. Здесь речь идёт о том, что никому ненужное нонейм-дерьмо блеет мне что-то о ненужности. И я ему предалгаю проверить его балабольство, но он опять к мамке убежал плакаться.

Никакой нет силы в переубеждении. Мусор никто не переубеждает, я всегда говорил об этом. Моя задача в том, что публике показать - это дерьмо - дерьмо. Я уже это показал и доказал.

Мои споры далее просто показывают то, что это не просто какой-то там человек, который что-то не знает и ошибся. Это просто бездарное трепло. Он как блеял про С++ херню и не смог ответить. Он как блеял про pm и не мог ответить. Так же он блеял и про меня и не мог ответить.

Да и что ты от меня хочешь? Бездарность закукарекала про выглядит. Ну, дальше что?

anonymous
()
Ответ на: комментарий от anonymous

Там не в этом дело. Задача подобной бездарной шлюхи: а) съехать с темы, б) засрать позор своё хернёй. Поэтому очевидно, что она не заткнётся. Если тема будет не засрана, то позор не затеряется. А блеет ту херню падаль гнилая так же понятно почему. Очевидно, что если шлюха будет не отвечать, то к этому ответу её будут призывать. И очевидно, что шлюхе выгодно блеять херню вида «последнее слово».

anonymous
()
Ответ на: комментарий от anonymous

Во-первых, ты повторяешься уже в каждой строчке. Что за халтура?

Во-вторых,

Я уже это показал и доказал.

Нигде ты ничего не доказал. Только говном плюёшься. Доказательство в студию! Иначе трепло.

dimgel ★★★★★
()
Ответ на: комментарий от dimgel

Шлюха, было твоё блеяние и мой ответ на него. Блеяние собаки про «уродски» и про «destructuring». Ты, шлюха бездарная, не ответила ни за первый ни за второй кукаретинг. Побежала отвечать, для начала за то, почему ответа нет и ты, гниль, съехала с темы. Ну и за кукаретинг так же. Исполнять, шавка.

anonymous
()
Ответ на: комментарий от dimgel

cmake в них не умеет, да и в gcc что-то там коряво и недоделано было, когда я последний раз пробовал.

А конкретней?

anonymous
()
Ответ на: комментарий от anonymous

Шлюха, было твоё блеяние и мой ответ на него.

Твой «ответ»? Это был не ответ, а брызганье говном. Если бы ты умел по-людски общаться, то и получал бы людские ответы. А то что ты в ответ на своё хамство не получаешь конструктива – так это попробуй к зеркалу претензии выкатить.

dimgel ★★★★★
()
Ответ на: комментарий от dimgel

Ну всё, шлюха опять ушла в отрицание. Шлюха все будет блеять, что ответ не ответ. Ну давай, говно, блеять за не ответ. Побежала, падаль, доказывать блеяние своё гнилое.

Дано, я сообщил бездарной шлюхе, что никакая «destructuring» не относится к тому, о чём она блеет. Что ответила шлюха? Ничего. Задача твоя, говно, сообщить и доказать то, почему это не ответ.

Так же, я потребовал от падали обосновать за кукаретинг про уродски. Или шлюха не должна отвечать за кукаретинг и должна только блеять? Т.е. всё уже доказано? У тебя нет выхода, бездарное говно.

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

anonymous
()
Ответ на: комментарий от dimgel

cmake в них не умеет, да и в gcc что-то там коряво и недоделано было, когда я последний раз пробовал.

Все же какие проблемы, когда пробовали, …
Что касается диалогов о говне, то в них не обязательно участвовать …

anonymous
()
Ответ на: комментарий от anonymous

А конкретней?

Поди вспомни. Были проблемы, что в простейшем примере с двумя модулями приходилось дважды makefile запускать, это вылечили ещё весной (единственный баг, упоминание о котором сохранилось в моих readme). Были какие-то накладки с modules vs namespaces, подробностей не помню. Зависимости генерил вызовом gcc -MMD, и там оно тоже иногда коряво отрабатывало (подробностей не помню). Но вся эта информация может быть уже устаревшей, т.к. последний раз пробовал в конце весны. Так что welcome сюда:

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 2)
Ответ на: комментарий от anonymous

Я обычно и не участвую. А сегодня что-то захотелось. Ну это примерно как повадился какой-то шизанутый (в данном случае – на собственной мании величия) бомж в твою любимую кафешку заглядывать. А охрана на него ноль внимания. И ладно бы он там сидел где-то сам по себе, дык нет, до приличных отдыхающих докапывается. Нельзя же вечно такое игнорить, иногда и пнуть хочется.

dimgel ★★★★★
()
Ответ на: комментарий от anonymous

Во, я теперь тебя буду называть Бомж. Потому что на Царя такое говно не тянет, а называть тебя например климатичной истеричкой – это обижать ни в чём не повинных девушек. :)

dimgel ★★★★★
()
Ответ на: комментарий от anonymous

Впрочем, попробуем пообщаться с идиотом конструктивно (несмотря на полную бессмысленность этой затеи):

Дано, я сообщил бездарной шлюхе, что никакая «destructuring» не относится к тому, о чём она блеет.

Доказательства будут, что destructuring к PM не относится? Вон ТС (автор либы) другое мнение на этот счёт продемонстрировал, ответив по существу. А ты выдал клинический бред, естественно безо всякой попытки этот бред обосновать (что неудивительно: обосновать твой бред один хрен невозможно), и требуешь аргументированного опровержения? Ты – тот дурак, который один может задать столько вопросов, что сто умных не ответят.

dimgel ★★★★★
()
Ответ на: комментарий от anonymous

Что же касается того, что плюсы выглядят по-уродски, то спорить с этим может только тот, кто кроме плюсов ни черта в своей жизни не видел. А тебе, недоумку, не хватило даже ума сравнить самоочевидный синаксис моего примера на scala и плюсовую дичь в заглавном посте.

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 1)
Ответ на: комментарий от anonymous

Не жаль ни на миллиграм. Каждый творит свой ад сам, а этот Бомж ещё и на других свой ад выливает. Жалеть надо тех, кто с ним общается – и не способен относится к говну как к говну.

dimgel ★★★★★
()
Ответ на: комментарий от dimgel

Ну шлюха опять блеет херню, вместо ответа тупорылый скулёжь опущенной собаки вида «да так оно и есть». Аргументации нет.

По поводу твоего примера, собака. Это не синтаксис, тупяа ты шлюха. Это мусорное харное говно. Опять же, зачем блеешь, если нихрена не понимаешь?

И самое важное - это бездарное говно не обладает и 1% возможностей того самого синтакса крестов. Ну и самое интересное, гниль бездарная, в скале именно тот самый крестовый синтаксис. Друго нет.

Да никакого pm"а в крестах нет, потому как само это говно бездарный мусор. Это костыль, который латает латаете дыры в слабом дизайне, отсутвии полиморфизма и мусорной системе типов.

anonymous
()
Ответ на: комментарий от anonymous

Да никакого pm"а в крестах нет, потому как само это говно бездарный мусор. Это костыль, который латает латаете дыры в слабом дизайне, отсутвии полиморфизма и мусорной системе типов.

В скале – слабый дизайн, нет полиморфизма и мусорная система типов. Ага, так и запишем.

Идиот. Иди спать уже.

dimgel ★★★★★
()
Ответ на: комментарий от anonymous

Царь, как у тебя «по жизни»?
Ты вроде обещал блогов много написать и код к ним приложить …

anonymous
()
Ответ на: комментарий от dimgel

Доказательства будут, что destructuring к PM не относится?

Это ты должен доказывать, а не я. Обгадился первый раз. Во-вторых речь шла не pm как таковом, а о твоём блеянии про destructuring.

Но тебе, бездарная школопендра, даже объясню. pm заканчивается на матче на типе. destructuring левая херня.

А существует она в мп"е по очень простой причине. match(x) case Tgovno => {} - плебеское дерьмо не уточняет в кейсе, поэтому сам x использовать нельзя. Ну и, конечно же, тип в x затёрт, как и в любом дерьмо, потому как полиморфизма в этом мусоре быть не может и небыло никогда.

Поэтому в кейсе нужно определить алиас, которому уже захардкодить тип. Именно для этого создан подобный синтаксис. К которому уже прикручен твой колхозный destructuring.

anonymous
()
Ответ на: комментарий от dimgel

Ну что сказать, как только шлюхе потребовалось ответить - шлюха тут же обгадилась. Опять же фиксируется тоже самое, что было изначально.

И конечно же, это бездарное дерьмо не может сообщить где там полиморфизм, не мусорная система типов и сильный дизайн. Поэтому шлюха просто опять побежала рыдать к мамке.

anonymous
()
Ответ на: комментарий от anonymous

Именно для этого создан подобный синтаксис. К которому уже прикручен твой колхозный destructuring.

Спасибо, кэп. А то я и не знал, как PM юзать. Десять лет юзал – и тут ты мне открыл глаза. А уж то, что destructuring оказывается колхозный – это вообще откровение. Погугли «pattern matching destructuring», осознай что «destructuring» применительно к PM – стандартная фича и устоявшаяся терминология, и не пори больше херню. Ей больно.

dimgel ★★★★★
()
Ответ на: комментарий от anonymous

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

Ты предлагаешь, чтобы я в ответ на твой очередной идиотский высер принялся долго и нудно тебе с примерами рассказывать про систему типов скалы? А ты не охренел ли, парниша? Пусть перед тобой-свиньёй другие бисер мечут.

dimgel ★★★★★
()
Ответ на: комментарий от anonymous

Ах да, даже в рамках колхозной реализации автора +/- мы имеем. Композицию кейсов, определение кейсов отдельно. В мусорном огрызке кое как сваянном из врованного свича этого нет.

В качестве кейсов можно использовать не только инплейс-говно, но и фнукции в том числе полиморвные. В том числе и сами матчи и их композиции.

Т.е. можно взять функцию вида a | b | c => govno и подставить под несколько кейсов, а так же композиации этих функций.

Так же, этот «pm» бесконечно расширяем, в отличии от плебейского огрызка.

Остальные нюансы плебеям объяснить сложно, но их там много. Да и в целом никакой разницы нет.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.