История изменений
Исправление
Legioner,
(текущая версия)
:
Можно примеры кривости и того как она мешает жить?
Массив байтов, обозванный строкой, например. Ну и в принципе отсутствие поддержки обработки текста, жить можно только с библиотеками вроде Qt. Побитовый сдвиг, обозванный оператором вывода. В принципе отсутствие нормальной библиотеки потоков (streams), с композициями и прочими удобствами. Какие-то безумные сложности для банального преобразования числа в строку (правда тут может были подвижки в последних стандартах, по крайней мере в бусте это было проще). Какие-то придуманные на ровном месте проблемы с исключениями в деструкторе. Вот закрыл я файл в деструкторе, а он не закрылся, close() вернул ошибку. И что мне делать? В любом другом языке я выкину ошибку тем или иным образом. В C++ я могу только поругаться в консоль. Ну или упасть. Хороший выбор. Отсутствие стектрейсов у исключений. Зоопарк реализаций стандартных структур данных. Слишком гибкая система классов (нет общего предка, полноценное множественное наследование), которая в итоге получилась переусложнённой и тянущей слишком сложную реализацию (например указатель на базовый класс может не совпадать с указателем на класс-наследник) без каких-либо преимуществ в итоге.
И, что самое обидное, несмотря на всю заявленную мощь и выразительность C++ залазишь в реализацию STL и видишь
iterator _M_allocate_and_copy(size_type __n, const_iterator __first,
const_iterator __last)
это ведь ужасно.
Так ведь используют их потому что ничего лучше нет. Но подозреваю, что если бы добавили «нормальное метапрограммирование», то тебе тоже не понравилось - ведь язык стал менее «простой и понятный».
Когда отвёрткой забивают гвозди, ничего хорошего в этом нет. Если нормальное метапрограммирование добавят, мне это понравится. Нормальное это либо как в Scheme (и как в Rust-е) — через макросы и паттерн-матчинг, либо как в старом Lisp-е — просто через функции, преобразующие AST и запускаемые при компиляции. Может ещё варианты есть, не знаю. Но шаблоны это плохой вариант.
Исходная версия
Legioner,
:
Можно примеры кривости и того как она мешает жить?
Массив байтов, обозванный строкой, например. Ну и в принципе отсутствие поддержки обработки текста, жить можно только с библиотеками вроде Qt. Побитовый сдвиг, обозванный оператором вывода. В принципе отсутствие нормальной библиотеки потоков. Какие-то безумные сложности для банального преобразования числа в строку (правда тут может были подвижки в последних стандартах, по крайней мере в бусте это было проще). Какие-то придуманные на ровном месте проблемы с исключениями в деструкторе. Вот закрыл я файл в деструкторе, а он не закрылся, close() вернул ошибку. И что мне делать? В любом другом языке я выкину ошибку тем или иным образом. В C++ я могу только поругаться в консоль. Ну или упасть. Хороший выбор. Отсутствие стектрейсов у исключений. Зоопарк реализаций стандартных структур данных. Слишком гибкая система классов (нет общего предка, полноценное множественное наследование), которая в итоге получилась переусложнённой и тянущей слишком сложную реализацию (например указатель на базовый класс может не совпадать с указателем на класс-наследник) без каких-либо преимуществ в итоге.
И, что самое обидное, несмотря на всю заявленную мощь и выразительность C++ залазишь в реализацию STL и видишь
iterator _M_allocate_and_copy(size_type __n, const_iterator __first,
const_iterator __last)
это ведь ужасно.
Так ведь используют их потому что ничего лучше нет. Но подозреваю, что если бы добавили «нормальное метапрограммирование», то тебе тоже не понравилось - ведь язык стал менее «простой и понятный».
Когда отвёрткой забивают гвозди, ничего хорошего в этом нет. Если нормальное метапрограммирование добавят, мне это понравится. Нормальное это либо как в Scheme (и как в Rust-е) — через макросы и паттерн-матчинг, либо как в старом Lisp-е — просто через функции, преобразующие AST и запускаемые при компиляции. Может ещё варианты есть, не знаю. Но шаблоны это плохой вариант.