ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
22 декабря
1041746 Топик полностью
fk0, легенда (02.10.2020 18:36, просмотров: 751) ответил Kabdim на >> Твой тезис именно в том, что вот какой-то функционал ты объявляешь априори плохим ссылаясь на свою негативную практику
Я не о восторгах, а о том, что C++ позволяет вещи невозможные на других языках. А ты объявляешь то одно, то другое "плохим" исключительно базируясь на своём негативном опыте. 

Разбирался, писал. Вообще boost мало предназначен для практического программирования, это скорей экспериментальная библиотека, в которой полно своих проблем. Но там есть действительно полезные кусочки отсутствующие в штатной библиотеке. Например, трансформирующий итератор, std::any, any_iterator -- пришли из буста и это действительно полезны сущности, которые полноценно реализовать без метапрограммирования и на других языках -- либо сложно, либо жутко неэффективно.


Лямбда в C++ костыль, а в C# -- не костыль? Просто потому, что C++ это не C#? Ничем особенным лямбда не является, это по сути синтаксический сахар для структуры определённой внутри функции и содержащей свою функцию operator()(). Ranged loop тоже не более чем синтаксический сахар для for (auto it = X.begin; it != X.end(); ++it). Концепты -- но это же аналог where используемого совместно с генериками в "хорошем" C#. А тут вдруг костыли. А на самом деле по сути тоже синтаксических сахар. То же самое можно пытаться делать из без концептов (с помощью static_assert, с помощью нечитаемых нагромождений из enable_if и т.п. Здесь по сути нет ничего нового. А вот в C# потребовалось ключевое слово where, там то же самое не сделать никак (нет метапрограммирования).


Другие языки -- это только Rust? Я сказал, он ущербен в части метапрограммирования. А это один из краеугольных камней ЯВУ будущего.


Никаких проблем в "ошибках на пару десятков страниц" я не вижу. Видел. У компилятора есть лимит на вложенность шаблонов при показе ошибок, и чтоб увидеть пару десятков страниц его нужно вначале подкрутить. А так выводит только начало и конец (современные GCC и Clang). Неудобно конечно, но что ещё хотеть от рекурсивно раскрываемых макросов? Можно как-то по другому ошибки показывать? Не могу даже представить. Если C-препроцессор начать (псевдо)рекурсивно использовать, то будут ещё более запутанные и длинные сообщения. Для шаблонов хоть переданные в аргументах значения раскрываются. Любой язык где образуются длинные рекурсии будет иметь похожий вывод с ошибками. Принципиальной проблемы с отладкой нет, неудобно -- да. Есть там намёки на реальные причины, на самом деле если от верху до низу руками размотать и внимательно прочитать, то всё понятно. Про времена GCC-3.3 не знаю, и не хочу знать. Сейчас -- есть. И во времена GCC-6.x -- были. Там ж все шаги по раскрытию шаблона приведены, и типы или значения аргументов, и строчки кода в которых оно произошло. Выглядит страшно -- да, но сказать, мол "здесь ничего не понятно" нельзя. И лучше решать проблемы с отладкой шаблонов в C++ в момент компиляции, чем искать ошибки в момент исполнения с другими языками, где всё что не смогли сделать в компиляторе -- выносится в рантайм.

[ZX]