Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
 Аватар для Ciyoxe
7 / 6 / 1
Регистрация: 29.10.2021
Сообщений: 14

Что бы вы изменили в дизайне c++?

29.10.2021, 17:52. Показов 4169. Ответов 66

Студворк — интернет-сервис помощи студентам
Тема ни о чём, просто напишите что думаете или мечтаете

Я очень люблю c++, альтернатив ему никаких и близко не вижу. И вот задумался, а что если...? У каждого программиста есть мечта создать свой собственный язык программирования с пасьянсом и барышнями, не так ли? Кажется, язык моей мечты очень близок к с++, но, как мне кажется, плюсики обладают некоторыми минусиками.

Если бы вы могли переделать что-либо в дизайне с++ (не оглядываясь на обратную совместимость и прочее такое, просто с корнями перелопатить всё), то что бы вы изменили? А какие новые возможности бы добавили? (сборщик мусора сразу в мусорку)
Заранее извиняюсь за весь бред ниже
Вот некоторые мои предложения. Что думаете? В чём я обделался?

0: Отказаться от совместимости с Сиии

1: Перемещение и копирование, классы и структуры
Вам не кажется, что семантика перемещения, все эти бесконечные конструкторы... дрянь?
Вам не кажется странным, что классы и структуры - по факту одно и то же?

Все объекты будут по умолчанию перемещаться, а точнее, просто тривиально копироваться с помощью memcpy().
Вместо конструкторов копирования будут вызываться явные методы (например object.clone())

Классы и структуры будут отличаться по своему поведению.

Структура не изменит своего настоящего поведения. Структура переместилась в новое место - старая структура никуда не делась и продолжила свою работу. Позже для неё вызвался деструктор.
По факту, для каждой копии вызывается деструктор.
То есть на один конструктор несколько деструкторов.
C++
1
2
3
4
5
6
7
{
    auto arr = std::vector<MyStruct()>();
    auto x = MyStruct();
    x.Foo(); //всё норм
    arr.push_back(x); // x тривиально скопировался
    x.Foo(); //всё норм
} //для x вызвался деструктор
А что же для классов? Тут правило простое. Один объект - один конструктор - один деструктор.
После перемещения класс забывается. Всё, его уже не существует и для него ничего не вызывается. Это будет жестко контролироваться компилятором.
C++
1
2
3
4
5
6
7
{
    auto arr = std::vector<MyClass()>();
    auto x = MyClass();
    x.Foo(); //всё норм
    arr.push_back(x); // x тривиально скопировался
    x.Foo(); //ошибка компиляции, x был перемещен
} //для x НЕ вызвался деструктор, он забыт
Проблемки начинаются с наследованием, но, как вариант, просто запретить наследование структур от классов

2: Приведения типов
Все неявные приведения типов будут запрещены. Никаких if ((int)x)
Оставить лишь один приведения - оператор as как заменитель static_cast + каст указателей,
например
C++
1
 auto i = x as double
Его можно будет перегружать
Вместо dynamic_cast была бы функция стандартной библиотеки, типа isInstanceOf<T>(T* object)->bool

3: встроенные типы как объекты
Разве не круто написать...?
C++
1
2
float x = 2;
float y = x.sqrt();
4: методы-расширения
У меня просто вопрос, возможно ли их вообще сделать в компилируемом языке типа c++?
Ведь для их использования нужно каждый раз компилировать всю программу целиком. Тогда о компиляции по отдельным единицам можно забыть и её время вырастет до небес? А возможно ли встраивать информацию о них в уже скомпилированные единицы? Как с этим справляется шарп?

5: Char бесполезен
Зачем делать отдельный тип для символов (да ещё городить огород из всяких char16_t char32_t), если можно использовать целые числа? А строки просто обернуть в класс string, который по факту vector<uint8_t>

6: ++ --
Ну...
C++
1
 int x = --(i++)++;
Уберите это, уберите!
++ можно ставить только справа от переменной, и означает он += 1. Всё.
Не надо нам никаких "Ну он увеличивает, потом возвращает, а этот возвращает, потом увеличивает"
Аналогично --

