Type Checking Modular Multiple Dispatch with Parametric Polymorphism and Multiple Inheritance, Conference on Object Oriented Programming Systems, Languages and Applications (OOPSLA, 2011. ,
DOI : 10.1145/2076021.2048140
URL : http://www.mpi-sws.org/~skilpat/papers/multipoly.pdf
Abstraction in technical computing, Ph.D. Dissertation. Massachusetts Institute of Technology, 2015. ,
, Julia: A Fresh Approach to Numerical Computing. SIAM Rev, vol.59, p.1, 2017.
Practical optional types for Clojure, European Symposium on Programming, 2016. ,
Type Checking Higher-order Polymorphic Multi-methods, Symposium on Principles of Programming Languages (POPL, 1997. ,
A Model for Java with Wildcards, European Conference on Object-Oriented Programming, 2008. ,
Polymorphic Functions with Set-Theoretic Types: Part 2: Local Type Inference and Type Reconstruction, Symposium on Principles of Programming Languages (POPL, 2015. ,
URL : https://hal.archives-ouvertes.fr/hal-00880744
Polymorphic Functions with Set-theoretic Types: Part 1: Syntax, Semantics, and Evaluation, Symposium on Principles of Programming Languages (POPL, 2014. ,
URL : https://hal.archives-ouvertes.fr/hal-00907166
Decidable Bounded Quantification, Symposium on Principles of Programming Languages (POPL, 1994. ,
Typechecking and Modules for Multi-methods, Conference on Object-oriented Programming Systems, Languages and Applications (OOPSLA, 1994. ,
Object-Oriented Programming, Functional Programming and R. Statist. Sci, vol.2, 2014. ,
QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs, Proceedings of the Fifth ACM SIGPLAN International Conference on Functional Programming (ICFP '00, pp.268-279, 2000. ,
MultiJava: Modular Open Classes and Symmetric Multiple Dispatch for Java, Conference on Object-oriented Programming, Systems, Languages, and Applications (OOPSLA, 2000. ,
The Common Lisp Object System: An Overview, European Conference on Object-Oriented Programming, 1987. ,
Feat: Functional Enumeration of Algebraic Types, Proceedings of the 2012 Haskell Symposium (Haskell '12, pp.61-72, 2012. ,
Semantic Subtyping, Symposium on Logic in Computer Science (LICS, 2002. ,
URL : https://hal.archives-ouvertes.fr/hal-00152690
Semantic subtyping: Dealing set-theoretically with function, union, intersection, and negation types, J. ACM, vol.55, p.24, 2008. ,
URL : https://hal.archives-ouvertes.fr/hal-00336120
,
Java Generics Are Turing Complete, Symposium on Principles of Programming Languages (POPL, 2017. ,
On Decidability of Nominal Subtyping with Variance, Workshop on Foundations and Developments of Object-Oriented Languages, 2007. ,
Constraint-based Polymorphism in Cecil: Towards a Practical and Static Type System, Addendum to the Conference on Object-oriented Programming, Systems, Languages, and Applications, 1998. ,
DOI : 10.1145/346852.346948
Constraint-Bounded Polymorphism: an Expressive and Practical Type System for Object-Oriented Languages, 2003. ,
, Type Inference for Java, vol.5, 2005.
Bounded Quantification is Undecidable, Symposium on Principles of Programming Languages (POPL, 1992. ,
Perl 6 and Parrot Essentials, 2003. ,
Java Type Inference is Broken: Can We Fix It, Conference on Object-oriented Programming Systems, Languages and Applications (OOPSLA, 2008. ,
Taming Wildcards in Java's Type System, Conference on Programming Language Design and Implementation (PLDI, 2011. ,
, The Julia Language. 2018. Manual: Diagonal Types, 2018.
Subtyping Union Types, Computer Science Logic (CSL, 2004. ,
URL : https://hal.archives-ouvertes.fr/hal-00012706
On the Decidability of Subtyping with Bounded Existential Types, Programming Languages and Systems (ESOP), 2009. ,
Julia Subtyping: a Rational Reconstruction-Project Web-Page, 2018. ,
Type Inference for Java 5, 2006. ,
, Since types are themselves values, it is legitimate to invoke typeof on them, and the types DataType, Union, and UnionAll play the role of kinds. Indeed, the auxiliary function is_kind(t) returns true if t is DataType, or Union
, We write typeof(t, G) as a shorthand for there exists t ? such that typeof(t, G) = t ?. We have seen that Julia's frontend implicitly performs several simplifications when processing types; for instance, T where T is replaced by Any, or Union{Int, Int} is replaced by Int; these simplifications must be taken explicitly into account when formalizing the typeof relation. The auxiliary function simplify (t) performs the following simplification steps: ?, Since the typeof function plays a role in the definition of subtyping, we provide its formalization in Fig. 4
, ? remove redundant Union types
, ? remove duplicate and obviously redundant types from Union{t 1
, t n , a type t i is obviously redundant whenever there exists a type t j which is its supertype given an empty variable environment. These simplifications are guided by pragmatic considerations rather than semantic issues. As such they tend to vary between Julia versions