получил вывод типа, хочу добавить наследование классов - PullRequest
1 голос
/ 06 января 2010

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

Нужны ли имена классов?

EDIT

Типовое заражение прослеживается через назначения в программе, в том числе между функциями.

ОК на начальном языке, у вас есть имена классов, такие как MyTypeName1, например:

myVariable1 = New(MyTypeName1)
myVariable2 = New(MyTypeName2)

И типы MyTypeName1 и MyTypeName2 выведены для myVariable1 и myVariable2 соответственно. Но тогда, если мы хотим улучшить язык для поддержки:

MyVariable3 = myVariable1
MyVariable3 = myVariable2

, который можно отследить через код (myVariable3 теперь может содержать два типа, которые предположительно находятся в иерархии).

EDIT

Члены MyTypeName1 и MyTypeName2 выводятся из таких утверждений, как:

myVariable1.name="Fred"
myVariable2.name="JX3009"

Что если член name в MyTypeName1 и MyTypeName2 не входит в общий базовый класс? Что если нам нужно другое свойство name в MyTypeName1 и MyTypeName2 и ни одного в базовом классе? Есть ли элегантный способ сказать компилятору, что делать / как обращаться? (Идея с выводом типа состоит в том, чтобы уменьшить количество набираемых символов, а не увеличить их ...?)

Или нам нужно явно указать иерархию?

1 Ответ

1 голос
/ 06 января 2010

Это поле загружено с результатами неразрешимости, но я забыл их все. Если вы хотите связать наследование с подтипом, у вас нет проблем. Если вы хотите что-то более амбициозное (и звучит так, как будто вы это делаете), я бы посмотрел на

  • Учебник Бенджамина Пирса Типы и языки программирования , в котором будут рассмотрены основные результаты для подтипов ширины и глубины, а также то, как они хорошо или плохо работают с выводом типа. (Я бы посмотрел сам, но моя копия на работе.)

  • Кандидатская диссертация Фрэнка и Чеда Потиера.

Еще одно имя, на которое стоит обратить внимание - Джо Уэллс, ответственный за множество результатов неразрешимости в системах типов и языках программирования.

Каковы минимальные дополнительные подсказки компилятору, необходимые для устранения неоднозначности типов?

Если на этот вопрос будет уникальный ответ, я буду очень удивлен. Я думаю, что гораздо более вероятно, что это одна из тех проблем языкового дизайна, где есть множество решений, которые абсолютно несопоставимы с точки зрения минимальности и аннотаций.

...