7: Указатели
Я бы вообще убрал чистые указатели. Есть ссылки, есть unique/shared.
Для особых случаев можно в стандартной библиотеке добавить раздел для отстрелов ног, включить туда функции работы с памятью напрямую (но вместо указателей адреса size_t)
Достаточно

8: Я хочу сахара
Кортежи не через зад, а с именованными параметрами
C++
1
2
3
4
(float x, float y) getPoint();
auto point = getPoint();
auto _x = point.x;
auto (x,y) = getPoint();
tagged unions и pattern marching (switch вообще удалить) (как в Rust)

Именованные параметры функций (если у функции миллиард необязательных параметров, а тебе нужно установить лишь последний из них)

Геттеры и сеттеры. Вместо функции int getX() {... будет свойство int get X() {...

Добавлено через 9 минут
Я совсем забыл..
9: Автовывод операторов
Перегрузили + - автоматически перегрузился +=
Перегрулили == - автоматически перегрузился !=
Перегрузили < и == - автоматически перегрузился <=
Почему нет?

Добавлено через 1 минуту
PS
Ну а шаблоны - это вообще длиннющий разговор, достойный отдельной темы
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.10.2021, 17:52
Ответы с готовыми решениями:

Что бы вы изменили?
Доброго времени суток! Скорее всего, по работе мне придется заниматься сайтом mamont.net Буду рад выслушать ваши мнение про юзабилити,...

Что бы вы изменили в конфигурации этого ПК!
Antec Gamer Nine Hundred Two V3 1175грн Antec High Current Pro 750W (HCP-750EC) ...

Что нужно поменять в дизайне сайта
Прошу помочь вас, как профессионалов. Я сам раньше занимался только системным программированием и никогда не заморачивался веб-дизайном....

66
 Аватар для Ciyoxe
7 / 6 / 1
Регистрация: 29.10.2021
Сообщений: 14
31.10.2021, 14:11  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от psergee Посмотреть сообщение
Если был бы нормальный compile-time синтаксис - норм.
Стало интересно. Есть какие идеи, как это могло бы выглядеть?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
02.11.2021, 02:34
Цитата Сообщение от psergee Посмотреть сообщение
Если человек без знания С++ встретит в коде write, то он хотя бы поймёт, что что-то куда-то пишется.
можно писать так: a plus b
в таком случае, человек без знания языка сможет понять,
что что-то с чем-то складывается.
но вариант: a + b лично мне нравится больше.



Цитата Сообщение от psergee Посмотреть сообщение
Мне подход с << не нравится.
другим нравится.


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


--------------

по теме:
я всё жду, когда ж в язык наконец-то добавят цивилизованную статическую рефлексию.

ещё хочется, что бы узаконили дебажный стафф.
например: что бы можно было кроссплатформенно,
без сложных приседаний получать стек вызовов.
в случае всякого рода сегфолдов, эксепшенов, и тп.
что бы сигналы стабильно поддерживались windows/posix одинаково,
и тп.


ещё хочется, что бы узаконили межпроцессовое взаимодействие.
что бы можно было цивилизованно запускать процессы,
и пробрасывать между ними связи.
что бы можно было разрабатывать кроссплатфоременные сервисы.
(boost::interprocess мне не нра)


ещё хочется, что бы узаконили сетевую подсистему
(boost::asio мне не нра)
2
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
02.11.2021, 12:17
А если бы еще бы нормальные строки завезли в стандартную библиотеку, было бы здорово.
0
147 / 135 / 50
Регистрация: 14.05.2021
Сообщений: 642
02.11.2021, 12:49
Цитата Сообщение от hoggy Посмотреть сообщение
другим нравится.
Без разницы, что другим нравится, это по факту дает когнитивную нагрузку, когда нужно помнишь, что за << в данном контексте и что за cout. А потом еще нужно помнить, что булевы операции для чисел внутри вывода нужно заключать в скобки, потому что с << от cout оно не сработается Но некогда было об этом думать, нужно было показать, какой ты крутой, что вместо обычного метода/функции можешь сделать вывод переопределением оператора.
Цитата Сообщение от hoggy Посмотреть сообщение
что фундаментальной основой его языка является идея демократических свобод.
Поэтому туда и понапихано всего столько, что уже неконсистентно.
Цитата Сообщение от hoggy Посмотреть сообщение
язык предоставляет программистам свободу самовыражения.
С ее тоже предоставляет прекрасно.
Цитата Сообщение от hoggy Посмотреть сообщение
Страуструп считает, что во многом, благодаря этой фундаментальной особенности,
язык и стал популярным.
Страуструп может считать все, что хочет. С++ в свое время просто выехал на популярности С. Нужно было всего лишь добавить классы. А в итоге старичок не смог никому сказать нет. В итоге все компании, которые оказывали влияние на стандарт, понапихали в язык всего, что когда-либо кому-либо могло пригодиться. Одно из последних, например - ranges. Модно, молодежно, функционально. Особенно модно views нарушают константность. Да, это, наверное, и есть свобода самовыражения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
template<typename T>
void foo(const T& v)
{
    v[0] = 666;
}
 
int main()
{
    std::vector<int> v(10);
    foo(v | ranges::views::take(5));
    cout << v[0] << endl;
}
Оно компилируется. Чудесно. Спасибо комитету, особенно, "товарищу" Эрику. И да, я не согласен с его "аргументами" за такое поведение на github.
Цитата Сообщение от hoggy Посмотреть сообщение
язык и стал популярным.
Благодаря наследию С.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
02.11.2021, 20:49
Цитата Сообщение от psergee Посмотреть сообщение
Без разницы, что другим нравится, это по факту дает когнитивную нагрузку
в твоей эгоистичной позиции есть логическая ошибка:
ты выдаёшь собственные когнитивные трудности за проблему языка.

на самом же деле это - только твоя проблема:
Цитата Сообщение от psergee Посмотреть сообщение
что за << в данном контексте и что за cout
у комьюнити в целом такой проблемы нет.
и многим нравится.

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

примеры таких мёртво рожденных в истории тоже имеются.
0
 Аватар для zayats80888
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
02.11.2021, 20:58
Цитата Сообщение от hoggy Посмотреть сообщение
boost::interprocess мне не нра
Цитата Сообщение от hoggy Посмотреть сообщение
boost::asio мне не нра
Не нравится сама реализация или то, что до сих пор в бусте, а не в стандартной библиотеке?
Просто по обычаю, если и добавят, то перенесут из буста(слегка "причешут" и/или "обрежут").
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
02.11.2021, 22:28
Цитата Сообщение от zayats80888 Посмотреть сообщение
Не нравится сама реализация или
дизайн.

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

но в том то и дело, что не хочется ничего велосипедить,
а хочется, что бы оно из коробки уже было и простое, и высокоуровневое,
и готовое к употреблению.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2021, 22:28

Что Вас смущает в этой подборке? чего не хватает? чтобы изменили?
Что Вас смущает в этой подборке? чего не хватает? что забыл? чтобы изменили? Цену превышать нельзя. Все уже впритык ( ...

Как найти то что можно улучшить в дизайне, юзабилити сайта?
Допустим стоит такая задача. Дают готовый сайт которые делали очень крутые дизайнеры и он уже функционирует долгое время и следует всем...

Негодяи изменили заставку =)
Здравствуйте! У меня такая проблема. Админю пункт коллективного пользования сети Интернет. На компьютере для пользователей отключены все...

Стрелки изменили назначение
Всем привет. Стрелки на клавиатуре изменили назначение, проверял на онлайн-тесте клавиатуре, стрелка вверх работает как page up, стрелка...

В БД access изменили тип данных
Здравствуйте, такая проблема, в бд access изменить в поле тип данных, бд была подключена с помощью мастера в проект C#. Как теперь поменять...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
67
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru