Метапрограммисты надоели
От: kurchatov  
Дата: 05.10.14 13:34
Оценка: 24 (8) +26 -6 :))) :))) :)
Откуда пошла эта мода на обмазывание шаблонами к месту и не к месту? Нет, я ничего не имею против шаблонов, если действительно надо — только приветствую.
Но в последние годы появился какой-то особенный класс С++ программистов, которые пихают шаблоны везде, делая код и ошибки компиляции нечитаемыми.
Такие люди пишут код, обмазанный шаблонами — и говорят "смотрите, как просто и красиво!". Да нихрена не просто и не красиво! Разбор такого кода вызывает у меня только головную боль.

Если все еще непонятно, о чем говорю — приведу пример — boost::spirit. Это просто экстремум шаблонофилии.

Ну или просто может я лох, а другие умные. Наболело, в общем.
Re: Метапрограммисты надоели
От: kurchatov  
Дата: 05.10.14 13:35
Оценка: -1
K>Если все еще непонятно, о чем говорю — приведу пример — boost::spirit. Это просто экстремум шаблонофилии.

лучше другое слово — шаблонизм. Или шаблоное**зм
Re: Метапрограммисты надоели
От: niXman Ниоткуда https://github.com/niXman
Дата: 05.10.14 13:38
Оценка: -1
Здравствуйте, kurchatov, Вы писали:

K>Откуда пошла эта мода на обмазывание шаблонами к месту и не к месту? Нет, я ничего не имею против шаблонов, если действительно надо — только приветствую.

K>Но в последние годы появился какой-то особенный класс С++ программистов, которые пихают шаблоны везде, делая код и ошибки компиляции нечитаемыми.
K>Такие люди пишут код, обмазанный шаблонами — и говорят "смотрите, как просто и красиво!". Да нихрена не просто и не красиво! Разбор такого кода вызывает у меня только головную боль.
ну... а у меня хобби — астрофизика, и это для меня дико сложно. но мне что, всех астрофизиков называть идиотами все усложняющими? посыл понятен?
(если не понятен, то — в своей тупости виноват только я, и мои генетические предки)

K>Если все еще непонятно, о чем говорю — приведу пример — boost::spirit. Это просто экстремум шаблонофилии.

спирит решает свой класс задач, и решает их очень эффективно, насколько это возможно в С++.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Отредактировано 05.10.2014 13:40 niXman . Предыдущая версия .
Re[2]: Метапрограммисты надоели
От: kurchatov  
Дата: 05.10.14 13:43
Оценка: +1 -1
Здравствуйте, niXman, Вы писали:

X>ну... а у меня хобби — астрофизика, и это для меня дико сложно. но мне что, всех астрофизиков называть идиотами все усложняющими? посыл понятен?

X>(если не понятен, то — в своей тупости виноват только я, и мои генетические предки)

Мой топик скорее о слесарях, использующих токарный станок там, где можно обойтись напильником.

K>>Если все еще непонятно, о чем говорю — приведу пример — boost::spirit. Это просто экстремум шаблонофилии.

X>спирит решает свой класс задач, и решает их очень эффективно, насколько это возможно в С++.

Да. Не считая нечитаемых ошибок при компиляции. Я вообще молчу о времени, которое занимает сама компиляция!
Re[3]: Метапрограммисты надоели
От: niXman Ниоткуда https://github.com/niXman
Дата: 05.10.14 13:49
Оценка: -1
Здравствуйте, kurchatov, Вы писали:

K>Да. Не считая нечитаемых ошибок при компиляции. Я вообще молчу о времени, которое занимает сама компиляция!

ну... это неотъемлемая часть с++

ну а ты что бы использовал? какую-нить pcre_библиотеку без возможности статического анализа выражений?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Отредактировано 05.10.2014 13:51 niXman . Предыдущая версия .
Re[4]: Метапрограммисты надоели
От: kurchatov  
Дата: 05.10.14 13:51
Оценка: +3 -1
Здравствуйте, niXman, Вы писали:

