We present short programs that demonstrate the unsoundness of Java and Scala's current type systems. In particular, these programs provide parametrically polymorphic functions that can turn any type into any type without (down) casting. Fortunately, parametric polymorphism was not integrated into the Java Virtual Machine (JVM), so these examples do not demonstrate any unsoundness of the JVM. Nonetheless, we discuss broader implications of these findings on the field of programming languages
Datatype-generic programming involves parametrization of programs by the shape of data, in the form ...
Subtype polymorphism is a cornerstone of object-oriented programming. By hiding variability in behav...
Parametric polymorphism enables code reuse and type safety. Underneath the uniform interface exposed...
Multiple modern programming languages, including Kotlin, Scala, Swift, and C#, have type systems whe...
With Java 5 and C# 2.0, first-order parametric polymorphism was introduced in mainstream object-orie...
With Java 5 and C-# 2.0, first-order parametric polymorphism was introduced in mainstream object-ori...
The Scala programming language makes all reference types implicitly nullable. This is a problem, bec...
Parametric polymorphism in Scala suffers from the usual drawback of erasure on the Java Virtual Mach...
Java offers the real possibility that most programs can be written in a type-safe language. However,...
A static type system is an important tool in efficiently developing correct software. We describe th...
The Scala programming language unifies the object-oriented and functional styles of programming. One...
With Java 5 and C-# 2.0, first-order parametric polymorphism was introduced in mainstream object-ori...
Datatype-generic programming involves parametrization by the shape of data, in the form of type cons...
Datatype-generic programming involves parametrization by the shape of data, in the form of type cons...
Datatype-generic programming involves parametrization of programs by the shape of data, in the form ...
Datatype-generic programming involves parametrization of programs by the shape of data, in the form ...
Subtype polymorphism is a cornerstone of object-oriented programming. By hiding variability in behav...
Parametric polymorphism enables code reuse and type safety. Underneath the uniform interface exposed...
Multiple modern programming languages, including Kotlin, Scala, Swift, and C#, have type systems whe...
With Java 5 and C# 2.0, first-order parametric polymorphism was introduced in mainstream object-orie...
With Java 5 and C-# 2.0, first-order parametric polymorphism was introduced in mainstream object-ori...
The Scala programming language makes all reference types implicitly nullable. This is a problem, bec...
Parametric polymorphism in Scala suffers from the usual drawback of erasure on the Java Virtual Mach...
Java offers the real possibility that most programs can be written in a type-safe language. However,...
A static type system is an important tool in efficiently developing correct software. We describe th...
The Scala programming language unifies the object-oriented and functional styles of programming. One...
With Java 5 and C-# 2.0, first-order parametric polymorphism was introduced in mainstream object-ori...
Datatype-generic programming involves parametrization by the shape of data, in the form of type cons...
Datatype-generic programming involves parametrization by the shape of data, in the form of type cons...
Datatype-generic programming involves parametrization of programs by the shape of data, in the form ...
Datatype-generic programming involves parametrization of programs by the shape of data, in the form ...
Subtype polymorphism is a cornerstone of object-oriented programming. By hiding variability in behav...
Parametric polymorphism enables code reuse and type safety. Underneath the uniform interface exposed...