Re[11]: фреймворки на C++
От: alex_public  
Дата: 04.09.15 17:46
Оценка: +1
Здравствуйте, lpd, Вы писали:

E>>Что ты вообще имеешь в виду под усложнением синтаксиса в с++11/14?

lpd>Если в терминологии wikipedia{C++11}{C++14}:
lpd>lamda-выражения считаю бесполезными — если мне надо вызвать несколько функций, я их вызову без lambda.
lpd>Alternative function syntax — зачем?
lpd>User-defined literals — бесполезно.
lpd>Function return type deduction — ужас
lpd>Variable templates — бесполезно

Это полная ерунда. Я бы разделил изменения в стандарте C++11 (а C++14 — это всего лишь работа над ошибками в C++11) на следующие пункты:

1. Замыкания/лямбды. Очень важный пункт, позволяющий элементарно реализовывать потрясающие вещи (причём не только из мира ФП). Хотя естественно нечто подобное можно было делать и раньше (см. Boost), но ценой ужасающе кривого кода.
2. Семантика перемещения. Вообще потрясающая вещь, не имеющая прямых аналогов в других языках. Как раз она эффективно решает известную проблему с использованием замыканий без сборщика мусора. Но полезно оно не только для замыканий — с данной техникой производительность приложений на C++ уходит вообще в недостижимый отрыв. Причём что самое интересное, многие старые приложения могут ускориться даже без правки их кода — достаточно их перекомпилировать под новый стандарт.
3. Улучшения метапрограммирования (variadic template, constexpr, decltype и т.п.). Это отдельное направление в мире C++, очень активно развивающееся. И кстати говоря не имеющее аналогов в других мейнстрим языках. Правда во многом до сих пор кривое (т.к. изначально шаблоны не для этого придумывались), но работа идёт...
4. Мелкие синтаксические улучшения языка (nullptr, auto, range for, override, delete, final, explicit, static_assert, intX_t, литералы, инициализация членов класса, стандартная инициализация {}, using (тип), типизированные перечисления и т.д).
5. Расширение стандартной библиотеки: unique_ptr/shared_ptr, function, array, tuple, pair, initializer_list, atomic, thread (куча всего), chrono, regex и т.д. и т.п. Тут особо комментировать нечего, т.к. на самом деле все эти вещи были доступны и раньше (в том же Boost'e), просто теперь они поставляются в одной коробке с компилятором.

Так вот пункты 1, 4 и 5 ведут исключительно к упрощению кода. Пункт 2 не меняет особо внешний вид кода, только ускоряя его. По пути усложнения идёт только пункт 3, но его никто не заставляет использовать насильно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.