Re[2]: Visual C# vs C++. Надо сравнить перспективы.
От: Evgeny.Panasyuk Россия  
Дата: 27.12.16 21:35
Оценка: +2 -3
Здравствуйте, bazis1, Вы писали:

B>Минусы плюсов:

B>* Нет нормального garbage collector-а.

Есть консервативные сборщики мусора, причём им не первый десяток лет, но их никто не использует, потому что нет такой необходимости.

B>Поэтому нужно постоянно держать в голове, что и когда удаляется.


Нужно держать и что-то там разруливать в исключительных случаях, а никак не постоянно.

B>Всякие shared_ptr и т.п. частично эту проблему решают, но держать это в голове все равно придется.


99% случаев разруливаются scope-based lifetime, даже без всяких *_ptr и прочего ref-counting.

B>* Меньше синтаксического сахара. К примеру, вот такая строчка в C#

B>
B>return m_Something?.SomethingElse?.SubSomething ?? "empty";
B>


Проблема с засильем null'ов это исключительно родовая травма C#. В C++ нет такой проблемы.

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


Это типа 4k строк нагенерированных на ровном месте?

B>* Нет reflection. В C# я могу объявить вот такую структуру:

B>
B>struct MyStruct
B>{
B>    int Score;
B>    string[] Names;
B>}
B>


Для этого есть Boost.Fusion/Hana
BOOST_FUSION_DEFINE_STRUCT
(
    (demo), MyStruct,
    (int, Score)
    (vector<string>, Names)
)
Но со встроенным compile-time reflection было бы конечно красивее.

B>* Нет yield return, async/await,


Во-первых есть библиотечные (например на базе Boost.Coroutine). А во-вторых если речь про MSVS — то там начиная с ЕМНИП 2015 есть встроенное расширение.

B>LINQ


Для in-memory последовательностей есть Boost.Range. А для взаимодействия с DB есть как отдельные библиотеки с декларативным описанием запросов, так и целые системы а-ля ODB.

B>* Существенно дольше компиляция, если Вы часто редактируете header-ы. Можно частично побороть через precompiled headers, но все равно будет медленно.


Здесь верно, да.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.