OberonCore
https://forum.oberoncore.ru/

Критика С++
https://forum.oberoncore.ru/viewtopic.php?f=61&t=5959
Страница 3 из 8

Автор:  Валерий Лаптев [ Вторник, 06 Ноябрь, 2018 16:20 ]
Заголовок сообщения:  Re: Критика С++

Добавлю еще.
Главный недостаток С++, на мой взгляд, состоит в его главном принципе:
все, что не запрещено (явно) - разрешено.
Именно по этой причине С++ очень плох для первоначального обучения.
Для новичков - это просто катастрофа.
Я в лекциях и на лабах постоянно подчеркиваю противоположность принципов С++ и Оберона (КП).
Поэтому и в Семантике мы сделали принцип Оберона:
все, что не разрешено - запрещено.

Мне, как С++нику с многолетним стажем понятно, что исходно С создавался профессионалами для профессионалов, а отнюдь не для обучения новичков.
Профессионалы в силу опыта жестко соблюдают дисциплину разработки.
Принципы SOLID - наше все.
Методы-функции - МАЛЕНЬКИЕ, каждая делает только ОДНУ работу.
Классы - маленькие, каждый делает ОДНУ работу...
Деление на модули (коих так и нет в С++), и т.д., и т.п.

Автор:  Info21 [ Вторник, 06 Ноябрь, 2018 21:52 ]
Заголовок сообщения:  Re: Критика С++

С++ плох для всего. Абсолютное зло.

Автор:  Валерий Лаптев [ Среда, 07 Ноябрь, 2018 07:02 ]
Заголовок сообщения:  Re: Критика С++

Info21 писал(а):
С++ плох для всего. Абсолютное зло.

Нет, Федор Васильевич.
Поскольку у меня стаж работы с ним более 25 лет могу сказать,
что С++ явно служит испытательным полигоном новых фич.
Разработчики новых языков довольно часто смотрят на С++ и НЕ включают в новый язык то или иное средство С++.
Могу также достаточно уверенно утверждать, что комитет по С++ - это такая локальная песочница,
в которой "чужие не ходят"... :)))
Мужики заигрались в своей песочнице, строят свои песочные замки из песка и на песке и плохо видят, что происходит вокруг.
Это я опять о психологии программистов.
Мне повезло (как обычно), и я - на стыке.
Вижу обе стороны... :)

Автор:  prospero78 [ Среда, 07 Ноябрь, 2018 08:08 ]
Заголовок сообщения:  Re: Критика С++

Если С++ это песочница, то она просто невероятных размеров, песок расползается во все стороны. И вообще непонятно, как стоят километровые домики из песка на тоненьких ножках, но иногда падают целыми кварталами без видимых причин))

Автор:  Rifat [ Среда, 07 Ноябрь, 2018 10:47 ]
Заголовок сообщения:  Re: Критика С++

У Дейкстры это было описано уже много лет назад https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html:
Цитата:
Finally, although the subject is not a pleasant one, I must mention PL/1, a programming language for which the defining documentation is of a frightening size and complexity. Using PL/1 must be like flying a plane with 7000 buttons, switches and handles to manipulate in the cockpit. I absolutely fail to see how we can keep our growing programs firmly within our intellectual grip when by its sheer baroqueness the programming language —our basic tool, mind you!— already escapes our intellectual control. And if I have to describe the influence PL/1 can have on its users, the closest metaphor that comes to my mind is that of a drug. I remember from a symposium on higher level programming language a lecture given in defense of PL/1 by a man who described himself as one of its devoted users. But within a one-hour lecture in praise of PL/1. he managed to ask for the addition of about fifty new “features”, little supposing that the main source of his problems could very well be that it contained already far too many “features”. The speaker displayed all the depressing symptoms of addiction, reduced as he was to the state of mental stagnation in which he could only ask for more, more, more... When FORTRAN has been called an infantile disorder, full PL/1, with its growth characteristics of a dangerous tumor, could turn out to be a fatal disease.

PL/1 заменить на C++ и все останется точно таким же.

Автор:  Валерий Лаптев [ Среда, 07 Ноябрь, 2018 11:20 ]
Заголовок сообщения:  Re: Критика С++

prospero78 писал(а):
Если С++ это песочница, то она просто невероятных размеров, песок расползается во все стороны. И вообще непонятно, как стоят километровые домики из песка на тоненьких ножках, но иногда падают целыми кварталами без видимых причин))

Ну дык!
Кто-то из великих много лет назад (вроде бы даже и до появления С++) сказал: если бы программисты строили дома, то первый же залетевший дятел разрушил всю цивилизацию... :))))

Эта песочница сейчас позволяет писать в самых разных стилях:
- процедурном;
- объектно-ориентированном;
- обобщенном;
- функциональном (с некоторыми доработками)
И еще и метапрограммирование, блин, есть!

Вопрос состоит в самоограничениях пользователя С++.
С этим - БОЛЬШАЯ проблема.