X>ну а ты что бы использовал? какую-нить pcre библиотеку без возможности статического анализа выражений?


Причем тут pcre? Spirit — это грамматики, так что скорее бизон какой-нибудь.

Вы тоже любите обмазываться шаблонами, да?
Re[5]: Метапрограммисты надоели
От: niXman Ниоткуда https://github.com/niXman
Дата: 05.10.14 13:53
Оценка: -3
Здравствуйте, kurchatov, Вы писали:

K>Причем тут pcre? Spirit — это грамматики, так что скорее бизон какой-нибудь.

да, напутал.
flex/bison — дико неудобно для С++. для С — да, выбора-то нет.

K>Вы тоже любите обмазываться шаблонами, да?

ну... я не знаю. со стороны виднее =)


а сообщения об ошибках неудобными будут до тех пор, пока компилятор не научится концептам, имхо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Отредактировано 05.10.2014 13:56 niXman . Предыдущая версия .
Re: Метапрограммисты надоели
От: Patalog Россия  
Дата: 06.10.14 01:47
Оценка: +2
Здравствуйте, kurchatov, Вы писали:

[]

В целом, излишняя шаблонизация прикладного кода — действительно ни к чему.

Что же касается
K>Если все еще непонятно, о чем говорю — приведу пример — boost::spirit. Это просто экстремум шаблонофилии.

Довольно таки странный пример. spirit — это либа, предоставляющая такие возможности (embedded EBNF), которые просто невозможно достичь иными способами. Если есть возможность (желание) использовать препроцессинг — никто не воспрешает, берите теплый ламповый bison.
Процитирую себя же =)

А меня все время мучает другой вопрос — нахрена писать код, в котором конечно ничего из знания языка кроме scanf знать не надо, но банальный парсер который на спирите пишется влет и занимает 50 строк вместе с вменяемой обработкой ошибок из коробки, занимает в конечном итоге сторок 500 и не падает только на тшательно подобранных входных данных?


Что касается ошибок и времени компиляции — во работа над этим ведется в х3 версия, использующая фичи С++11.
Почетный кавалер ордена Совка.
Re[2]: Метапрограммисты надоели
От: kurchatov  
Дата: 06.10.14 05:02
Оценка:
Здравствуйте, Patalog, Вы писали:


P>Довольно таки странный пример. spirit — это либа, предоставляющая такие возможности (embedded EBNF), которые просто невозможно достичь иными способами. Если есть возможность (желание) использовать препроцессинг — никто не воспрешает, берите теплый ламповый bison.


У spirit-a нет никаких преимуществ перед бизоном. Оба делают одно и то же, только первый — во время компиляции с нечитаемыми ошибками.
Re[2]: Метапрограммисты надоели
От: Kswapd Россия  
Дата: 06.10.14 05:53
Оценка: +1
P>spirit — это либа, предоставляющая такие возможности (embedded EBNF), которые просто невозможно достичь иными способами.

Да вот только не EBNF она предоставляет, а нечитаемую пародию на него. На практике от использования спирита возникает больше проблем, чем решается. Самое оптимальное почти во всех случаях — сделать прототип на ANTLR и написать рабочий парсер вручную по мотивам сгенерированного кода.
c++ boost spirit antlr
Re: Метапрограммисты надоели
От: alex_public  
Дата: 06.10.14 06:20
Оценка: +2
Здравствуйте, kurchatov, Вы писали:

K>Если все еще непонятно, о чем говорю — приведу пример — boost::spirit. Это просто экстремум шаблонофилии.


На самом деле не экстремум. Экстремум можно поискать где-то в области пересечения boost.mpl, boost.proto, boost.fusion... )

Что касается boost.spirit, то пожалуй не соглашусь. Во всяком случае пока никто не продемонстрирует мне настолько же удобный и быстрый аналог, но без "шаблонофилии".

