OberonCore https://forum.oberoncore.ru/ |
|
Критика С++ https://forum.oberoncore.ru/viewtopic.php?f=61&t=5959 |
Страница 6 из 8 |
Автор: | Trurl [ Четверг, 29 Ноябрь, 2018 23:51 ] |
Заголовок сообщения: | Re: Критика С++ |
budden писал(а): Слушайте, ну я мехмат МГУ как-никак окончил. Пусть и с синим дипломом. Вот вы посмотрите: в библиотеке языка А есть функция "включить NumLock", а в языке Б (например, в каком-нибудь условном JavaScript) такой функции нет, и стороннюю библиотеку подключить нельзя, и вызвать внешнюю программу тоже нельзя. На тьюринг полноту все эти особенности не влияют. Теперь что? А что будет включать программа на языке А, если её запустить на смартфоне? |
Автор: | Kemet [ Пятница, 30 Ноябрь, 2018 10:20 ] |
Заголовок сообщения: | Re: Критика С++ |
Trurl писал(а): А что будет включать программа на языке А, если её запустить на смартфоне? Проблема в семантике - синтаксические конструкции языка А вполне можно автоматически транслировать в конструкции языка Б, Но получить семантически идентичную программу, в общем случае, невозможно. |
Автор: | Artyemov [ Пятница, 30 Ноябрь, 2018 16:25 ] |
Заголовок сообщения: | Re: Критика С++ |
Ну нельзя же так! Программа на языке "А" (или "B" ?) и железо "X" (или "Y" ?) - смешиваем "белое" с "острым". |
Автор: | Comdiv [ Суббота, 01 Декабрь, 2018 14:51 ] |
Заголовок сообщения: | Re: Критика С++ |
budden писал(а): Ну и любите же вы спорить ради спора! Совершенно неправильное понимание. Цитата: Вот вы представьте себе, что вы не на форуме, а вам заказали перевести программу с Си на JS, и что она не работает. Вы будете заказчику рассказывать, как космические корабли бороздят? Денег-то вам не заплатят, если лампочка не загорается. Когда передо мной встала задача переноса кода в окружение браузера, я воспользовался "космическим кораблём, бороздящим просторы большого театра" и это работало - заказчикам понравилось. Если бы я пользовался таким же уровнем понимания в отношении того, что возможно, а что нет, как у многих моих коллег, мне, вероятно, не пришло бы это в голову.
|
Автор: | Comdiv [ Суббота, 01 Декабрь, 2018 15:47 ] |
Заголовок сообщения: | Re: Критика С++ |
Валерий Лаптев писал(а): Если вернуться к критике С++, то обозначу, на мой взгляд, самый вредные вещи: А как это вообще возможно в формально определённой системе, которая задаёт, что возможно, то есть отсекает максимальный набор возможностей?1. Принцип "все, что не запрещено - разрешено" Цитата: 3. Абсолютная бесконтрольность действий с указателями. Неопределённое поведение - это не асболютная бесконтрольность, а выбор злых буратин.Возьмём пример: Код: static void set(int arr[][4], int i, int j) { arr[i][j] = 1111; } extern int main(void) { int arr[4][4]; set(arr, 2, -4); return 0; } Код: $ cc -g -fsanitize=undefined -fsanitize-undefined-trap-on-error violation.c -o violation По-моему, какой-то контроль имеется$ gdb -q violation Reading symbols from violation...done. (gdb) run Starting program: violation ... Program received signal SIGILL, Illegal instruction. 0x0000555555554697 in set (arr=0x7fffffffd8b0, i=2, j=-4) at violation.c:2 2 arr[i][j] = 1111; (gdb) backtrace #0 0x0000555555554697 in set (arr=0x7fffffffd8b0, i=2, j=-4) at violation.c:2 #1 0x00005555555546e5 in main () at violation.c:6 Цитата: Все остальное - это мелочи. Сложный и объёмный язык с ловушками понимания, который никто не знает досконально - это мелочи? Это одна из главных проблем.
|
Автор: | Валерий Лаптев [ Суббота, 01 Декабрь, 2018 16:26 ] |
Заголовок сообщения: | Re: Критика С++ |
Цитата: Сложный и объёмный язык с ловушками понимания Вот это - следствие 1 принципа, и 2 принципа. Я, например, собираюсь в Семантике сделать конструкторы. Но умолчаний - не будет. Посмотрим, что получится... |
Автор: | Comdiv [ Суббота, 01 Декабрь, 2018 18:12 ] |
Заголовок сообщения: | Re: Критика С++ |
Что здесь делается по умолчанию, и что из некорректного здесь разрешено? Код: bool a,b;
while (a = b) ------------- a = ask ? b : c + 1; ---------------- char const *s[] = { "\n\n\n\n\n\n\n", "\n\n\n\n\n\n\n," "\n\n\n\n\n\n\n", "\n\n\n\n\n\n\n", }; --------------- void set(char a[4]) { for (int i = 0; i < 4; i++) a[i] = '0'; } int main() { char a[3]; set(a); } ---------------- void set(int *p, int &r) { if (p != (void *)0); *p = 3; // ссылка не указатель, не может быть нулевой r = 4; } void set(int *p) { // не может, не может set(p, *p); } int main() { // и, действительно, не может set((int *)0); } |
Автор: | Валерий Лаптев [ Воскресенье, 02 Декабрь, 2018 10:20 ] |
Заголовок сообщения: | Re: Критика С++ |
Да все это - фигня. Грамотные программисты так не пишут. А вот то, что создаются конструкторы по умолчанию, и вызываются где ни попадя по умолчанию - это жесть. И всякие преобразования по умолчанию типа инт -> bool. А еще, не дай Бог, написать в классе функцию преобразования - разгребай потом неявные вызовы. |
Автор: | Comdiv [ Понедельник, 03 Декабрь, 2018 10:58 ] |
Заголовок сообщения: | Re: Критика С++ |
Раз уж Вы упомянули эти проблемы, можете подробней их осветить? Желательно с примерами из жизни. Боюсь, правда, что они тоже подпадут по "грамотные программисты так не пишут". Вот, к примеру, как грамотный программист может написать функцию преобразования, которая может привести к проблемам? Он либо не станет её писать, либо сделает её беспроблемной. |
Автор: | Валерий Лаптев [ Понедельник, 03 Декабрь, 2018 11:19 ] |
Заголовок сообщения: | Re: Критика С++ |
Не, писать не буду. Никогда не занимался написанием специальных проблемных программ. Пишу сразу правильно, иногда возникают проблемы, которые исправляю и забываю. Лучше вы напишите, что, помимо мной написанного, вы считаете важным недостатком С++. |
Автор: | Comdiv [ Среда, 05 Декабрь, 2018 00:15 ] |
Заголовок сообщения: | Re: Критика С++ |
Я уже описал их и указал на то, что это не является следствиями выведенных Вами 3-х пунктов. Для меня главный недостаток - это то, что С++ популярен, поэтому приходится иметь с ним дело. Иногда только для того, чтобы выкинуть. Например, недавно коллега написал генератор С++ кода с использованием vector. На мою часть это оказывало ужасное последствия - код собирался неприемлемо долго, а если не закрыть браузер и IDE, то и просто вешало систему из-за нехватки 8 ГиБ памяти. Без малейшего усложнения кода я заменил в генераторе кода С++ с vector на Си c массивами и время сборки упало в ~30 раз. Зачем мне эта возня? Или пытаешься прочитать код, а там что-то вроде Код: (a ->* b)() Зачем мне разбираться в этих крючках, количество которых со временем только растёт? Я, конечно, понимаю, что с новыми стандартами С++ становится чуть лучше, но одновременно с этим и хуже, и это нельзя исправить. Не мучайте мутанта, лучше закопайте.
|
Автор: | Валерий Лаптев [ Среда, 05 Декабрь, 2018 07:06 ] |
Заголовок сообщения: | Re: Критика С++ |
Не... С++ - это полигон для испытаний разных фич. Другие смотрят - и делают попроще и по-другому... |
Автор: | Info21 [ Среда, 05 Декабрь, 2018 08:37 ] |
Заголовок сообщения: | Re: Критика С++ |
Это не полигон, а пруд-отстойник. |
Автор: | Comdiv [ Среда, 05 Декабрь, 2018 11:17 ] |
Заголовок сообщения: | Re: Критика С++ |
Валерий Лаптев писал(а): Не... А где там новые возможности для испытаний? Может грядущие модульность и контракты? Сколько им лет? Не испытаны ли они до сих пор? Может и ООП в своё время они испытывали, чего до них не было абсолютно нигде?
С++ - это полигон для испытаний разных фич. Другие смотрят - и делают попроще и по-другому... |
Автор: | Илья Ермаков [ Среда, 05 Декабрь, 2018 11:36 ] |
Заголовок сообщения: | Re: Критика С++ |
В этой части, конечно, там не полигон, а палата инвалидов. Но в части шаблонов в сочетании с семантикой введения операций над сущностями в плюсовых библиотеках есть, на что глянуть. В плане экспериментов с DSL. А потом отжать и упростить до укладывания даже на текущий КП. |
Автор: | Борис Рюмшин [ Среда, 05 Декабрь, 2018 12:55 ] |
Заголовок сообщения: | Re: Критика С++ |
Это надо не в Си с крестами смотреть, а в первоисточниках. |
Автор: | Валерий Лаптев [ Среда, 05 Декабрь, 2018 14:52 ] |
Заголовок сообщения: | Re: Критика С++ |
Да вот хотя бы с шаблонами. Посмотрели, как это в С++ - и сделали по-другому в Додиезе и Ява... |
Автор: | Info21 [ Среда, 05 Декабрь, 2018 14:57 ] |
Заголовок сообщения: | Re: Критика С++ |
Валерий Лаптев писал(а): Да вот хотя бы с шаблонами. Можно пояснить про шаблоны в Додиезе и Яве?
Посмотрели, как это в С++ - и сделали по-другому в Додиезе и Ява... |
Автор: | Валерий Лаптев [ Среда, 05 Декабрь, 2018 17:34 ] |
Заголовок сообщения: | Re: Критика С++ |
В отличие от шаблонов C++ генерики додиеза и явы используются по прямому назначению: создание обобщенного класса с параметром-типом. В С++ шаблоны - это полный по тьюрингу язык. Вследствие чего возникло целое направление - метапрограммирование. это УЖОС_УЖОС_УЖОС! А в гкенериках додиеза и явы - все просто и понятно. И работают генерики на этапе выполнения - в отличие от С++, где шаблоны работают на этапе компиляции... |
Автор: | Comdiv [ Среда, 05 Декабрь, 2018 17:38 ] |
Заголовок сообщения: | Re: Критика С++ |
Могу пояснить за Java. В ней сделали дженерики не "не так, как в С++", а так, чтобы это в неё влезло с учётом наследия. Как здесь помогает опыт С++ неясно. Сама идея был обкатана задолго до С++. В дженериках Java есть своя особенная кривизна. Ещё было бы интересно узнать, кто позиционирует С++ как полигон для отладки? Неужели у Страуструпа такое есть? |
Страница 6 из 8 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |