Могут ли мономорфные дженерики наследовать общий базовый класс?
Предположим, я бы разработал новый язык программирования.
L
.
L
должен поддерживать вывод типов и проверку типов во время компиляции, специально поддерживать операции времени компиляции:isSubtypeOf
проверить, является ли тип подтипом другого типаDownCast
приведите тип к одному из его супертипов
L
также поддерживает общий синтаксис, который, например, может быть переведен с помощью мономорфизации
Предположим следующий синтаксис для
L
(пример)
class Concrete {
foo: Int
bar: Boolean
}
class Property<T> {
value: T
}
class Bar {
foo: Property<Int>
bar: Property<Boolean>
}
Теперь после мономорфизации код может выглядеть так (аналогично тому, как, например, показано в примере ржавчины о мономорфизации):
class Concrete {
foo: Int
bar: Boolean
}
class Property_Int {
value: Int
}
class Property_Boolean {
value: Boolean
}
class Bar {
foo: Property_Int
bar: Property_Boolean
}
Но в этом мономорфном коде вся информация об общности
Property_Int
и
Property_Boolean
потеряны. Но я все еще хочу использовать эту информацию, доступную во время компиляции.
Вопрос
Было бы разумно сделать такую мономорфизацию, когда оба мономорфных экземпляра наследуют общую основу? Это вообще часть концепции или есть еще одна концепция в отношении универсальных шаблонов, которая лучше соответствовала бы этому требованию?
class Any {}
class Concrete {
foo: Int
bar: Boolean
}
class Property {
value: Any
}
class Property_Int : Property {
value: Int
}
class Property_Boolean : Property {
value: Boolean
}
class Bar {
foo: Property_Int
bar: Property_Boolean
}
В этом последнем фрагменте легко было бы статически оценить, что
Property_Int
и
Property_Boolean
имеют общую базу.