Т.е. вот допустим есть тривиальная задачка: прочитать большой текстовый файл в специфическом формате (например какая-нибудь вариация на тему csv). Какое вы предложите решение, чтобы оно было быстродействующим и при этом занимало пару строчек кода? )
Re[2]: Метапрограммисты надоели
От: kurchatov  
Дата: 06.10.14 06:34
Оценка: +1
Здравствуйте, alex_public, Вы писали:

_>Что касается boost.spirit, то пожалуй не соглашусь. Во всяком случае пока никто не продемонстрирует мне настолько же удобный и быстрый аналог, но без "шаблонофилии".


что значит быстрый? Что спирит, что бизон делают одно — генерируют конечный автомат для парсинга. Быстрее вы парсинг не сделаете.

Удобный? boost::spirit? Ну вы неординарная личность.
Re[2]: Метапрограммисты надоели
От: PM  
Дата: 06.10.14 06:55
Оценка: +1
Здравствуйте, alex_public, Вы писали:

K>>Если все еще непонятно, о чем говорю — приведу пример — boost::spirit. Это просто экстремум шаблонофилии.


_>На самом деле не экстремум. Экстремум можно поискать где-то в области пересечения boost.mpl, boost.proto, boost.fusion... )


Для добавления экстремальности я бы еще добавил boost.preprocessor в эту компанию, хоть это и другой вид магии Вот пример: https://github.com/pmed/v8pp/blob/master/v8pp/call_from_v8.hpp — вызов С++ функции (или функции-члена) из JavaScript-движка V8. При вызове производится преобразование списка аргументов v8::Arguments из JavaScript к аргументам требуемой функции. Я не знаю как проще сделать это в С++03, только генерировать код руками/внешним скриптом.

Переписываю сейчас это на С++11 с variadic templates и радуюсь своему счастью

Или вот недавняя тема: http://rsdn.ru/forum/cpp.applied/5776544.flat
Автор: PM
Дата: 10.09.14
Автор использует boost.fusion потому что нет пока в языке compile-time reflection, а код генерировать надо. И генерация внешними инструментами им не подходит.

Шаблоны в С++ — один из эффективнейших инструментов. Так что не удивительно, что люди пытаются попробовать применить этот инструмент по-разному.
Re: Метапрограммисты надоели
От: ArtDenis Россия  
Дата: 06.10.14 06:56
Оценка: +4 -1
"Метапрограммисты надоели" — это только симптом. А реальная проблема — это отсутствие нормально поставленного процесса разработки, включающего обязательное наличие стандартов кодирования и ревью кода. Будет нормально поставлен процесс — таких проблем просто не будет возникать. А если и будет, то они будут решаться в оперативном порядке не мешая процессу.
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[2]: Метапрограммисты надоели
От: Хон Гиль Дон Россия  
Дата: 06.10.14 07:04
Оценка: +4
Здравствуйте, alex_public, Вы писали:

_>Что касается boost.spirit, то пожалуй не соглашусь. Во всяком случае пока никто не продемонстрирует мне настолько же удобный и быстрый аналог, но без "шаблонофилии".


_>Т.е. вот допустим есть тривиальная задачка: прочитать большой текстовый файл в специфическом формате (например какая-нибудь вариация на тему csv). Какое вы предложите решение, чтобы оно было быстродействующим и при этом занимало пару строчек кода? )


А зачем обязательно "пару строчек кода"? Если там будет 20 строк, но они будут понятнее и проще в отладке — чем это хуже? Причем, в случае со спиритом, они еще и быстрее компилироваться будут
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[3]: Метапрограммисты надоели
От: alex_public  
Дата: 06.10.14 07:15
Оценка: +1
Здравствуйте, kurchatov, Вы писали:

K>что значит быстрый? Что спирит, что бизон делают одно — генерируют конечный автомат для парсинга. Быстрее вы парсинг не сделаете.


