Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/47: Рейтинг темы: голосов - 47, средняя оценка - 4.81
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367

Почему С++ отстой до 2020 года

07.03.2016, 11:58. Показов 9300. Ответов 55
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Это не холиварная тема, здесь мы не спорим, какой язык лучше!

Ну что, недавно собирался комитет стандартизации, который обсуждал будущее - С++17. И в итоге? Что же будет добавлено в столь долгожданный стандарт после релиза С++14, который был минорым и лишь доводил до ума фичи С++11?

1) Параллелизм (STL)
2) Файловая система
3) ... Вы думали, что будет еще что-то? Да нет, из фич, которые как-то заметно влияют на разработку, это все. Это все, Карл!

Концепты - пфф, нам и так хорошо - родные и уродливые длинные сообщения об ошибках в шаблонах, а также безобразная магия enable_if в SFINAE, - чего еще желать?
Диапазоны? Можно расслабиться, они без концептов не работают. И Слава Богу, а то пришлось бы осиливать столь сложную вещь!
Модули? Ну ребят, у нас и так все быстро компилируется, особенно если буст подключить. Не зажируем ли? И да, cmake куда лучше пакетного менеджера!
Конкурентность? Дык кто не пишет на низкоуровневых примитивах, тот неосилятор!
Сети, корутины? Кого волнует, идите-ка вы на ...буст.
Рефлексия, контракты? Да зачем? Без них куда проще жить, юзать нечитабельные либы и писать велосипеды!

В общем, С++17 я бы точно не назвал мажорной версией стандарта, поскольку НЕ ВИЖУ, КАКИЕ РЕАЛЬНО НАСУЩНЫЕ ПРОБЛЕМЫ ОН РЕШАЕТ. А сколько шуму-то было после С++11/14! И это печально, потому что следующего шага после С++11 приходится ждать 10 лет, а конкуренты не дремлют.

Почему так получилось? Ну потому что С++ слишком сложен, а поэтому добавление или исправление вещей, которые реально нужны и важны занимают слишком много времени и усилий.

На рынке С++ по-прежнему будет скатываться в свои ниши - в ниши, где производительность критична.
А С++ разработчики по-прежнему будут жить с С++ без удовольствия, частенько похаживая на сторону к другим языкам.

У меня все. Если кто-то хочет меня дополнить, исправить, или просто выразить свое мнение и послать в дальние места - велкам!
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.03.2016, 11:58
Ответы с готовыми решениями:

