К вопросу о "static typing" vs "dynamic typing"
От: S.Yu.Gubanov Россия http://sergey-gubanov.livejournal.com/
Дата: 23.09.04 11:48
Оценка: -2
Здравствуйте, DarkGray, Вы писали (http://www.rsdn.ru/Forum/Message.aspx?mid=762929&only=1):
Автор: DarkGray
Дата: 13.08.04


DG>Имхо, хорошая статическая типизация — это такая типизация, в которой можно по-максимуму задать ограничения на этапе компиляция.

DG>Замечу, что текущие языки не умеют "работать" даже с базовыми вещами.
DG>Пример 1:
DG>Определить функцию, которая принимает объект, который должен поддерживать и интерфейс IA, и интерфейс IB.
DG>Такое ограничение можно записать только с помощью generic-ов:
DG>
DG>void Method<T>(T value) where T:IA, IB {}
DG>

DG>Пример 2:
DG>Определить функцию, которая принимает объект, или типа C1, или типа C2.
DG>Такой пример даже с помощью generic-ов не записывается.


В Оберонах это есть. Вот, например, в Active Oberon for .NET
VAR x: OBJET;
    y: OBJECT{D};

x — переменная, которая может обозначать любой объект.
y — переменная, которая может обозначать любой объект реализующий интерфейс D. (Точнее не интерфейс, а DEFINITION — это нечто более крутое чем интерфейс, но в частном случае, может рассматриваться как интерфейс.)

PROCEDURE DoSmth(VAR x: OBJECT; VAR y: OBJECT{D, E});

У процедуры DoSmth первый аргумент x — любой объект; второй аргумент y — любой объект реализующий интерфейсы D и E одновременно.

"Приведение типов":
IF x IMPLEMENTS D THEN D(x).f(); ... END;


http://www.oberon.ethz.ch/oberon.net/whitepaper/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.