Здравствуйте, 0x7be, Вы писали:
0>Вполне. 0>Есть более интересный вопрос — как это может уживаться со статической типизацией...
Это совершенно не интересный вопрос.
Вот так:
foo[T](a : T) : T
{
...
}
T можно рассматривать как аргумент функции.
Про то что творится в языках с зависимыми типами я лучше помолчу...
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Это совершенно не интересный вопрос. WH>Вот так: WH>
WH>foo[T](a : T) : T
WH>{
WH> ...
WH>}
WH>
WH>T можно рассматривать как аргумент функции.
Да, в принципе так, если при вызове можно написать что-то типа:
var myType = ConstructMyType();
foo<myType>(...);
Вопрос в другом, что делать внутри функции с этим типом?
Надо вводить метатипы, которые тоже, по идее, должны быть первоклассными и так далее
Не получится ли что-то типа:
В Nemerle есть макросы. Внутри них типы являются первокласными сущностями. Они представляются типом TypeBuilder. Макросы могут создавать новые типы и расширять старые (даже частично изменять).
В рантайме же, в статически типизированном языке тип не может быть первоклассной сущностью. Если конечно не говорить о рантайм-генерации кода.
В полном смысле этого слова типы являются первоклассной сущностью только в динамически типизированных языка с прототипным ООП. Но это скрипты со всеми вытекающими. Классы в них ни что иное как сахар для хэш-таблиц.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, nikov, Вы писали:
N>В Nemerle или вообще? Вообще — может. В Nemerle, насколько я знаю, пока нет.
По ссылке речь идет о функциях. Новые типы функций, в некотором роде, могут порождать любые ФЯ. Но вот так чтобы типы были полностью превокласными занчениями (могли бы изменяться в рантайме, помещаться в переменные и т.п.) — это, на мой взгляд противоречит приципам статической типизации. Все статически типизированные языки производят операции с типами во время компиляции. А это уже не совсем первоклассные сущности получаются.
Если же говорить о времени компиляции, то ничего гибче макросов тут придумать нельзя. В макросах типы являются более чем первоклассными сущностями. Они там тупо являются объектами.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.