По введенному года с 1950 до 2020 вывести на экран название соответствующего названия года по восточному календарю (1 - мышь, 2 - бык, 3 - тигр, 4 - к
По введенному года с 1950 до 2020 вывести на экран название соответствующего названия года по восточному календарю (1 - мышь, 2 - бык, 3 -...

Интересует актуальность/вредность книги "Разгони свой сайт" 2008 года в 2020
Добрый. Вечерами на сон грядущий привык читать по диагонали всякое разное около-профильное. В одном обсуждении ситуации вокруг...

Гусеницы - отстой?
Потихоньку и у меня зреет мысль о построении робота. Купил себе в качестве будущей платформы танк, вчера пришел заказ по почте. Ну и вчера...

55
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
11.03.2016, 16:06  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от NotNot Посмотреть сообщение
и отличается оно от плясок с enable_if, собственно, отсутсвием enable_if
О том и речь. Для падавана выглядит просто как изменение синтаксиса.

В принципе, можно как-то так написать (выкинул все лишнее, чтоб понятней было), но это все равно не так хорошо, как могло бы быть, если б появился настоящий static if с возможностями директив условной компиляции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
template <typename ResourceType>
concept bool NotClonable() {
  return !requires (ResourceType resource) {
    { resource.clone() } -> void;
  };
}
 
struct Helper { void clone() { std::cout << "Helper.clone\n"; } };
struct ResourceC { void clone() { std::cout << "ResourceC.clone\n"; } };
struct Resource {};
 
template<typename T>
struct Base {};
 
template<typename T> requires NotClonable<T>()
struct Base<T> {
    Helper helper;
};
 
template<typename T>
struct Foo: Base<T> {
    void clone() {
        constexpr if (NotClonable<T>()) {
            this->helper.clone();
        } else {
            res.clone();
        }
    }
    T res;
};
 
int main() {
    Foo<ResourceC> f1;
    Foo<Resource> f2;
    f1.clone();
    f2.clone();
}
3
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.03.2016, 21:25
Цитата Сообщение от hoggy Посмотреть сообщение
"улучшенного с++"
Лучшее враг хорошего.
Вобщем мораль сей басни - когда то давно Вирт назвал С макроассемблером а не языком высокого уровня. Керниган и Ритчи по этому поводу просто покрутили пальцем у виска. А молодой Страуструп когда узнал о таком высказывании воспринял это как обиду. И понеслась шаблономазня с целью сделать типа безопасность как в паскале. При этом смотря его выступления видно что он напрочь забыл кое какие элементарные вещи. К примеру такие что Move simantic и т.п. неприменимы если адреса получателя фиксирован (сплошь и рядом если получателем выступает мапировная в ОЗУ память девайса),причем архитектуру получателя в таком случае переделать нельзя. что итерация вектора через итераторы внешним сравнивателем-переборщиком с передачей в него лямбды которая сравнивает значения в разы тормознее простого фора за счет кучи Indirect Call на каждой итерации, и т.д. и т.п. Что шаблонмазня не по месту только снижает читабельность, при этом куча дел которые эти шаблоны почти делают решается простыми расширениями синтаксиса.
Ну и как бы похоже было напрочь забыто то, что для того чтобы указатели были безопасными умными должны быть объекты которые их используют а не сами указатели. В силу принципа суперпозиции (комбинация оптимальных элементов не гарантирует оптимальность комбинации)
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
11.03.2016, 22:42
Цитата Сообщение от hoggy Посмотреть сообщение
а всякие неосиляторы плакать, и жаловаццо:
Сообщение от Nick Alte
метапрограммирование выполняется на побочных эффектах, а не на явно предназначенных для этого конструкциях
Я хотел потратить завтра час-другой на составление подробного аргументированного ответа на предыдущее сообщение, но твоё хамство лишило тебя право на какое-либо уважение с моей стороны, так что теперь отвечать я считаю излишним. Мне надоело выслушивать с твоей стороны идиотские беспочвенные обвинения во лжи, бреде и неосиляторстве, поэтому общение с тобой я прекращаю. Что же до "неосиляторства", то здесь ты как всегда ошибся. Я неоднократно с успехом использовал SFINAE в своих проектах. Моя статья на эту тему - вторая в выдаче гугла, сразу после википедии. В следующий раз постарайся поменьше говорить всякую чушь, а лучше сначала разберись в деле хорошенько.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
11.03.2016, 23:19
Цитата Сообщение от ct0r Посмотреть сообщение
можно как-то так написать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template<typename T> requires NotClonable<T>()
struct Base<T> {
    Helper helper;
};
template<typename T>
struct Foo: Base<T> {
    void clone() {
        constexpr if (NotClonable<T>()) {
            this->helper.clone();
        } else {
            res.clone();
        }
    }
    T res;
};
от чего будет наследование, если концепт зафейлится?
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
12.03.2016, 16:32  [ТС]
Цитата Сообщение от hoggy Посмотреть сообщение
от чего будет наследование, если концепт зафейлится?
Всегда выбирается самая ограниченная специализация. То есть вначале идет попытка отнаследовать от класса, удовлетворяющего NotClonable. Допустим, она фэйлится. Следующая попытка - от неограниченного пустого класса (который ты почему-то не указал в коде, хотя у меня он был):
C++
1
2
template<typename T>
struct Base {};
И теперь все окей.

Или в чем был вопрос?

Добавлено через 16 часов 20 минут
У Саттера в блоге появился новый пост.
Если хотите проникнуться мыслью, что не все так уж плохо, то читать
http://herbsutter.com/2016/03/... s-meeting/
5
31 / 31 / 6
Регистрация: 23.10.2014
Сообщений: 107
12.03.2016, 17:24
Цитата Сообщение от ct0r Посмотреть сообщение
in the paper that proposed constexpr_if the committee changed the syntax to if constexpr at the meeting
C++
1
if constexpr (condition) ...
Таак, если condition константное выражение тогда.., а не, design by committee же, если condition истина тогда.. и т.д.

Что за фигня вообще?
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
12.03.2016, 17:52  [ТС]
Цитата Сообщение от NotNot Посмотреть сообщение
Что за фигня вообще?
Да нормально. Я думаю, что if constexpr предпочтительнее constexpr if, потому что:
1) if - по сути обычный if, зачем ему прилагательное constexpr? Что такое constexpr'ный if? Это у которого условие constexpr, или который вообще может вернуть constexpr значение?
2) делается акцент на том, что именно условие должно быть constexpr
3) когда мы просто просматриваем код, мы ищем управляющие конструкции в начале строки. За if constexpr глаз цепляется лучше. if - главная информация, constexpr - второстепенная
4) когда мы глазами идем в коде от } или else, мы ищем на том же отступе if, а не constexpr
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
12.03.2016, 17:59
Цитата Сообщение от ct0r Посмотреть сообщение
Я думаю, что if constexpr предпочтительнее constexpr if, потому что:
очевидно жеж, constexpr можно ставить и справа, и слева.
двойной профит: пиши, как удобно,
и есть повод, что б похоливарить.
0
31 / 31 / 6
Регистрация: 23.10.2014
Сообщений: 107
12.03.2016, 21:43
Цитата Сообщение от ct0r Посмотреть сообщение
Да нормально
Цитата Сообщение от ct0r Посмотреть сообщение
4) когда мы глазами идем в коде от } или else, мы ищем на том же отступе if, а не constexpr
Ну как нормально, непонятно ещё что они с constexpr_else в итоге сделали. Как бы такого не получилось
C++
1
2
3
4
5
6
7
if constexpr (A) {
  ...
} constexpr_else if constexpr (B) {
  ...
} constexpr_else {
  ...
}
Или такого
C++
1
2
3
4
5
6
7
if constexpr (A) {
  ...
} else constexpr if constexpr (B) {
  ...
} else constexpr {
  ...
}
Цитата Сообщение от ct0r Посмотреть сообщение
1) if - по сути обычный if, зачем ему прилагательное constexpr? Что такое constexpr'ный if? Это у которого условие constexpr, или который вообще может вернуть constexpr значение?
Ну, я на `constexpr if ...` смотрю/смотрел как на constexpr if-statement, т.е if-statement который чекается во время компиляции.
Цитата Сообщение от ct0r Посмотреть сообщение
4) когда мы глазами идем в коде от } или else, мы ищем на том же отступе if, а не constexpr
Но в то же время после if мы ожидаем (условие), а не constexpr. А после else можно и while и for и switch написать, и будет оно вполне к месту.
Цитата Сообщение от ct0r Посмотреть сообщение
2) делается акцент на том, что именно условие должно быть constexpr
Но constexpr то не условие, а сам if. То что условие constexpr должно быть это уже следствие.
Цитата Сообщение от ct0r Посмотреть сообщение
3) когда мы просто просматриваем код, мы ищем управляющие конструкции в начале строки. За if constexpr глаз цепляется лучше. if - главная информация, constexpr - второстепенная
У меня как-то глаз за constexpr цепляется, а if пытается не заметить. Но вообще, чуть подумав, согласен: "Да нормально".
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
23.03.2016, 21:52  [ТС]
NotNot, уточнение. Было так:
C++
1
2
3
4
5
6
7
constexpr if (...) {
...
} constexpr else constexpr if (...) {
...
} constexpr else {
...
}
Стало так:
C++
1
2
3
4
5
6
7
if constexpr (...) {
...
} else if constexpr (...) {
...
} else {
...
}
И вот еще:
The proposal was also modified to allow the construct outside of templates; the semantics for such uses is that the branch not taken is fully type-checked, but entities referenced in it are not odr-used, and return statements contained in it do not contribute to return type deduction.
1
31 / 31 / 6
Регистрация: 23.10.2014
Сообщений: 107
23.03.2016, 22:08
ct0r, да, я это тоже видел.
The proposal was also modified to allow the construct outside of templates
Было бы довольно странно, если б это было запрещено.
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
24.03.2016, 03:39
одного вот только не могу понять: что все так на sfinae с enable_if то взъелись?)
0
24.03.2016, 09:57

