如果我设计一个带有类型推断的新语言,没有显式类型和没有类继承支持,然后想要添加继承,那么解析类型歧义时编译器所需的最小额外提示是什么?添加功能?
是否需要课程名称?
修改
通过整个程序中的分配(包括功能之间)来跟踪类型污染。
确定使用起始语言,您可以使用MyTypeName1
这样的类名,例如:
myVariable1 = New(MyTypeName1)
myVariable2 = New(MyTypeName2)
分别为MyTypeName1
和MyTypeName2
推断类型myVariable1
和myVariable2
。但是如果我们想要增强语言来支持:
MyVariable3 = myVariable1
MyVariable3 = myVariable2
可以通过代码跟踪(myVariable3现在可以包含两种类型,可能在层次结构中)。
修改
MyTypeName1和MyTypeName2的成员是从以下语句中推断出来的:
myVariable1.name="Fred"
myVariable2.name="JX3009"
如果name
和MyTypeName1
中的MyTypeName2
成员不属于公共基类,该怎么办?如果我们想在MyTypeName1
和MyTypeName2
中使用不同的名称属性而在基类中没有,那该怎么办?是否有一种优雅的方式告诉编译器要做什么/如何处理? (类型推断的想法是减少打字而不是增加它......?)
或者我们是否需要明确指定层次结构?
答案 0 :(得分:1)
这个字段加载了不可判定的结果,但我已经忘记了它们。如果你愿意将继承与子类型混淆,那么你没有问题。如果你想要一些更雄心勃勃的东西(听起来就像你那样),我会看看
Benjamin Pierce的教科书Types and Programming Languages,它将涵盖宽度和深度子类型的基本结果,以及它们如何与类型推断完美匹配。 (我看看自己,但我的副本正在工作。)
FrançoisPottier的博士论文。
要检查的另一个名字是Joe Wells,他负责类型系统和编程语言中的大量不可判定性结果。
解决类型歧义所需的编译器的最小额外提示是什么?
如果对这个问题有独特的答案,我会非常惊讶。我认为这更可能是这些语言设计问题之一,其中有一堆解决方案,只要极简和注释都是严格无法比拟的。