О, если я угадываю, о чём там речь, то тогда это действительно оно.
Ах да, и ещё один аргумент. Хотя это наверно можно формально назвать синтаксическим сахаром, но только формально. Я имею в виду автоматический вывод типов. Конечно, он сильно уступает выводу типов в Haskell, но всё равно очень и очень неплох.
Меня вообще немного смутило смешение вместе
aa_dav системы типов языка и его рантайма. Они могут быть вообще ортогональны, если не рассматривать соответствие рантайма выбранной семантике языка. То, что тип может иметь типы-параметры (или значения-параметры) — это свойства системы типов. То, есть ли операции, позволяющие смешивать
и
для несравнимых по подтипированию
и тому подобные — тоже её. А что у этого под капотом — ну так там никто не запрещает спускаться вообще на уровень процессора, хотя это будет уже и натягиванием. В частности, если большинство проверок типов остаётся только на компиляторе, я не вижу, чем это может быть плохо, разве что невозможностью иметь reflection.
-- Сб фев 11, 2017 00:47:27 --Про списки типов: понятно, что если C++ позволяет с ними делать больше, чем C# — это хорошо, но обратная сторона может быть в том, не позволяет ли он чересчур много — например, если я напишу параметром какого-то шаблона
Typelist<int, Typelist<char, bool> >, неправильно завершив список, или вообще напишу на месте списка не-список, насколько понятным будет ответ компилятора на такое безобразие, и будет ли он гарантированным? (Продолжу читать и узнаю.) При аналогичной ситуации хаскель, например, даст нам описать это так, чтобы сообщение об ошибке было гарантировано, и говорило именно о том, что не так (правда, я пока там видел только гетерогенные списки, у которых есть значения, и которые ради этих значений и нужны, а не просто типы-списки типов без значений, которые полезны ради самих типов-параметров, но реализация должна быть не сильно другой). В общем, детали-то тут, конечно, оффтопны.
-- Сб фев 11, 2017 00:53:52 --Кстати, в C# и Java (тут — насколько я в курсе) нет синонимов типов — вот это уже печально. (Недавно в C# появились, но их можно писать только среди директив
using, а не в любом месте. Этого мало.)