Не по теме:

Сегодня на хабре статья промелькнула на эту же тему, картинка понравилась :)

0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
27.03.2016, 13:05
Цитата Сообщение от tapochka Посмотреть сообщение
одного вот только не могу понять: что все так на sfinae с enable_if то взъелись?
Я взъелся после того, как мне пришлось активно им попользоваться в одном своём проекте. Неудобно. Плюс сравнение с тем, как это делается в D, добавило контраста.
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
28.03.2016, 21:55
Цитата Сообщение от Nick Alte Посмотреть сообщение
Моя статья на эту тему - вторая в выдаче гугла, сразу после википедии
хм, значит в том числе с помощью вашей статьи я со сфинае разбирался)
0
29.03.2016, 12:58

Не по теме:

если концепт зафейлится
..в отличие от некоторых, проверил, что будет, если концепт зафейлится)
к сожалению, некоторая эмм, костность мышления не позволила сделать это эмм, неразрушающими методами.
кто то это удовольствие проспал).
Но это скорее к коду операционки каким то боком еще может касаться,
а вот кода непосредственно прикладного софта абсолютно нет
да-да. именно 'абсолютно'. это своего рода шафл(shuffle). не в смысле шок(shuck), а в смысле "попытка раздавать, не имея карт")
*con text by prof. v.k.muller, 1960, seventhns edition.*enlarged

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.03.2016, 12:58
Помогаю со студенческими работами здесь

КВН - полный отстой?
Неужели этим ребятам, которые выступают в КВН, самим не противно? Каждый раз когда пытаюсь посмотреть эту передачу уже в записи на Ютюбе -...

Круто это либо отстой?
Всем привет, сделал вот такой сервис, который по сути переносит код с контроллера в сервис. Но вот вопрос, насколько это вменяемо? ...

Ваш язык программирования - отстой
Ваш язык программирования - отстой

Программа вычисления високосного года, сезона года по месяцу, количеству дней от начала года
добрый вечер, уважаемые программисты! помогите,пожалуйста,разобраться в программе. в программе нужно: 1)вычислять является ли год...

Обожаю фреймворк Qt, а продукция Microsoft - отстой
Я люблю Qt , ибо он действительно кроссплатформеный. После Qt-creator IDE , MSVS кажеться полнейшем г... где мильон абсолютно не нужных...


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

Или воспользуйтесь поиском по форуму:
56
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru