среда, 19 февраля 2020 г.

[prog.sadness] Чем больше шуму вокруг C++20 тем больше хочется уйти с C++ вообще

Да уж... Давно я не испытывал такого сильного желания свалить с C++ на какой-нибудь другой язык программирования, как после новостей о завершении работ над C++20 😒 😒 😒

Я даже не могу понять, что тому виной. Может быть то, что хочется держаться подальше от языка, в котором, в принципе такая хитровывернутая система модулей, что сходу в нее и не въедешь. Тем более после 35 лет вполне себе успешного существования без этих самых модулей... Как по мне, так C++ нужно было оставлять без модулей и дальше, а проблему долгой компиляции решать каким-то другим способом.

Может быть потому, что не хочется в очередной раз проходить путь адаптации кардинальных изменений в новом стандарте. Я уже через это прошел когда появился C++98, а потом и C++11. Оба раза это занимало годы и годы оглядываний на старые компиляторы, в которых стандартом либо еще не пахнет, либо же он реализован частично. Даже сейчас еще бывают случаи, когда приходится пользоваться компилятором с неполной поддержкой C++11... Так что впереди еще лет десять привыкания к C++20.

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

Может быть потому, что языку 35 лет, новые стандарты начали штамповать каждые три года, а важные принципиальные разногласия в C++ сообществе так и не устранены. Например, исключения и RTTI часто оказываются под запретом, а сама стандартная библиотека языка вряд ли сможет работать с полностью отключенными исключениями. Или без возможности использовать динамическую память.

Может быть потому, что C++ реально начинает прогибаться до земли под собственной тяжестью, поскольку когда пишешь вот в таком вот стиле, то начинает казаться, что слишком уж много приходится указывать вручную:

class Demo {
  [[nodiscard]] bool empty() const noexcept;
  ...
};

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

Может быть это старческая боязнь перемен...

А скорее всего все это в совокупности.

И хотя умом понимаю, что адекватной замены C++ все равно нет. И у меня нет особых проблем с решением на С++ тех задач, с которым приходится сталкиваться...

Но все равно есть какое-то подсознательно-неосознанное ощущение "а не пора ли свалить с этого перегруженного корабля, у которого на мостике творится одно, в машинном отделение -- другое, а в трюме все вообще по-другому?"

5 комментариев:

Sergey Borisov комментирует...

Уже давно высказывание Линуса про то как в плюсы тащат всё подряд, весьма актуально.
https://lkml.org/lkml/2013/8/31/138

Это не из "git на c++", это другая дискуссия.
И вот когда принялись за С++ 20, я согласился с Линусом...

Sergey Borisov комментирует...

Мне кажется большая проблема - куча изменений, и держать в голове ещё и когда какие были приняты в какой стандарт, чтобы использовать их на текущем проекте, где можно использовать что-то из С++11/14/17/20 - это тоже лишняя работа

eao197 комментирует...

@Sergey Borisov

Язык должен развиваться. И, т.к. он используется в совершенно разных нишах, то и развиваться должен в разных направлениях.

Вот те же концепты в языке должны быть. И контракты хотелось бы видеть.

Хотя, наверное, сейчас уже можно сказать, что темп выпуска новых стандартов раз в 3 года оказался слишком быстрым, чтобы индустрия успевала переваривать выход новых стандартов. Возможно, следует сделать какой-то другой порядок. Раз в четыре года, скажем. Или раз в пять лет один мажорный стандарт, а спустя два года после выпуска мажорного делать минорный баг-фикс стандарт. Тогда бы могло бы быть C++11 -- мажорный, C++13 -- минорный, корректирующий. С++18 -- мажорный, а C++20 -- минорный, корректирующий. С++25 опять мажорный...

Но хотя бы работа по развитию стандарта не замирает на 10 лет, как было в начале 2000-х, и то хорошо.

Тут скорее вопрос во мне самом: хочу ли я продолжать вариться в этом котле.

ssko комментирует...

Мое мнение - C++ исходно создан из-за недостатка средств абстракции в C. И семантика C++ практически совпадает с семантикой C - манипуляции над низкоуровневыми данными. Но C++ "had a dream" - из низкоуровневых кирпичиков создавать сколь угодно высокоуровневые абстракции. Все отличия C++ от C, по сути, сводятся к добавлению средств абстрагирования.
Мое мнение - этой мечте не суждено было стать 100% реальностью. C++ как средства создания DSL/абстракций оказался недостаточно масштабируемым: низкоуровневые небольшие абстракции получались чудо как хороши, а вот при их комбинации в более высокоуровневые сложности возрастали экспонетциально и результат оказывается трудно предсказуемым. Иногда получается, иногда (и часто) - нет. Разработчикам с выдающимися способностями удаются замечательные вещи, но массового распространения эти вещи не получают.
По прошествии многих лет использования C++ мне идея создания такого "единого языка" для всего кажется малоосудествимой.
Но желание у большого числа "грандов" и просто квалифицированных разработчиков осталось, отсюда эклектичный и перегруженный стандарт.

eao197 комментирует...

@ssko

Мне все-таки более близка мысль, что C++ создан из-за недостаточной скорости Simula, нежели из-за недостатка средств абстракции в C.