LINUX.ORG.RU
ФорумTalks

Почему настоящие программисты избегают C++


0

0

1.Отсутствие модулей. Имитация понятия модуль в виде пары h-файл – cpp-файл приводит к многочасовым компиляциям системы.

2.Использование целочисленных типов данных без знака (unsigned int) для номеров элементов и количественных значений в стандартной библиотеке stdc++. Приводит к следующим ошибкам:

std::vector<int> v; // Следующий код работает бесконечно, поскольку (size_type)(-1) == 4 млрд. for (std::vector<int>::size_type i = 0; v.size() - 1; ++i) { ... }

3.Отсутствие встроенной проверки на выход за диапазоны массива. Приводит к необходимости писать &#171;обертки&#187; для классов-контейнеров (в частности, для класса vector).

4.Отсутствие встроенных средств инициализации динамической памяти нулями при конструировании объектов оператором new. Оборачивается не выигрышем, а проигрышем в производительности, поскольку приводит к необходимости писать код инициализации в конструкторах.

5.&#171;Автоматизм&#187; конструкторов и деструкторов для объектов, создаваемых динамически и имеющих виртуальные методы; работа виртуальных методов как не виртуальных при их вызове из конструкторов и деструкторов; отсутствие стандартного базового класса. Значительно затрудняет решение проблемы повторного входа в объекты (reentrance problem) при создании библиотек визуальных компонентов и систем GUI.

6.Отсутствие оператора try {&#8230;} finally {&#8230;}. Приводит к созданию программ, неустойчивых к исключительным ситуациям. Попытка имитировать этот оператор с помощью оператора try {&#8230;} catch {&#8230;} приводит к большой избыточности кода.

anonymous

>Почему настоящие программисты избегают C++

кто это тебе сказал?

Pi ★★★★★
()
Ответ на: комментарий от Shaman007

Ты, шоман, видимо думаешь, что те, кто любит C++ - грамотные? Так ты ошибаешься. Всё совсем наоборот.

vsl
()

Это всё мелочи. Проблемы C++ гораздо более фундаментальны. Просто очень кривой дизайн...

vsl
()
Ответ на: комментарий от vsl

Я говорю, что безграмотен тот, кто встав с утра по раньше не находит ничего лучше, как развести муйню, по поводу очередного мирового вопроса, в Talks. C++ не шедевр, конечно, спору нет, но обсасывали это уже раз 40. Надоело ламерство.

Shaman007 ★★★★★
()
Ответ на: комментарий от vsl

>Это всё мелочи. Проблемы C++ гораздо более фундаментальны. Просто очень кривой дизайн...

Ага. Поэтому Гослинг и в 95-м научил Страуструпа, как писать ЯП ВУ

anonymous
()

Не, ну достали уже. Программеры чертовы. Вот интересно, что авто сего поста реального написал? Калькулятор на четыре операции не в счет.

Вам никто не мешает сидеть и писать GUI на lisp или ml и программить бизнес логику на pure C. Извращайтесь как хотите, только на глаза лезть со своими гениальными соображениями не надо!

svyatogor ★★★★★
()
Ответ на: комментарий от bugmaker

дауж после с++ никакие трудности нестрашны, вообще ничего не страшно, просто повеситься хочется

anonymous
()

>1.

есть такое понятие отделение интерфейса от реализации,
в C++ это можно сделать. Читай книжки. И еще современные
комерческие компиляторы умеют работать с прекомпилированными заголовками

>2.
>(std::vector<int>::size_type i = 0; v.size() - 1; ++i) { ... }

и что что этот код будет работать бесконечно долго?

если написать
while (true) {
}

это тоже будет работать бесконечно долго.

и в чем фишка?

почитай книжку как писать на C++

>3.

Вообще-то это сделано для повышения скорости,
для тупых в std::vector есть метод получения iго элемента
с проверкой,
читай документацию, ламо

>4.

и что?

забивать все нулями, мягко говоря не всегда правильно,
например написав на месте double все нули ты не обязательно
получишь 0.0
правильнее присвоить нужные значения
в констукторе

>5.

Это вообще полная чушь,
для библитек GUI обычно всегда пишется свой один базовый класс(см. например
gtkmm) и от него все наследуют.

И все работает.

>6.

Это решается контейнерами ресурсов.

Нормально написанная программа может почти не содержать
блоков try и catch, но ресурсы при исключения освобождать правильно.


Вывод:

1)прежде чем писать на чем-либо надо изучить язык
2)вам лучше всего заняться чем-либо отличным от программирования

anonymous
()
Ответ на: комментарий от svyatogor

Видишь, шоман, есть такие, кто считает, что C++ - шедёвр...

vsl
()
Ответ на: комментарий от anonymous

Да блин. Приплюснутые мозги... Обработка исключений - это вовсе не только освобождение ресурсов.

vsl
()
Ответ на: комментарий от vsl

>Да блин. Приплюснутые мозги... Обработка исключений - это вовсе не только >освобождение ресурсов.

finally используется как раз для этого, для остального catch подходит

да и вообще все принтензии звучат как:
это не похоже на Java и я не умею на нем программировать,
поэтому это отстой

так же кричат пользователи переходящие с Windows на Linux,
о черт побери, здесь нету кнопки пуск - отстой

anonymous
()

По пунктам 1 и 2 он прав =(

> 3.Отсутствие встроенной проверки на выход за диапазоны массива. Приводит к необходимости писать обертки для классов-контейнеров (в частности, для класса vector).

См. vector::at(). Все там есть, просто есть возможность этим не пользоваться.

> 4.Отсутствие встроенных средств инициализации динамической памяти нулями при конструировании объектов оператором new. Оборачивается не выигрышем, а проигрышем в производительности, поскольку приводит к необходимости писать код инициализации в конструкторах.

Забивать память нулями - это не инициализация. Ты, видимо, имел в виду инициализацию значениями по умолчанию - что ж, этого действительно нет, но при сильном желании сделать можно (хинт: placement new).

> 5."Автоматизм"; конструкторов и деструкторов для объектов, создаваемых динамически и имеющих виртуальные методы; работа виртуальных методов как не виртуальных при их вызове из конструкторов и деструкторов;

Строго говоря, это вполне логичный подход. В момент выполнения конструктора базового класса, производные еще не инициализированы, поэтому невозможно в общем случае гарантировать корректное выполнение их не-static методов.

> отсутствие стандартного базового класса

Не то чтобы сильно нужно, но местами действительно напрягает. Очевидно, следствие кривой реализации множественного наследования в C++ (virtual base и все такое).

> Отсутствие оператора try .. finally

Не имеет особого смысла в языке, активно использующем концепцию RAII. Если класс использует системные ресурсы, то он должен высвобождать их в деструкторе, который будет вызван в любом случае. Для указателей есть smart pointer'ы.

int19h ★★★★
()
Ответ на: комментарий от anonymous

>Рулит Алгол, я уже написал об этом:

Это сто пудов!

Algol
()

>1.Имитация понятия модуль в виде пары h-файл &#8211; cpp-файл приводит к многочасовым компиляциям системы.

Имитация модуля в виде h-файла и несколких маленьких cpp-файлов может и сократить время компиляции ( если изменяется маленький cpp-файл ).

К перекомпиляции всего проекта приводит не отсутствие/наличие понятия модуля в языке, но существующие зависимости между модулями системы.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.