#prog #article
Системы типов #java и #scala являются unsound. Подробности в статье.
TL;DR:
Программа определяет тип
И эта ошибка оставалась незамеченной 12 лет. А кто-то ещё говорит, что null — хорошая идея.
Системы типов #java и #scala являются unsound. Подробности в статье.
TL;DR:
Программа определяет тип
class Constrain<A, B extends A> {} и метод upcast:static class Bind<A> {
<B extends A>
A upcast(Constrain<A,B> constrain, B b) {
return b;
}
}
Этот метод просто апкастит значение типа B в значение типа A, используя значение типа Constrain<A, B> как материальное свидетельство того, что B действительно является подтипом A. К сожалению, ничто не мешает в качестве значения этого типа использовать null, что ломает логику системы типов, которая полагается на этот факт, а использования wildcard capture позволяет при помощи Constrain установить отношение субтипизации между двумя произвольным типами. Результат? Комбинация null-гого Constrain и upcast позволяет перевести значение любого типа в значение любого типа. Фактически — аналог std::mem::transmute, но без каких либо небезопасных фич и с корректно типизированным кодом.И эта ошибка оставалась незамеченной 12 лет. А кто-то ещё говорит, что null — хорошая идея.
Блог*
#prog #article Системы типов #java и #scala являются unsound. Подробности в статье. TL;DR: Программа определяет тип class Constrain<A, B extends A> {} и метод upcast: static class Bind<A> { <B extends A> A upcast(Constrain<A,B> constrain, B b) { …
DEV Community
Java is Unsound: The Industry Perspective
Discussing a recent academic finding on Java and Scala, from industry's perspective.