Re[13]: фреймворки на C++
От: alex_public  
Дата: 05.09.15 19:08
Оценка:
Здравствуйте, 11molniev, Вы писали:

_>>1. Замыкания/лямбды. Очень важный пункт, позволяющий элементарно реализовывать потрясающие вещи (причём не только из мира ФП). Хотя естественно нечто подобное можно было делать и раньше (см. Boost), но ценой ужасающе кривого кода.

1>Из тройки C++/Java/C# замыкания/лямбды первыми появились в последнем. И то, что сделали с ними в C++ вызывает.. смешанные чувства. С одной стороны конечно вписали в старый язык, вроде ничего серьезно не поломав. А с другой стороны выглядит вырви глаз и после C# пользоваться таким вообще не хочется. Хотя конечно фломастеры разные.

Начинать сравнивать синтаксис можно после проверки приблизительного равенства функциональности. Можно увидеть аналог на C# для данного http://coliru.stacked-crooked.com/a/ce0de866fa9e05bc простейшего кода с полиморфными лямбдами? ) Как только увижу его, можно будет начать разговор об удобстве синтаксиса...

_>>2. Семантика перемещения. Вообще потрясающая вещь, не имеющая прямых аналогов в других языках. Как раз она эффективно решает известную проблему с использованием замыканий без сборщика мусора. Но полезно оно не только для замыканий — с данной техникой производительность приложений на C++ уходит вообще в недостижимый отрыв. Причём что самое интересное, многие старые приложения могут ускориться даже без правки их кода — достаточно их перекомпилировать под новый стандарт.

1>Скорее просто исправили старый косяк с ссылками, которые были слишком сильно завязаны на семантику указателей. Ну и немного повыносили мозг тем кто стандарт читает.

Фраза "исправили старый косяк" подразумевает, что в тоже время было известно правильное решение. Можно узнать в каком именно языке оно присутствовало? )

_>>3. Улучшения метапрограммирования (variadic template, constexpr, decltype и т.п.). Это отдельное направление в мире C++, очень активно развивающееся. И кстати говоря не имеющее аналогов в других мейнстрим языках. Правда во многом до сих пор кривое (т.к. изначально шаблоны не для этого придумывались), но работа идёт...

1>Как минимум C# вполне себе работает с метапрограммированием. Я правда им пользуюсь умеренно, в основном базовые вещи, но по ним вроде одинаково у обоих. Только в шарпе листинги ошибок попроще)) Я не настолько хорошо знаком с Java, но подозреваю, что там тоже может что-то найтись (лямбды же они к себе перетянули).

Я так понял, под метапрограммированием здесь подразумевалось это?

1>Ну как то так:
1>Differences Between C++ Templates and C# Generics (C# Programming Guide)
1>https://msdn.microsoft.com/en-us/library/c6cyy67b.aspx


Так вот не стоит путать метапрограммирование и обобщённое программирование — это абсолютно разные парадигмы, предназначенные для решения совершенно разных задач. И да, обобщённое программирование в C# и C++ не сильно отличается. Но здесь то речь не о нём. Хотя возможно кого-то путает тот факт, что для метапрограммирования в C++ в основном используются те же самые шаблоны, что и для обобщённого (и как раз поэтому МП в C++ достаточно кривое, т.к. изначально шаблоны разрабатывались именно для ОП), хотя и по другому. Но из этого точно невозможно сделать вывод о наличие МП в C# — там нет ничего похожего в принципе. )))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.