Abstract | ||
---|---|---|
Most languages fall into one of two camps: either they adopt a unique, static type system, or they abandon static type-checks for run-time checks. Pluggable types blur this division by (i) making static type systems optional, and (ii) supporting a choice of type systems for reasoning about different kinds of static properties. Dynamic languages can then benefit from static-checking without sacrificing dynamic features or committing to a unique, static type system. But the overhead of adopting pluggable types can be very high, especially if all existing code must be decorated with type annotations before any type-checking can be performed. We propose a practical and pragmatic approach to introduce pluggable type systems to dynamic languages. First of all, only annotated code is type-checked. Second, limited type inference is performed on unannotated code to reduce the number of reported errors. Finally, external annotations can be used to type third-party code. We present TypePlug, a Smalltalk implementation of our framework, and report on experience applying the framework to three different pluggable type systems. |
Year | DOI | Venue |
---|---|---|
2009 | 10.1016/j.cl.2008.06.003 | Computer Languages, Systems & Structures |
Keywords | Field | DocType |
static type system,static property,pluggable type,type third-party code,pluggable type system,dynamic language,limited type inference,different pluggable type system,type annotation,dynamic languages type systems programming languages,type system,programming language,programming languages | Uniqueness type,Type system,Void type,Programming language,Computer science,Complex data type,Smalltalk,Theoretical computer science,Type inference,Data type | Journal |
Volume | Issue | ISSN |
35 | 1 | Computer Languages, Systems & Structures |
Citations | PageRank | References |
10 | 0.67 | 10 |
Authors | ||
3 |
Name | Order | Citations | PageRank |
---|---|---|---|
Niklaus Haldiman | 1 | 14 | 1.11 |
Marcus Denker | 2 | 285 | 23.94 |
Oscar Nierstrasz | 3 | 2404 | 346.86 |