Back to Search
Start Over
The Implicit Calculus A New Foundation for Generic Programming
- Source :
- PLDI
- Publication Year :
- 2012
- Publisher :
- NEW YORK, 2012.
-
Abstract
- Generic programming (GP) is an increasingly important trend in programming languages. Well-known GP mechanisms, such as type classes and the C++0x concepts proposal, usually combine two features: 1) a special type of interfaces; and 2) implicit instantiation of implementations of those interfaces. Scala implicits are a GP language mechanism, inspired by type classes, that break with the tradition of coupling implicit instantiation with a special type of interface. Instead, implicits provide only implicit instantiation, which is generalized to work for any types . This turns out to be quite powerful and useful to address many limitations that show up in other GP mechanisms. This paper synthesizes the key ideas of implicits formally in a minimal and general core calculus called the implicit calculus (λ⇒), and it shows how to build source languages supporting implicit instantiation on top of it. A novelty of the calculus is its support for partial resolution and higher-order rules (a feature that has been proposed before, but was never formalized or implemented). Ultimately, the implicit calculus provides a formal model of implicits, which can be used by language designers to study and inform implementations of similar mechanisms in their own languages.
- Subjects :
- Theoretical computer science
Generic programming
Interface (Java)
Computer science
Scala
Type (model theory)
computer.software_genre
Calculus
medicine
type classes
C plus plus concepts
Implementation
Calculus (medicine)
computer.programming_language
Implicit parameters
Programming language
medicine.disease
Computer Graphics and Computer-Aided Design
Feature (linguistics)
Haskell
Key (cryptography)
Languages
computer
Software
generic programming
Subjects
Details
- Language :
- English
- Database :
- OpenAIRE
- Journal :
- PLDI
- Accession number :
- edsair.doi.dedup.....26ca41efe678e4205837443fc96a0291