ACM SIGPLAN Notices · 2011 · 16 citations · 19 references
ComputingComputer ScienceNatural Language ProcessingProgramming LanguagesSyntaxAbstract InterpretationData TypesInterpreter DesignType CheckingType SystemsCanonical RepresentationKind SystemsPattern MatchingPolymorphic Type SystemsPolymorphic TypesType Theory
Self-interpreters can be roughly divided into two sorts: self-recognisers that recover the input program from a canonical representation, and self-enactors that execute the input program. Major progress for statically-typed languages was achieved in 2009 by Rendel, Ostermann, and Hofer who presented the first typed self-recogniser that allows representations of different terms to have different types. A key feature of their type system is a type:type rule that renders the kind system of their language inconsistent. In this paper we present the first statically-typed language that not only allows representations of different terms to have different types, and supports a self-recogniser, but also supports a self-enactor. Our language is a factorisation calculus in the style of Jay and Given-Wilson, a combinatory calculus with a factorisation operator that is powerful enough to support the pattern-matching functions necessary for a self-interpreter. This allows us to avoid a type:type rule. Indeed, the types of System F are sufficient. We have implemented our approach and our experiments support the theory.
19
Definitional interpreters for higher-order programming languages
John Reynolds · 1972 · 668 citations
From system F to typed assembly language
Greg Morrisett, David Walker, Karl Crary et al. · 1998 · 282 citations · Full text
λ-definability and recursiveness
S. C. Kleene · Duke Mathematical Journal · 1936 · 264 citations