m4n71k0r
17.06.2012 17:25
Очень годная штука, имхо. http://code.google.com/p/boolinq/
И да, бусты-та какие стали ммммм =) http://www.boost.org/users/history/versi...
Не читаемо. Посему нинужно.
а лучше на х-ле?
Нет, хаскелл здесь не при чем. Для начала можно сравнить как это выглядит на C#, потом посмотреть сюда и задуматься, откуда такой избыточный синтаксис. А причина одна — натягивание одного известного предмета на другой всегда черевато.
Думаю, что тут поможет небольшое обмазывание бустцами, с placeholders и boost::lambda
Честно говоря, я давно жду упрощения синтаксиса лямбд или взгляда в сторону Си-выражений, чтобы можно было писать хотя бы:
auto dst = from(src).where({_1%2 == 1;}) // 1,3,5,7
.select({_1*2;}) // 2,6,10,14
.where({_1>2 && _1<12;}); // 6,10
Возможно,я бы это даже, имея то что есть, воспользовавшись std::inializer_list и std::placeholders
А тип результата и так можно определить, исходя из цепочки операторов.
Насколько я знаю, Страуструп пока не может или не хочет продвинуть User Defined Operators.
я бы это сделал*
Нет, это все равно не похоже на linq из C# (т.е. эталон). Один из примеров на нем:
var odds = from num in numbers
where (num % 2) == 1
select num;
где from, in, where, select — специально зарезервированные слова.
Хотя, я больше намекал на то, что http://code.google.com/p/boolinq/ — это попытка слизать "под копирку" из шарпа модную технологию, не особо вдаваясь в детали реализации и вообще того, зачем она нужна. А у linq на деле всего 2 юзкейса:
1. DSL, т.е. domain-specific language для создания SQL-запросов. Я более чем уверен, что для С++ подобное уже реализовано, и оттестировано лучше, чем у автора (и выглядит лаконичнее).
2. Островок функционального программирования в C# за неимением других возможностей для оного. Думаю, вам не надо показывать, где в бусте (который обычно сторонники С++ провозглашают как стандарт языка) реализованы аналоги? :) Зачем нужен еще один велосипед (их уже итак много).
1) вменяемого нет
2) не велосипед, а сахарок. И да, не слипнется. И да, уже можно и без буста.
хм, кстати, на работе я использую C#, так что знаю про LINQ не по наслышке.
Разве для функциональщины не были созданы специально F# и Nemerle ?
И в C# есть ещё делегаты, с ними тоже кое-что можно.
Думаю, dsl логичнее реализовывать отдельным проектом, без оглядки на linq, и с учетом реальных юзкейсов интеграции с C++.
Но тащить любые модную хрень из других мест в С++ не нужно. Язык благодаря такой политике итак уже раздут (и вообще, пока его развитием кто-то занимается, не сдохнет). К тому же, все универсальное грубо. Думаю, по этому кто-то замается занимается развитием Nemerle & F#, вместо того, чтобы пихать, к примеру, в C# макросы из ML-фишки из второго.