Но еще напомню:
С++ унаследовал ВСЕ свойства С.
Например, нифига не проверять границы массива и целое переполнение.
В угоду эффективности.
Опять же кто-то из великих сказал, что в угоду эффективности было совершено больше глупостей, чем за всю историю человечества (очень приблизительно).
Эффективность была важна в 60-е и начале 70-х.
Сейчас даже персоналка имеет характеристики суперЭВМ 80-х.
Но переполнение целых аппаратурой по-прежнему не отслеживается.
Естественно, не отслеживается и в языках.
Исключение Ада, не?

Автор:  Валерий Лаптев [ Среда, 07 Ноябрь, 2018 11:29 ]
Заголовок сообщения:  Re: Критика С++

Кстати, обнаружил 5-тилетней давности статью Архипенкова на хабре:
https://habr.com/company/r-style/blog/185310/
Начало весьма интересное:
Цитата:
А. «Серебряной пули нет», сказал Ф.Брукс еще в прошлом веке и надолго остудил пыл благородных рыцарей от программирования в борьбе с «Драконом сложности». С тех пор «его Величество Дракон» служит оправданием тому, что пользователям вместо одних плохо работающих программ, навязываются все новые и новые, которые не намного лучше, но пожирают все больше ресурсов процессоров и памяти компьютеров («А что? Пипл хавает!» (с) Б.Титамир). В угоду Дракону выращена целая армия программистов типа «code & fix» («делай и переделывай»): «Не умением, а числом!», «Рефакторинг – наше все!», «Программировать могут даже члены республиканской партии!», написано на их знаменах. Чтобы прокормить Дракона, каждый день они создают гигабайты исходного кода, значительная часть которого никогда не будет востребована пользователями. За прошедшие годы этот отвратительный Дракон разросся и стал «Идеей. Исторической необходимостью. Нашим государственным интересом. Могущественным фактором, оправданием наших объединенных усилий».

Не менее занимательное заключение:
Цитата:
Программирование — это новый вид человеческой деятельности, которая по ошибке отнесена к инженерии.
Инженерия – это та область, где применяются законы естественных наук, математики, физики, химии для конструирования новых продуктов. В разработке ПО еще не открыты свои законы Ньютона, нет уравнений Лагранжа или хотя бы сопромата, которые помогли бы спроектировать и доказать правильность архитектуры новой нетривиальной программной системы.

Программирование – это гуманитарная дисциплина и серьезных продвижений в ее теоретическом основании можно добиться лишь, используя достижения гуманитарных наук: философии, психологии, лингвистики, семиотики и др. Но почему-то большинство программистов считают себя именно инженерами, а не лингвистами. Возможно, после прочтения данной публикации, кто-то начнет рассуждать об альтернативном мышлении.

Автор:  Rifat [ Среда, 07 Ноябрь, 2018 12:27 ]
Заголовок сообщения:  Re: Критика С++

Валерий Лаптев писал(а):
Цитата:
Программирование — это новый вид человеческой деятельности, которая по ошибке отнесена к инженерии.
Инженерия – это та область, где применяются законы естественных наук, математики, физики, химии для конструирования новых продуктов. В разработке ПО еще не открыты свои законы Ньютона, нет уравнений Лагранжа или хотя бы сопромата, которые помогли бы спроектировать и доказать правильность архитектуры новой нетривиальной программной системы.

Программирование – это гуманитарная дисциплина и серьезных продвижений в ее теоретическом основании можно добиться лишь, используя достижения гуманитарных наук: философии, психологии, лингвистики, семиотики и др. Но почему-то большинство программистов считают себя именно инженерами, а не лингвистами. Возможно, после прочтения данной публикации, кто-то начнет рассуждать об альтернативном мышлении.

Видимо человек, который написал, что программирование не инженерная дисциплина, ничего не слышал про Дейкстру, Хоара, Флойда и других ученых.

Автор:  Kemet [ Среда, 07 Ноябрь, 2018 12:41 ]
Заголовок сообщения:  Re: Критика С++

Валерий Лаптев писал(а):
Но переполнение целых аппаратурой по-прежнему не отслеживается.
Чего это вдруг? Устанавливаются специальные флаги. Бери и проверяй.

Автор:  Валерий Лаптев [ Среда, 07 Ноябрь, 2018 14:35 ]
Заголовок сообщения:  Re: Критика С++

Kemet писал(а):
Валерий Лаптев писал(а):
Но переполнение целых аппаратурой по-прежнему не отслеживается.
Чего это вдруг? Устанавливаются специальные флаги. Бери и проверяй.

Не возникает прерывания, как при делении на ноль!
Хотя справедливости ради надо сказать, что конкретно в Интел есть команда, позволяющая установить диапазон и проверять.
И прерывание таки возникает.
Но много ли языков ее использует? :)

Так что наше все - это воспитание правильных принципов в программистах.
Самоограничение - основа всего.

Автор:  Comdiv [ Среда, 07 Ноябрь, 2018 16:03 ]
Заголовок сообщения:  Re: Критика С++

Валерий Лаптев писал(а):
С++ унаследовал ВСЕ свойства С
Отнюдь, например, в С++ более строгая типизация в отношении перечислений и указателей.

