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

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

29.10.2021, 17:52. Показов 4165. Ответов 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
Злостный нарушитель
 Аватар для Verevkin
10915 / 5843 / 1289
Регистрация: 12.03.2015
Сообщений: 26,947
30.10.2021, 17:17
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DrOffset Посмотреть сообщение
можно было бы дать ссылку на видео, где создателям UNIX задали подобный вопрос, но ты ведь всегда сможешь сказать "конечно, так они и признались", правда ведь?
Не знаю. Но меня устраивает первоначальная версия - о том, что Си - это прикол. Для чего-то, ведь, его сделали таким сложным, а?

Я когда вспоминаю описание процедурных типов, у меня начинает голова болеть.
З.Ы. По долгу службы мне приходится писать софт и на Си, и на Паскале. Вот я и сравниваю.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
30.10.2021, 17:20
Цитата Сообщение от Verevkin Посмотреть сообщение
Для чего-то, ведь, его сделали таким сложным, а?
Он не был сложным для своего времени.
https://www.youtube.com/watch?v=JoVQTPbD6UY

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

https://www.youtube.com/watch?v=EY6q5dv_B-o
0
Злостный нарушитель
 Аватар для Verevkin
10915 / 5843 / 1289
Регистрация: 12.03.2015
Сообщений: 26,947
30.10.2021, 17:25
Цитата Сообщение от DrOffset Посмотреть сообщение
Если уж говорить серьезно, то текст шутки просто не выдерживает фактологической проверки. Если рассмотреть сведения, которые представлены в статье, то легко можно обнаружить фактические противоречия, которые первым делом указывают на то, что статья - фейк.
Продолжай.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
30.10.2021, 17:26
Цитата Сообщение от Verevkin Посмотреть сообщение
Продолжай.
Цитата Сообщение от DrOffset Посмотреть сообщение
не выдерживает фактологической проверки.
Я просто покажу как это делается, дальше сможете сами.

Например, в статье утверждается, что заявление было сделано на конференции "UnixWorld Software Development Forum".
Давайте поищем, что это за конференция такая?
Очень скоро мы обнаружим, что все ссылки с упоминанием этой конференции ведут только на эту шуточную статью. Неужели, если бы она правда существовала, это было бы так?
0
Злостный нарушитель
 Аватар для Verevkin
10915 / 5843 / 1289
Регистрация: 12.03.2015
Сообщений: 26,947
30.10.2021, 17:34
Цитата Сообщение от DrOffset Посмотреть сообщение
Он не был сложным для своего времени.
Кстати, как это понимать? В те времена люди мыслили иначе?
Пусть статья - фейк, но в ней есть правильный акцент на то, что язык Си сделан сложным намеренно.

Добавлено через 3 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Например, в статье утверждается, что заявление было сделано на конференции "UnixWorld Software Development Forum".
Давайте поищем, что это за конференция такая?
Очень скоро мы обнаружим, что все ссылки с упоминанием этой конференции ведут только на эту шуточную статью. Неужели, если бы она правда существовала, это было бы так?
Да я и не утверждаю, что статья подлинная. Но кто-то, ведь, её написал жэж! И изложенные в ней вещи вполне логичны (именно "логичны", а не "кажутся логичными"). Мне нравится сама гипотеза, что язык сделан сложным искусственно. Шоп жысь мёдом не казалась.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
30.10.2021, 17:41
Цитата Сообщение от Verevkin Посмотреть сообщение
Кстати, как это понимать? В те времена люди мыслили иначе?
Конечно.
По сравнению с тем, что было до Си - это было гораздо проще.

Люди мыслят сообразно времени, в котором живут.
Вот здесь современный человек пытается управлять машиной 20-х годов, можно посмотреть за его впечатлениями: https://youtu.be/Lr_aZ20W4k4?t=1031
Намеренно сделали управление таким сложным? Там ведь и ошибка в управлении может привести к травме или выходу из строя машины.

Просто посмотри видео
https://www.youtube.com/watch?v=JoVQTPbD6UY
Они с первых секунд говорят, что стремились сделать использование компьютера проще.
И ведь учитывать стоит не только восприятие человеком, но и возможности реализации.
0
Злостный нарушитель
 Аватар для Verevkin
10915 / 5843 / 1289
Регистрация: 12.03.2015
Сообщений: 26,947
30.10.2021, 18:02
Цитата Сообщение от DrOffset Посмотреть сообщение
По сравнению с тем, что было до Си - это было гораздо проще.
Согласен. Но со временем ничего не изменилось. Кроме людей, которые отупели.
Цитата Сообщение от DrOffset Посмотреть сообщение
Они с первых секунд говорят, что стремились сделать использование компьютера проще.
И ведь учитывать стоит не только восприятие человеком, но и возможности реализации.
Ты забываешь, что я Си с Паскалем сравниваю, а не с ассемблером.

Добавлено через 14 минут
Я думаю, что из-за искусственного усложнения и возникают пачками вот такие вопросы на форумах: Не могу передать объект класса в функцию
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
30.10.2021, 18:11
Цитата Сообщение от Verevkin Посмотреть сообщение
я Си с Паскалем сравниваю
Они создавались фактически одновременно, совершено разными людьми и для разного круга задач. Ты сравниваешь Си с Паскалем, но создатели Си не могли этого сделать. А даже если бы и могли, то задачи поставленные перед языками отличались. Т.е. оценивать надо не сферическую простоту в вакууме, а применительно в конкретному кругу задач и условий.
Например, разумеется Си был намеренно сделан близким к типичным машинным инструкциям, но только чтобы упростить переход программистов на ассемблере на него. Т.е. да, изначально большая высокоуровневость упростила бы язык абстрактно, но не для тех, на кого он был ориентирован - программистов операционной системы.

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

