Re[14]: Немножко о С# 3
От: Cyberax Марс  
Дата: 22.03.07 22:29
Оценка:
Здравствуйте, WolfHound, Вы писали:

C>>Почему?

WH>По тому что в случае с .NET пролетают int и компания.
Ну да, так как это не объекты.

C>>Кодируем в языке "+" как метод "$mangled_name_add$" и вперед с песней. С объектными типами в этом подходе нет ну абсолютно никаких проблем. Хотя я бы еще от мультиметодов не отказался.

WH>И как та об этом с другим языком будешь договариться?
Определяем в стандарте языка. Ну или просто делаем метод с именем "+".

C>>Если этот косяк исправлять — получатся шаблоны С++. Не то, чтобы это было плохо, но в дизайн дженериков уже не влазит.

WH>Нет.
WH>Компонентность мы не потеряем. И это гланое отличие генериков от шаблонов.
WH>Нужна просто правильная система типов и все.
Как ты собираешься объединять типы с разной семантикой? У примитивных типов — передача по значению, а у объектов — по ссылке. В этом коренное отличие.

А компонентность — дело десятое.

C>>Да, ты можешь отказаться от примитивных типов и пользоваться исключительно объектами (Ау, Smalltalk!) — но производительность этого решения ты сам, я думаю, представляешь.

WH>Что такое примитивный тип? Может ты хотел сказать value тип?
Да, я просто привык к терминам, использующимся в Java.

WH>Так вот reference/value ортогонально наличию интерфейсов. Что прекрасно демонстрируют теже генерики в .NET2.

WH>Например
[skip]
Не ортогонально. Оно у тебя просто прозрачно боксирует value-типы — и "возвращаемся обратно на клетку 1", получая весь оверхед, связаный с объектами.

Я как-то уже тут спорил с кем-то об этом. Поискать?

WH>Так вот еслибы мелкософты не захардкодили int и работу с ним в модель рантайма то интерфейс IAdd мог бы выглядеть так

WH>
WH>    interface IAdd<T>
WH>    {
WH>        T operator + (T r);
WH>    }
WH>

WH>И ничто не мешалобы реализовать его для типа Int32 лежащем в модуле CoreTypes. И пусть этот модуль полностью реализуется компилятором. Но модель останется чистой.
Ничем бы это не помогло. Точно так же, можно было бы для боксирующей обертки просто добавить нужные методы. Это не требует изменения VM, а только стандартной библиотеки.
Sapienti sat!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.