Цитата:
Например, нифига не проверять границы массива и целое переполнение.
В угоду эффективности.
Такого свойства у С нет. В стандарте это записано как неопределённое поведение, что означает, что его определение отдано на откуп создателям исполнителя языка. Ровно тоже самое верно для Оберона. Просто все по разному распоряжаются свободой, заданной документами. Впрочем, и в С++ можно распорядиться свободой правильно, что в последнее время подтверждается добавлением опций компиляторов -fsanitize=undefined -fsanitize-undefined-trap-on-error.

Немного подробней об отношении неопределённого поведения к безопасности можно почитать в моей заметке Язык C безопаснее Java из-за неопределённого поведения

Автор:  Борис Рюмшин [ Среда, 07 Ноябрь, 2018 16:49 ]
Заголовок сообщения:  Re: Критика С++

Валерий Лаптев писал(а):
Kemet писал(а):
Валерий Лаптев писал(а):
Но переполнение целых аппаратурой по-прежнему не отслеживается.
Чего это вдруг? Устанавливаются специальные флаги. Бери и проверяй.

Не возникает прерывания, как при делении на ноль!

Там не нужно прерывание, а проверить всегда можно. Kemet прав.

Автор:  Борис Рюмшин [ Среда, 07 Ноябрь, 2018 16:51 ]
Заголовок сообщения:  Re: Критика С++

Rifat писал(а):
Видимо человек, который написал, что программирование не инженерная дисциплина, ничего не слышал про Дейкстру, Хоара, Флойда и других ученых.

Это такой способ узаконить и обосновать тот бардак, который царит в отрасли.

Автор:  prospero78 [ Четверг, 08 Ноябрь, 2018 07:52 ]
Заголовок сообщения:  Re: Критика С++

Дома можно строить ровно так же -- не по плану, а на глазок. Если так кто-то делает -- от этого строительство домов не становится гуманитарной дисциплиной.
Так что, выдержка из статьи -- самооправдание и лень.

Автор:  Trurl [ Четверг, 08 Ноябрь, 2018 08:40 ]
Заголовок сообщения:  Re: Критика С++

Валерий Лаптев писал(а):
Хотя справедливости ради надо сказать, что конкретно в Интел есть команда, позволяющая установить диапазон и проверять.
И прерывание таки возникает.
Но много ли языков ее использует? :)

Вот только и INTO, и IBOUND неприлично дороги и становятся все дороже с новыми моделями процессоров.

Автор:  Валерий Лаптев [ Четверг, 08 Ноябрь, 2018 11:05 ]
Заголовок сообщения:  Re: Критика С++

Trurl писал(а):
Вот только и INTO, и IBOUND неприлично дороги и становятся все дороже с новыми моделями процессоров.

То есть, опять во славу эффективности пренебрегаем надежностью.
Не являются ли эффективность и надежность - ортогональными понятиями? :)

Автор:  Comdiv [ Четверг, 08 Ноябрь, 2018 17:41 ]
Заголовок сообщения:  Re: Критика С++

Trurl писал(а):
Вот только и INTO, и IBOUND неприлично дороги и становятся все дороже с новыми моделями процессоров.
В 64 разрядном режиме нет ни INTO, ни BOUND, но производительность проверок особо не страдает.

Автор:  Илья Ермаков [ Четверг, 08 Ноябрь, 2018 17:42 ]
Заголовок сообщения:  Re: Критика С++

Специфическая роль С++, действительно, как полигона заключается в том, что это единственная площадка, где можно определять новые синтаксисы в статически типизированном языке, находящемся непосредственно над машиной.

Динамических вагон и маленькая тележка, завышенного уровня аля Скала - тоже.

И параллель "Компонентный Паскаль - это то, каким должен был бы быть С++, если бы не совместимость с Си и не принципиальная гарантия свободы выбора способов выстрела в ногу для программиста" - очень ценна, кстати.

Автор:  Comdiv [ Четверг, 08 Ноябрь, 2018 17:50 ]
Заголовок сообщения:  Re: Критика С++

Валерий Лаптев писал(а):
Не являются ли эффективность и надежность - ортогональными понятиями? :)
Не являются, потому что между ними есть связь - для обеспечения надёжности проверки должны быть дешёвыми, в том числе и быстрыми. Если это будет не так, то надёжностью в конечном итоге пожертвуют. При этом и глубокие статические проверки корректности и глубокие оптимизации требуют общую часть - анализатор кода. Кстати, в gcc и clang можно рекомендовать собирать программу с высоким уровнем оптимизации - это позволяет выявлять дополнительные ошибки.

Автор:  Валерий Лаптев [ Четверг, 08 Ноябрь, 2018 18:23 ]
Заголовок сообщения:  Re: Критика С++

Илья Ермаков писал(а):
И параллель "Компонентный Паскаль - это то, каким должен был бы быть С++, если бы не совместимость с Си и не принципиальная гарантия свободы выбора способов выстрела в ногу для программиста" - очень ценна, кстати.

Поэтому есть мысль определить в ББ подходящее подмножество С++ и переводить его на КП.
Интересно посмотреть, какие могут возникнуть трудности.

Страница 3 из 8 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/