Цитата Сообщение от DrOffset Посмотреть сообщение
следствие попытки упрощения существовавшей до этого семантики, которая приводила к неочевидному поведению.
Особенности ссылок
0
Злостный нарушитель
 Аватар для Verevkin
10915 / 5843 / 1289
Регистрация: 12.03.2015
Сообщений: 26,947
30.10.2021, 18:11
Цитата Сообщение от DrOffset Посмотреть сообщение
Т.е. да, изначально большая высокоуровневость упростила бы язык абстрактно, но не для тех, на кого он был ориентирован - программистов операционной системы.
Да ёмаё, я не про это. Я имел в виду ТОЛЬКО СИНТАКСИС. И ничего более.
И я пытаюсь кого-то в чём-то переубедить. Я чисто субъективно пытаюсь понять, ЗАЧЕМ синтасис хорошего языка программирования сделали таким кривым и непонятным.

И ВСЁ. Только это.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
30.10.2021, 18:13
Цитата Сообщение от Verevkin Посмотреть сообщение
Я чисто субъективно пытаюсь понять, ЗАЧЕМ синтасис хорошего языка программирования сделали таким кривым и непонятным.
...
Цитата Сообщение от DrOffset Посмотреть сообщение
И ведь учитывать стоит не только восприятие человеком, но и возможности реализации.
https://habr.com/ru/post/435292/
0
Злостный нарушитель
 Аватар для Verevkin
10915 / 5843 / 1289
Регистрация: 12.03.2015
Сообщений: 26,947
30.10.2021, 18:14
Цитата Сообщение от DrOffset Посмотреть сообщение
Забавно, что именно этот вопрос - следствие попытки упрощения существовавшей до этого семантики, которая приводила к неочевидному поведению.
Вот я про то и говорю. Неужели нельзя было ИЗНАЧАЛЬНО разработать семантику, исключающую UB? Ну как так-то, а?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
30.10.2021, 18:15
Нужно просто разобраться что есть такое было PDP-11 и все встанет на свои места. Не нужно оценивать Си с колокольни современных систем, это будет большой ошибкой.

Добавлено через 56 секунд
Цитата Сообщение от Verevkin Посмотреть сообщение
Неужели нельзя было ИЗНАЧАЛЬНО разработать семантику, исключающую UB?
Нельзя, потому что UB - это следствие упрощения компилятора и кода, который он делает, и следствие попытки охватить большой объем архитектур.
0
Злостный нарушитель
 Аватар для Verevkin
10915 / 5843 / 1289
Регистрация: 12.03.2015
Сообщений: 26,947
30.10.2021, 18:17
Цитата Сообщение от DrOffset Посмотреть сообщение
Нельзя, потому что UB - это следствие упрощения компилятора, и следствие попытки охватить большой объем архитектур.
Чо?

Пример приведи, плез.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
30.10.2021, 18:20
Цитата Сообщение от Verevkin Посмотреть сообщение
Пример приведи, плез.
Ну вот например, переполнение знакового числа в C - UB.
Почему?
Да потому что разные архитектуры по-разному к этому относятся.
И чтобы нам сделать общее для всех решение - нужно его эмулировать программно.
И что мы в итоге получаем? Усложнение кода, который нам сделал компилятор, его более медленную работу.
Для каких-то задач это может быть приемлемым компромиссом, но только не для задачи написания операционной системы.
0
30.10.2021, 18:21

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Ну вот например, переполнение знакового числа в C - UB.
В каком-то докладе Полухин рассказывал, что хотели пофиксить в стандарте C++ UB при переполнении знаковых и получили существенное снижение производительности в каких-то задачах/архитектурах.

0
Злостный нарушитель
 Аватар для Verevkin
10915 / 5843 / 1289
Регистрация: 12.03.2015
Сообщений: 26,947
30.10.2021, 18:31
Цитата Сообщение от DrOffset Посмотреть сообщение
Ну вот например, переполнение знакового числа в C - UB.
Разве это UB?
Имхо, это, как раз, нормальное поведение программы. Если рукожопый программист не знает, как хранятся и обрабатываются процессором данные, то он сам дурак.
Да и причём тут семантика, которую мы тут обсуждаем?

Добавлено через 5 минут
Вот это UB или не UB?
C++
1
b += a++ * --b / ++a - ++b;
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
30.10.2021, 18:32
Цитата Сообщение от Verevkin Посмотреть сообщение
Разве это UB?
Да.
Цитата Сообщение от Verevkin Посмотреть сообщение
как хранятся и обрабатываются процессором данные
А кто вам сказал, что все процессоры делают это одинаково?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
30.10.2021, 18:32
Цитата Сообщение от Verevkin Посмотреть сообщение
Разве это UB?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
30.10.2021, 18:34
Цитата Сообщение от Verevkin Посмотреть сообщение
Да и причём тут семантика, которую мы тут обсуждаем?
А в том коде и нет UB.
Его не было раньше,
а сейчас это вообще абсолютно предсказуемая ошибка компиляции.
0
Злостный нарушитель
 Аватар для Verevkin
10915 / 5843 / 1289
Регистрация: 12.03.2015
Сообщений: 26,947
30.10.2021, 18:35
Цитата Сообщение от Croessmah Посмотреть сообщение
А кто вам сказал, что все процессоры делают это одинаково?
А я этого и не утверждал. Но знаковый бит - он и в африке знаковый бит. Независимо от языка программирования.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.10.2021, 18:35

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Особенности 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