Т.е. как вариант решения предлагается бизон? И это на C++ (а не на C)?

K>Удобный? boost::spirit? Ну вы неординарная личность.


А что там неудобного то при использование? При написание spirit'a (или копание в его исходниках) действительно требуется знание МП на шаблонах. Но при обычном использование же ничего не нужно. Вот какие особые знания шаблонной магии требуются для написания скажем такого parse(file.data(), file.data()+file.size(), int_[([&](const int& n){sum+=n; count++;})] % ','); простейшего кода?
Re[4]: Метапрограммисты надоели
От: kurchatov  
Дата: 06.10.14 07:24
Оценка:
Здравствуйте, alex_public, Вы писали:

_>А что там неудобного то при использование? При написание spirit'a (или копание в его исходниках) действительно требуется знание МП на шаблонах. Но при обычном использование же ничего не нужно. Вот какие особые знания шаблонной магии требуются для написания скажем такого parse(file.data(), file.data()+file.size(), int_[([&](const int& n){sum+=n; count++;})] % ','); простейшего кода?


Пример тривиальный. И это мы с вами знаем, как оно работает. А придет новичок в вашу команду, и сколько времени ему потребуется врубиться в грамматику посложнее?
Re[3]: Метапрограммисты надоели
От: alex_public  
Дата: 06.10.14 07:29
Оценка:
Здравствуйте, PM, Вы писали:

PM>Для добавления экстремальности я бы еще добавил boost.preprocessor в эту компанию, хоть это и другой вид магии Вот пример: https://github.com/pmed/v8pp/blob/master/v8pp/call_from_v8.hpp — вызов С++ функции (или функции-члена) из JavaScript-движка V8. При вызове производится преобразование списка аргументов v8::Arguments из JavaScript к аргументам требуемой функции. Я не знаю как проще сделать это в С++03, только генерировать код руками/внешним скриптом.


Да, да, есть такая штука. Я её использовал для автоматической генерации ORM (за неимением интроспекции времени компиляции в языке). Просто автор темки переживал именно за шаблоны. )

PM>Переписываю сейчас это на С++11 с variadic templates и радуюсь своему счастью


К сожалению не всё из препроцессора можно так переписать...

PM>Или вот недавняя тема: http://rsdn.ru/forum/cpp.applied/5776544.flat
Автор: PM
Дата: 10.09.14
Автор использует boost.fusion потому что нет пока в языке compile-time reflection, а код генерировать надо. И генерация внешними инструментами им не подходит.


Да, это как мне кажется самый большой недостаток языка (ну про сложность мы упоминать не будем) в данный момент. Но в данном случае boost.fusion — это всё же на мой взгляд уж слишком костыльное решение.
Re[3]: Метапрограммисты надоели
От: kurchatov  
Дата: 06.10.14 07:33
Оценка: 3 (1) +1 -4 :)))
C++ с годами становится все сложнее и сложнее. Особенно в последнее время, когда стандарты стали готовиться с невиданной скоростью (C++11, C++14, ...).

Отличный язык превращается в сложнейшего монстра. Группа гиков от программирования написала Boost, и я очень рад, что далеко не все компании (особенно топовые) решаются использовать его.
Это только удорожает и удлиняет разработку ПО. Скучаю по C++ 03.
Re[3]: Метапрограммисты надоели
От: alex_public  
Дата: 06.10.14 07:33
Оценка: +1
Здравствуйте, Хон Гиль Дон, Вы писали:

ХГД>А зачем обязательно "пару строчек кода"? Если там будет 20 строк, но они будут понятнее и проще в отладке — чем это хуже? Причем, в случае со спиритом, они еще и быстрее компилироваться будут


А кто сказал, что они будут проще? ) Не следует путать внутренности спирита (действительно довольно нетривиальные) и использование его в качестве готовой библиотеки.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.