000163536 001__ 163536
000163536 005__ 20190619003306.0
000163536 0247_ $$2doi$$a10.5075/epfl-thesis-5007
000163536 02470 $$2urn$$aurn:nbn:ch:bel-epfl-thesis5007-4
000163536 02471 $$2nebis$$a6306071
000163536 037__ $$aTHESIS
000163536 041__ $$aeng
000163536 088__ $$a5007
000163536 245__ $$aEmbedded Domain-Specific Languages using Libraries and Dynamic Metaprogramming
000163536 269__ $$a2011
000163536 260__ $$bEPFL$$c2011$$aLausanne
000163536 300__ $$a163
000163536 336__ $$aTheses
000163536 520__ $$aDomain-specific programming is bound to play a central  role in improving the productivity of writing software. This  is because modern, intricate, general-purpose abstractions  are rarely applicable directly to everyday programming.  However, such abstractions can be used to encode  domain-specific abstractions, so that the general-purpose  language serves as a host in which domain-specific fragments  are embedded. The benefit of traditional software engineering  is maintained, while allowing writing software that  integrates multiple domains. This thesis describes two such techniques in Scala  –a modern language with functional and object-oriented  features. The first allows embedding fragments of code with  domain-specific syntax, which is weaved within the host  language's own syntax so that it appears as being different.  The second technique uses structural types to encode  domain-specific correctness properties that object-oriented  types cannot represent. An implementation of structural types  in Scala is also described. The common characteristic of both  techniques is that domain-specific properties are provided by  a library relying only on general-purpose abstractions. However, the techniques also exemplify how certain  embedding tasks rely on data that is available in the  compiler but is then lost in statically-typed languages.  General-purpose abstractions do not give access to this data,  nor do traditional runtime reflection techniques; keeping all  data is also impractical. This thesis describes two  metaprogramming techniques whereby compiler data on code  (code lifting) and types (manifests) can be requested by  embedding libraries when needed. Compiler data is then  available as literal values in the program. It further  describes a metaprogramming framework that combine compiler  data available in code with reflection. Its design is  mirror-based, and allows a high degree of code sharing  between the metaprogramming framework and the compiler.
000163536 6531_ $$aSoftware Design Tools and Techniques
000163536 6531_ $$aScala
000163536 6531_ $$aObject-Oriented Programming
000163536 6531_ $$aApplicative (Functional) Programming
000163536 6531_ $$aDomain-Specific Languages
000163536 6531_ $$aSoftware Libraries
000163536 6531_ $$aCompilers
000163536 6531_ $$aCode Generation
000163536 6531_ $$aMetaprogramming
000163536 6531_ $$aTechniques et Outils de Conception Logicielle
000163536 6531_ $$aScala
000163536 6531_ $$aProgrammation Orientée-Objet
000163536 6531_ $$aProgrammation Applicative (Fonctionnelle)
000163536 6531_ $$aLangages Dédiés (Spécifiques aux Domaine)
000163536 6531_ $$aBibliothèques Logicielles
000163536 6531_ $$aCompilateurs
000163536 6531_ $$aGénération de Code
000163536 6531_ $$aMétaprogrammation
000163536 700__ $$0241948$$g139175$$aDubochet, Gilles
000163536 720_2 $$aOdersky, Martin$$edir.$$g126003$$0241835
000163536 8564_ $$uhttps://infoscience.epfl.ch/record/163536/files/EPFL_TH5007.pdf$$zTexte intégral / Full text$$s1355155$$yTexte intégral / Full text
000163536 909C0 $$xU10409$$0252187$$pLAMP
000163536 909CO $$pthesis-public$$pDOI$$pIC$$ooai:infoscience.tind.io:163536$$qGLOBAL_SET$$pthesis$$pthesis-bn2018$$qDOI2
000163536 918__ $$dEDIC2005-2015$$cIIF$$aIC
000163536 919__ $$aLAMP1
000163536 920__ $$b2011
000163536 970__ $$a5007/THESES
000163536 973__ $$sPUBLISHED$$aEPFL
000163536 980__ $$aTHESIS