Здравствуйте, Кодёнок, Вы писали:
Кё>Здравствуйте, alexeiz, Вы писали:
Д>>>4. Замыканий
A>>Функторы.
Кё>Бред. Вот пара примеров навскидку:
...
Все примены из Nemerle идут лесом. Сравнивать C++ с функциональным языком, это слоны и бегемоты. Подумай тот ли язык программирования ты выбрал, если тебе приходится писать функциональный код. Здесь идет сравнение с C# — основным языком программирования для .NET.
Кё>Ты можешь сказать, что у тебя таких ситуаций не было. А почему не было? Потому что тебе не приходило в голову, что так можно, исключительно из-за того, что на С++ это делать трудно и результат получается непонятным.
Твоё обобщение не имеет смысла. Пока что ты показал, что из C++ трудно сделать функциональный язык. Это так. Но не то, что C++ — не является языком высокого уровня.
Кё>Наличие замыканий — это дополнительный уровень абстракции. Недавно всплывали числа Черча — чем не абстракция? На С++ эта абстракция недоступна.
Опять в том же стиле. Ты не понимаешь о чём речь. Никто не пытается сказать, что всё можно сделать на C++ (легко).
Д>>>5. Уверенности в том, что безобидный на вид код не окажется злостным UB
A>>Не замечено. Давай ты приведёшь пример well-formed C++ кода, использующего высокоуровневые абстракции, в котором тебя ждут упомянутые тобой проблемы.
Кё>Не раз в форуме C++ были темы с безобидной функцией, в которой находили до десятка потенциальных проблем. Проблема как раз в выделенном — трудно сразу сказать, является код ill-formed, или это well-formed с UB, или всё правильно. К примеру:
Кё>Кё>struct A
Кё>{
Кё> T* x, y;
Кё> A() : x (new T), y (new T) {}
Кё>};
Кё>
Никаких проблем. Каждый человек, знакомый с исключениями не по наслышке увидит в этом коде ошибку. Конечно, тот, кто имел дело с C, может такое написать. Но о том и речь. C++ нужно изучать. В изучение входит не только синтаксис языка, но и основные методы программирования на нём.
Д>>>2. Необходимость писать килограммы оберток каждый раз, когда тебе нужно использовать чужую библиотеку (см п.1 и п.2)
A>>Проблемы библиотек. Объясни мне, как херовые сторонние библиотеки вдруг стали проблемой языка?
Кё>Всегда были. Я тебе продемонстрировал
Ты еще ничего не продемонстрировал.
> Такие мелочи, когда из-за недостатка фич в языке неожиданно приходится писать какую-то муть, в совокупности заставляют отказаться от некоторых выгодных стилей программирования. Например, мне бы хотелось услышать, как ты объяснишь новичку в С++ (умеющему создать вектор чисел и отсортировать) приведенную реализацию Sort, зачем там ещё класс, почему так? Или может приведёшь более понятную реализацию (отсортировать два двухмерных массива (jagged) по заданному номеру столбца, опционально с инверсией)?
А, вот что ты имел ввиду в своем коде. Абсолютно бредовый код, честно говоря. Но C++ — это язык не для новичка. Про новичков вопрос отдельный. C++ в настоящее время больше ориентирован на профессионалов.
Д>>>3. Заботливо разложенные на каждом шагу грабли, в качестве ярких примеров — vector<bool>, auto_ptr в котейнерах, и прочие радости.
A>>Эти грабли хорошо изветсны и никакой опасности не представляют.
Кё>
Кё>Про массив auto_ptr все знают. Везде написано. А вот про это — не везде:
Кё>Кё>void foo(auto_ptr<T> param)
Кё>{
Кё>}
Кё>
Ха! Ты привёл один из основных способов использования auto_ptr. Я уж не знаю, где ты что читал, если тебе это не было сразу объяснено.
A>>Все твои "аргументы" даже и на йоту не ближе к тому, чтобы показать, что на С++ нельзя программировать на высоком уровне абстракции.
Кё>Насколько высоком? Более высоком, чем на Си? Да. На не менее высоком, чем позволяет любой другой существующий язык? Увы, нет.
Более высоком, чем на C#. См название темы. Я не собираюсь обсуждать здесь функциональные языки программирования.
Кё>Факт в том, что в других языках есть нужные и полезные возможности, которых в С++ нет.
Где?