GNU epsilon : an extensible programming language
Institution:
Paris 13Disciplines:
Directors:
Abstract EN:
Reductionism is a viable strategy for designing and implementing practical programming languages, leading to solutions which are easier to extend, experiment with and formally analyze. We formally specify and implement an extensible programming language, based on a minimalistic first-order imperative core language plus strong abstraction mechanisms, reflection and self-modification features. The language can be extended to very high levels: by using Lisp-style macros and code-to-code transforms which automatically rewrite high-level expressions into core forms, we define closures and first-class continuations on top of the core. Non-self-modifying programs can be analyzed and formally reasoned upon, thanks to the language simple semantics. We formally develop a static analysis and prove a soundness property with respect to the dynamic semantics. We develop a parallel garbage collector suitable to multi-core machines to permit efficient execution of parallel programs.
Abstract FR:
Le réductionnisme est une technique réaliste de conception et implantation de vrais langages de programmation, et conduit à des solutions plus faciles à étendre, expérimenter et analyser. Nous spécifions formellement et implantons un langage de programmation extensible, basé sur un langage-noyau minimaliste impératif du premier ordre, équipé de mécanismes d’abstraction forts et avec des possibilités de réflexion et auto-modification. Le langage peut être étendu à des niveaux très hauts : en utilisant des macros à la Lisp et des transformations de code à code réécrivant les expressions étendues en expressions-noyau, nous définissons les clôtures et les continuations de première classe au dessus du noyau. Les programmes qui ne s’auto-modifient pas peuvent être analysés formellement, grâce à la simplicité de la sémantique. Nous développons formellement un exemple d’analyse statique et nous prouvons une propriété de soundness par apport à la sémantique dynamique. Nous développons un ramasse-miettes parallèle qui convient aux machines multi-cœurs, pour permettre l’exécution efficace de programmes parallèles.