ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
1041661 Топик полностью
Kabdim (02.10.2020 12:28, просмотров: 623) ответил fk0 на Ты пытаешьсая упорно подвести к тезису, мол в языке есть некоторый функционал позволяющий выстрелить себе в ногу, ты сам лично пару ног себе отстрелил, поэтому язык негодный и плохой, а ровно такие же языки только без этого функционала -- мол лучше. Потому, что выстрелить в ногу нельзя. Чушь. Считаешь функционал лишним, не нужным -- можешь его попросту не использовать. В данном конкретном случае. Потому, что в общем это не совсем так, в общем он далеко не лишний, т.к.
Мой тезис не в том что есть мой вариант и неправильный. А в том что метапрограммирование как оно есть со всеми способами применения, которые я видел, не очень хороший инструмент, лучше которого можно найти варианты для достаточно большого кол-ва случаев. Собственно хорошо оно только там где его невозможно заменить - в области специфкации шаблонов контейнеров и оно должно кмк там остаться. А с этой узкой областью справилась бы любая компиляторная магия, вместо же этого был 

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

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

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

Можно пользоваться плохими инструментами, особенно если выбора нет, но считать их идеальными, за то что они безальтернативны в конкретном языке, или какими-то особенными - нет нужды. И давай сравнивать не с C#, Java (которые все таки прикладные языки) и не с С (который еще на поколение старше), а с к примеру rust'ом, который тоже системный язык. И многое там сделано с оглядкой на опыт плюсов и получилось лучше.