publications: - title: "Transparantie in variabiliteit: Heldere keuzes in een eenduidige configuratieomgeving" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" - name: "Gert Florijn" link: "https://researchr.org/alias/gert-florijn" - name: "Merijn de Jonge" link: "https://researchr.org/profile/merijndejonge/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2004" month: "February" abstract: "Elk eerbiedwaardig softwaresysteem biedt tegenwoordig de mogelijkheid om gedurende de levensduur de eigenschappen ervan te wijzigen. Om deze variatiepunten te modelleren wordt in het Jaquard-project TraCE gewerkt aan transparante configuratieomgevingen." researchr: "https://researchr.org/publication/DolstraFJV04" cites: 0 citedby: 0 journal: "Informatie" volume: "46" number: "1" pages: "18-21" kind: "article" key: "DolstraFJV04" - title: "Grammar Engineering Support for Precedence Rule Recovery and Compatibility Checking" author: - name: "Eric Bouwers" link: "http://www.st.ewi.tudelft.nl/~bouwers/main/" - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://dx.doi.org/10.1016/j.entcs.2008.03.046" abstract: "A wide range of parser generators are used to generate parsers for programming languages. The grammar formalisms that come with parser generators provide different approaches for defining operator precedence. Some generators (e.g. YACC) support precedence declarations, others require the grammar to be unambiguous, thus encoding the precedence rules. Even if the grammar formalism provides precedence rules, a particular grammar might not use it. The result is grammar variants implementing the same language. For the C language, the GNU Compiler uses YACC with precedence rules, the C-Transformers uses SDF without priorities, while the SDF library does use priorities. For PHP, Zend uses YACC with precedence rules, whereas PHP-front uses SDF with priority and associativity declarations. The variance between grammars raises the question if the precedence rules of one grammar are compatible with those of another. This is usually not obvious, since some languages have complex precedence rules. Also, for some parser generators the semantics of precedence rules is defined operationally, which makes it hard to reason about their effect on the defined language. We present a method and tool for comparing the precedence rules of different grammars and parser generators. Although it is undecidable whether two grammars define the same language, this tool provides support for comparing and recovering precedence rules, which is especially useful for reliable migration of a grammar from one grammar formalism to another. We evaluate our method by the application to non-trivial mainstream programming languages, such as PHP and C." links: doi: "http://dx.doi.org/10.1016/j.entcs.2008.03.046" tags: - "programming languages" - "semantics" - "rule-based" - "syntax definition" - "YACC" - "precedence rule" - "SDF" - "Stratego/XT" - "language engineering" - "grammar engineering" - "PHP" - "rules" - "C++" - "migration" - "compiler" - "programming" - "operational semantics" - "priority" - "parsing" - "scannerless parsing" - "systematic-approach" - "ASF+SDF" - "grammar" - "Stratego" researchr: "https://researchr.org/publication/BouwersBV08" cites: 0 citedby: 1 journal: "Electronic Notes in Theoretical Computer Science" volume: "203" number: "2" pages: "85-101" kind: "article" key: "BouwersBV08" - title: "Imposing a Memory Management Discipline on Software Deployment" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Merijn de Jonge" link: "https://researchr.org/profile/merijndejonge/publications" year: "2004" doi: "https://doi.org/10.1109/ICSE.2004.1317480" abstract: "The deployment of software components frequently fails because dependencies on other components are not declared explicitly or are declared imprecisely. This results in an incomplete reproduction of the environment necessary for proper operation, or in interference between incompatible variants. In this paper we show that these deployment hazards are similar to pointer hazards in memory models of programming languages and can be countered by imposing a memory management discipline on software deployment. Based on this analysis we have developed a generic, platform and language independent, discipline for deployment that allows precise dependency verification; exact identification of component variants; computation of complete closures containing all components on which a component depends; maximal sharing of components between such closures; and concurrent installation of revisions and variants of components. We have implemented the approach in the Nix deployment system, and used it for the deployment of a large number of existing Linux packages. We compare its effectiveness to other deployment systems." links: doi: "https://doi.org/10.1109/ICSE.2004.1317480" tags: - "programming languages" - "rule-based" - "program analysis" - "deployment" - "completeness" - "meta programming" - "generic programming" - "software components" - "program verification" - "meta-model" - "memory management" - "modeling language" - "language modeling" - "software deployment" - "Nix" - "software component" - "analysis" - "programming" - "Meta-Environment" - "systematic-approach" researchr: "https://researchr.org/publication/DolstraVJ04" cites: 0 citedby: 0 pages: "583-592" booktitle: "26th International Conference on Software Engineering (ICSE 2004), 23-28 May 2004, Edinburgh, United Kingdom" publisher: "IEEE Computer Society" isbn: "0-7695-2163-0" kind: "inproceedings" key: "DolstraVJ04" - title: "Integrating Software Construction and Software Deployment" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" year: "2003" doi: "http://link.springer.de/link/service/series/0558/bibs/2649/26490102.htm" links: doi: "http://link.springer.de/link/service/series/0558/bibs/2649/26490102.htm" tags: - "deployment" researchr: "https://researchr.org/publication/Dolstra03" cites: 0 citedby: 0 pages: "102-117" booktitle: "Software Configuration Management, ICSE Workshops SCM 2001 and SCM 2003 Toronto, Canada, May 14-15, 2001 and Portland, OR, USA, May 9-10, 2003. Selected Papers" editor: - name: "Bernhard Westfechtel" link: "https://researchr.org/alias/bernhard-westfechtel" - name: "André van der Hoek" link: "http://www.ics.uci.edu/~andre/" volume: "2649" series: "Lecture Notes in Computer Science" publisher: "Springer" isbn: "3-540-14036-0" kind: "inproceedings" key: "Dolstra03" - title: "Declarative, formal, and extensible syntax definition for AspectJ" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Éric Tanter" link: "http://pleiad.dcc.uchile.cl/people/etanter" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2006" doi: "http://doi.acm.org/10.1145/1167473.1167491" abstract: " Aspect-Oriented Programming (AOP) is attracting attention from both research and industry, as illustrated by the ever-growing popularity of AspectJ, the de facto standard AOP extension of Java. From a compiler construction perspective AspectJ is interesting as it is a typical example of compositional language, ie a language composed of a number of separate languages with different syntactical styles: in addition to plain Java, AspectJ includes a language for defining pointcuts and one for defining advices. Language composition represents a non-trivial challenge for conventional parsing techniques. First, combining several languages with different lexical syntax leads to considerable complexity in the lexical states to processed. Second, as new language features for AOP are being explored, many research proposals are concerned with further extending the AspectJ language, resulting in a need for an extensible syntax definition.This paper shows how scannerless parsing elegantly addresses the issues encountered by conventional techniques when parsing AspectJ . We present the design of a modular, extensible, and formal definition of the lexical and context-free aspects of the AspectJ syntax in the Syntax Definition Formalism SDF, which is implemented by a scannerless, generalized-LR parser (SGLR). We introduce grammar mixins as a novel application of SDF's modularity features, which allows the declarative definition of different keyword policies and combination of extensions. We illustrate the modular extensibility of our definition with syntax extensions taken from current research on aspect languages. Finally, benchmarks show the reasonable performance of scannerless generalized-LR parsing for this grammar. " links: doi: "http://doi.acm.org/10.1145/1167473.1167491" tags: - "programming languages" - "AspectJ" - "object-oriented programming" - "Java" - "syntax definition" - "SDF" - "lexical syntax" - "design complexity" - "composition" - "design research" - "language design" - "aspect oriented programming" - "compiler" - "programming" - "subject-oriented programming" - "context-aware" - "language composition" - "parsing" - "design" - "scannerless parsing" - "extensible language" - "ASF+SDF" - "feature-oriented programming" - "SGLR" - "grammar" researchr: "https://researchr.org/publication/BravenboerTV06" cites: 0 citedby: 1 pages: "209-228" booktitle: "Proceedings of the 21th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2006, October 22-26, 2006, Portland, Oregon, USA" editor: - name: "Peri L. Tarr" link: "http://portal.acm.org/author_page.cfm?id=81100131551&coll=GUIDE&dl=GUIDE&trk=0&CFID=51133021&CFTOKEN=87963901" - name: "William R. Cook" link: "http://www.cs.utexas.edu/~wcook/" publisher: "ACM" isbn: "1-59593-348-4" kind: "inproceedings" key: "BravenboerTV06" - title: "Purely Functional System Configuration Management" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" - name: "Armijn Hemel" link: "https://researchr.org/alias/armijn-hemel" year: "2007" doi: "http://www.usenix.org/events/hotos07/tech/full_papers/dolstra/dolstra.pdf" links: doi: "http://www.usenix.org/events/hotos07/tech/full_papers/dolstra/dolstra.pdf" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/hotos/DolstraH07" researchr: "https://researchr.org/publication/DolstraH07" cites: 0 citedby: 0 booktitle: "Proceedings of HotOS 07: 11th Workshop on Hot Topics in Operating Systems, May 7-9, 2005, San Diego, California, USA" editor: - name: "Galen C. Hunt" link: "https://researchr.org/alias/galen-c.-hunt" publisher: "USENIX Association" kind: "inproceedings" key: "DolstraH07" - title: "Stratego/XT 0.16: components for transformation systems" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Rob Vermaas" link: "https://researchr.org/profile/robvermaas/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2006" doi: "http://doi.acm.org/10.1145/1111542.1111558" abstract: "Stratego/XT is a language and toolset for program transformation. The Stratego language provides rewrite rules for expressing basic transformations, programmable rewriting strategies for controlling the application of rules, concrete syntax for expressing the patterns of rules in the syntax of the object language, and dynamic rewrite rules for expressing context-sensitive transformations, thus supporting the development of transformation components at a high level of abstraction. The XT toolset offers a collection of flexible, reusable transformation components, as well as declarative languages for deriving new components. Complete program transformation systems are composed from these components. In this paper we give an overview of Stratego/XT 0.16. " links: doi: "http://doi.acm.org/10.1145/1111542.1111558" successor: "https://researchr.org/publication/BravenboerKVV08" tags: - "control systems" - "programming languages" - "object-oriented programming" - "concrete object syntax" - "reusable components" - "rule-based" - "completeness" - "meta programming" - "pattern language" - "graph transformation" - "Stratego/XT" - "transformation language" - "reuse" - "graph-rewriting" - "rules" - "transformation system" - "subject-oriented programming" - "context-aware" - "abstraction" - "Meta-Environment" - "rewriting" - "rewriting strategies" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/BravenboerKVV06" cites: 0 citedby: 0 pages: "95-99" booktitle: "Proceedings of the 2006 ACM SIGPLAN Workshop on Partial Evaluation and Semantics-based Program Manipulation, 2006, Charleston, South Carolina, USA, January 9-10, 2006" editor: - name: "John Hatcliff" link: "http://people.cis.ksu.edu/~hatcliff/newweb/" - name: "Frank Tip" link: "http://domino.research.ibm.com/comm/research_people.nsf/pages/tip.index.html" publisher: "ACM" isbn: "1-59593-196-1" kind: "inproceedings" key: "BravenboerKVV06" - title: "Maximal Laziness: An Efficient Interpretation Technique for Purely Functional DSLs" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" year: "2009" doi: "http://dx.doi.org/10.1016/j.entcs.2009.09.042" links: doi: "http://dx.doi.org/10.1016/j.entcs.2009.09.042" tags: - "laziness" - "DSL" researchr: "https://researchr.org/publication/Dolstra09" cites: 0 citedby: 0 journal: "Electronic Notes in Theoretical Computer Science" volume: "238" number: "5" pages: "81-99" kind: "article" key: "Dolstra09" - title: "Generalized Type-Based Disambiguation of Meta Programs with Concrete Object Syntax" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Rob Vermaas" link: "https://researchr.org/profile/robvermaas/publications" - name: "Jurgen J. Vinju" link: "http://homepages.cwi.nl/~jurgenv/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2005" doi: "http://dx.doi.org/10.1007/11561347_12" abstract: "In meta programming with concrete object syntax, object-level programs are composed from fragments written in concrete syntax. The use of small program fragments in such quotations and the use of meta-level expressions within these fragments (anti-quotation) often leads to ambiguities. This problem is usually solved through explicit disambiguation, resulting in considerable syntactic overhead. A few systems manage to reduce this overhead by using type information during parsing. Since this is hard to achieve with traditional parsing technology, these systems provide specific combinations of meta and object languages, and their implementations are difficult to reuse. In this paper, we generalize these approaches and present a language independent method for introducing concrete object syntax without explicit disambiguation. The method uses scannerless generalized-LR parsing to parse meta programs with embedded object-level fragments, which produces a forest of all possible parses. This forest is reduced to a tree by a disambiguating type checker for the meta language. To validate our method we have developed embeddings of several object languages in Java, including AspectJ and Java itself. " links: doi: "http://dx.doi.org/10.1007/11561347_12" tags: - "programming languages" - "AspectJ" - "object-oriented programming" - "concrete object syntax" - "rule-based" - "Java" - "syntax definition" - "meta programming" - "SDF" - "meta-model" - "disambiguation" - "type system" - "reuse" - "programming" - "subject-oriented programming" - "Meta-Environment" - "parsing" - "scannerless parsing" - "systematic-approach" - "ASF+SDF" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "domain-specific language" researchr: "https://researchr.org/publication/BravenboerVVV05" cites: 0 citedby: 2 pages: "157-172" booktitle: "Generative Programming and Component Engineering, 4th International Conference, GPCE 2005" editor: - name: "Robert Glück" link: "http://www.diku.dk/hjemmesider/ansatte/glueck/" - name: "Michael R. Lowry" link: "https://researchr.org/alias/michael-r.-lowry" volume: "3676" series: "Lecture Notes in Computer Science" address: "Tallinn, Estonia" publisher: "Springer" isbn: "3-540-29138-5" kind: "inproceedings" key: "BravenboerVVV05" - title: "Efficient Upgrading in a Purely Functional Component Deployment Model" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" year: "2005" doi: "http://dx.doi.org/10.1007/11424529_15" links: doi: "http://dx.doi.org/10.1007/11424529_15" tags: - "deployment" researchr: "https://researchr.org/publication/Dolstra05" cites: 0 citedby: 0 pages: "219-234" booktitle: "Component-Based Software Engineering, 8th International Symposium, CBSE 2005, St. Louis, MO, USA, May 14-15, 2005, Proceedings" editor: - name: "George T. Heineman" link: "https://researchr.org/alias/george-t.-heineman" - name: "Ivica Crnkovic" link: "https://researchr.org/alias/ivica-crnkovic" - name: "Heinz W. Schmidt" link: "https://researchr.org/alias/heinz-w.-schmidt" - name: "Judith A. Stafford" link: "https://researchr.org/alias/judith-a.-stafford" - name: "Clemens A. Szyperski" link: "https://researchr.org/alias/clemens-a.-szyperski" - name: "Kurt C. Wallnau" link: "https://researchr.org/alias/kurt-c.-wallnau" volume: "3489" series: "Lecture Notes in Computer Science" publisher: "Springer" isbn: "3-540-25877-9" kind: "inproceedings" key: "Dolstra05" - title: "Program Transformation with Scoped Dynamic Rewrite Rules" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Arthur van Dam" link: "https://researchr.org/profile/arthurvandam/publications" - name: "Karina Olmos" link: "https://researchr.org/profile/karinaolmos/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2006" doi: "https://content.iospress.com/articles/fundamenta-informaticae/fi69-1-2-06" abstract: "The applicability of term rewriting to program transformation is limited by the lack of control over rule application and by the context-free nature of rewrite rules. The first problem is addressed by languages supporting user-definable rewriting strategies. The second problem is addressed by the extension of rewriting strategies with scoped dynamic rewrite rules. Dynamic rules are defined at run-time and can access variables available from their definition context. Rules defined within a rule scope are automatically retracted at the end of that scope. In this paper, we explore the design space of dynamic rules, and their application to transformation problems. The technique is formally defined by extending the operational semantics underlying the program transformation language Stratego, and illustrated by means of several program transformations in Stratego, including constant propagation, bound variable renaming, dead code elimination, function inlining, and function specialization. " links: doi: "https://content.iospress.com/articles/fundamenta-informaticae/fi69-1-2-06" "technical report": "http://www.cs.uu.nl/research/techreps/UU-CS-2005-005.html" tags: - "programming languages" - "semantics" - "rule-based" - "formal semantics" - "graph transformation" - "dynamic rewrite rules" - "Stratego/XT" - "transformation language" - "term rewriting" - "language design" - "graph-rewriting" - "rules" - "operational semantics" - "context-aware" - "access control" - "rewriting" - "design" - "role-based access control" - "rewriting strategies" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/BravenboerDOV06" cites: 0 citedby: 4 journal: "Fundamenta Informaticae" volume: "69" number: "1-2" pages: "123-178" kind: "article" key: "BravenboerDOV06" - title: "Parse Table Composition" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2009" doi: "http://dx.doi.org/10.1007/978-3-642-00434-6_6" abstract: "Module systems, separate compilation, deployment of binary components, and dynamic linking have enjoyed wide acceptance in programming languages and systems. In contrast, the syntax of languages is usually defined in a non-modular way, cannot be compiled separately, cannot easily be combined with the syntax of other languages, and cannot be deployed as a component for later composition. Grammar formalisms that do support modules use whole program compilation. Current extensible compilers focus on source-level extensibility, which requires users to compile the compiler with a specific configuration of extensions. A compound parser needs to be generated for every combination of extensions. The generation of parse tables is expensive, which is a particular problem when the composition configuration is not fixed to enable users to choose language extensions. In this paper we introduce an algorithm for parse table composition to support separate compilation of grammars to parse table components. Parse table components can be composed (linked) efficiently at runtime, i.e. just before parsing. While the worst-case time complexity of parse table composition is exponential (like the complexity of parse table generation itself), for realistic language combination scenarios involving grammars for real languages, our parse table composition algorithm is an order of magnitude faster than computation of the parse table for the combined grammars. " links: doi: "http://dx.doi.org/10.1007/978-3-642-00434-6_6" tags: - "parsing algorithm" - "programming languages" - "deployment" - "syntax definition" - "SDF" - "composition" - "source-to-source" - "parse table composition" - "compiler" - "programming" - "language composition" - "parsing" - "extensible language" - "ASF+SDF" - "open-source" - "grammar" - "domain-specific language" researchr: "https://researchr.org/publication/BravenboerV08" cites: 0 citedby: 0 pages: "74-94" booktitle: "Software Language Engineering, First International Conference, SLE 2008, Toulouse, France, September 29-30, 2008. Revised Selected Papers" editor: - name: "Dragan Gasevic" link: "http://www.sfu.ca/~dgasevic/" - name: "Ralf Lämmel" link: "http://www.uni-koblenz.de/~laemmel/Site/Home.html" - name: "Eric {Van Wyk}" link: "http://www-users.cs.umn.edu/~evw/" volume: "5452" series: "Lecture Notes in Computer Science" publisher: "Springer" isbn: "978-3-642-00433-9" kind: "inproceedings" key: "BravenboerV08" - title: "Secure sharing between untrusted users in a transparent source/binary deployment model" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" year: "2005" doi: "http://doi.acm.org/10.1145/1101908.1101933" links: doi: "http://doi.acm.org/10.1145/1101908.1101933" tags: - "deployment" - "source-to-source" - "open-source" researchr: "https://researchr.org/publication/Dolstra05%3A0" cites: 0 citedby: 0 pages: "154-163" booktitle: "20th IEEE/ACM International Conference on Automated Software Engineering (ASE 2005), November 7-11, 2005, Long Beach, CA, USA" editor: - name: "David F. Redmiles" link: "https://researchr.org/alias/david-f.-redmiles" - name: "Thomas Ellman" link: "https://researchr.org/alias/thomas-ellman" - name: "Andrea Zisman" link: "https://researchr.org/alias/andrea-zisman" publisher: "ACM" kind: "inproceedings" key: "Dolstra05:0" - title: "Nix: A Safe and Policy-Free System for Software Deployment" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" - name: "Merijn de Jonge" link: "https://researchr.org/profile/merijndejonge/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2004" doi: "http://www.usenix.org/publications/library/proceedings/lisa04/tech/dolstra.html" abstract: "Existing systems for software deployment are neither safe nor sufficiently flexible. Primary safety issues are the inability to enforce reliable specification of component dependencies, and the lack of support for multiple versions or variants of a component. This renders deployment operations such as upgrading or deleting components dangerous and unpredictable. A deployment system must also be flexible (i.e., policy-free) enough to support both centralised and local package management, and to allow a variety of mechanisms for transferring components. In this paper we present Nix, a deployment system that addresses these issues through a simple technique of using cryptographic hashes to compute unique paths for component instances." links: doi: "http://www.usenix.org/publications/library/proceedings/lisa04/tech/dolstra.html" tags: - "deployment" - "software components" - "software deployment" - "Nix" - "software component" researchr: "https://researchr.org/publication/DolstraJV04" cites: 0 citedby: 0 pages: "79-92" booktitle: "Proceedings of the 18th Conference on Systems Administration (LISA 2004), Atlanta, USA, November 14-19, 2004" publisher: "USENIX" kind: "inproceedings" key: "DolstraJV04" - title: "Build-Level Components" author: - name: "Merijn de Jonge" link: "https://researchr.org/profile/merijndejonge/publications" year: "2005" doi: "http://doi.ieeecomputersociety.org/10.1109/TSE.2005.77" links: doi: "http://doi.ieeecomputersociety.org/10.1109/TSE.2005.77" researchr: "https://researchr.org/publication/Jonge05" cites: 0 citedby: 0 journal: "IEEE Trans. Software Eng." volume: "31" number: "7" pages: "588-600" kind: "article" key: "Jonge05" - title: "The Purely Functional Software Deployment Model" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" year: "2006" month: "January" abstract: "Software deployment is the set of activities related to getting software components to work on the machines of end users. It includes activities such as installation, upgrading, uninstallation, and so on. Many tools have been developed to support deployment, but they all have serious limitations with respect to correctness. For instance, the installation of a component can lead to the failure of previously installed components; a component might require other components that are not present; and it is generally difficult to undo deployment actions. The fundamental causes of these problems are a lack of isolation between components, the difficulty in identifying the dependencies between components, and incompatibilities between versions and variants of components. This thesis describes a better approach based on a purely functional deployment model, implemented in a deployment system called Nix. Components are stored in isolation from each other in a Nix store. Each component has a name that contains a cryptographic hash of all inputs that contributed to its build process, and the content of a component never changes after it has been built. Hence the model is purely functional. This storage scheme provides several important advantages. First, it ensures isolation between components: if two components differ in any way, they will be stored in different locations and will not overwrite each other. Second, it allows us to identify component dependencies. Undeclared build time dependencies are prevented due to the absence of “global” component directories used in other deployment systems. Runtime dependencies can be found by scanning for cryptographic hashes in the binary contents of components, a technique analogous to conservative garbage collection in programming language implementation. Since dependency information is complete, complete deployment can be performed by copying closures of components under the dependency relation. Developers and users are not confronted with components’ cryptographic hashes directly. Components are built automatically from Nix expressions, which describe how to build and compose arbitrary software components; hashes are computed as part of this process. Components are automatically made available to users through “user environments”, which are synthesised sets of activated components. User environments enable atomic upgrades and rollbacks, as well as different sets of activated components for different users. Nix expressions provide a source-based deployment model. However, source-based deployment can be transparently optimised into binary deployment by making pre-built binaries (keyed on their cryptographic hashes) available in a shared location such as a network server. This is referred to as transparent source/binary deployment. The purely functional deployment model has been validated by applying it to the deployment of more than 278 existing Unix packages. In addition, this thesis shows that the model can be applied naturally to the related activities of continuous integration using build farms, service deployment and build management." tags: - "programming languages" - "rule-based" - "deployment" - "completeness" - "meta programming" - "software components" - "meta-model" - "modeling language" - "modeling" - "language modeling" - "functional programming" - "software component" - "source-to-source" - "information models" - "programming" - "Meta-Environment" - "process modeling" - "systematic-approach" - "open-source" researchr: "https://researchr.org/publication/Dolstra2006" cites: 0 citedby: 0 school: "Utrecht University" address: "Utrecht, The Netherlands" advisor: - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "S. Doaitse Swierstra" link: "http://www.cs.uu.nl/staff/doaitse.html" kind: "phdthesis" key: "Dolstra2006" - title: "Stratego/XT 0.17. A language and toolset for program transformation" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Karl Trygve Kalleberg" link: "http://www.ii.uib.no/~karltk/" - name: "Rob Vermaas" link: "https://researchr.org/profile/robvermaas/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://dx.doi.org/10.1016/j.scico.2007.11.003" abstract: "Stratego/XT is a language and toolset for program transformation. The Stratego language provides rewrite rules for expressing basic transformations, programmable rewriting strategies for controlling the application of rules, concrete syntax for expressing the patterns of rules in the syntax of the object language, and dynamic rewrite rules for expressing context-sensitive transformations, thus supporting the development of transformation components at a high level of abstraction. The XT toolset offers a collection of flexible, reusable transformation components, and tools for generating such components from declarative specifications. Complete program transformation systems are composed from these components." links: doi: "http://dx.doi.org/10.1016/j.scico.2007.11.003" "technical report (pdf)": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2008-011.pdf" "stratego/xt": "http://strategoxt.org" tags: - "control systems" - "programming languages" - "object-oriented programming" - "concrete object syntax" - "reusable components" - "rule-based" - "completeness" - "meta programming" - "pattern language" - "graph transformation" - "Stratego/XT" - "transformation language" - "reuse" - "graph-rewriting" - "rules" - "transformation system" - "DSL" - "programming" - "subject-oriented programming" - "context-aware" - "abstraction" - "Meta-Environment" - "rewriting" - "rewriting strategies" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "transformation" - "Stratego" - "program transformation" researchr: "https://researchr.org/publication/BravenboerKVV08" cites: 0 citedby: 7 journal: "Science of Computer Programming" volume: "72" number: "1-2" pages: "52-70" kind: "article" key: "BravenboerKVV08" - title: "Decoupling Source Trees into Build-Level Components" author: - name: "Merijn de Jonge" link: "https://researchr.org/profile/merijndejonge/publications" year: "2004" doi: "http://springerlink.metapress.com/openurl.asp?genre=article&issn=0302-9743&volume=3107&spage=215" links: doi: "http://springerlink.metapress.com/openurl.asp?genre=article&issn=0302-9743&volume=3107&spage=215" tags: - "source-to-source" - "peer-to-peer" - "open-source" researchr: "https://researchr.org/publication/Jonge04" cites: 0 citedby: 0 pages: "215-231" booktitle: "Software Reuse: Methods, Techniques and Tools: 8th International Conference, ICSR 2004, Madrid, Spain, July 5-9, 2009. Proceedings" volume: "3107" series: "Lecture Notes in Computer Science" publisher: "Springer" isbn: "3-540-22335-5" kind: "inproceedings" key: "Jonge04" - title: "Mixing source and bytecode: a case for compilation by normalization" author: - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2008" doi: "http://doi.acm.org/10.1145/1449764.1449772" abstract: "Language extensions increase programmer productivity by providing concise, often domain-specific syntax, and support for static verification of correctness, security, and style constraints. Language extensions can often be realized through translation to the base language, supported by preprocessors and extensible compilers. However, various kinds of extensions require further adaptation of a base compiler's internal stages and components, for example to support separate compilation or to make use of low-level primitives of the platform (e.g., jump instructions or unbalanced synchronization). To allow for a more loosely coupled approach, we propose an open compiler model based on normalization steps from a high-level language to a subset of it, the core language. We developed such a compiler for a mixed Java and (core) bytecode language, and evaluate its effectiveness for composition mechanisms such as traits, as well as statement-level and expression-level language extensions. " links: doi: "http://doi.acm.org/10.1145/1449764.1449772" "technical report (pdf)": "http://www.lclnet.nl/publications/TUD-SERG-2008-030.pdf" "project home page": "http://www.strategoxt.org/Stratego/TheDryadCompiler" tags: - "compilation by normalization" - "rule-based" - "Java" - "synchronization" - "translation" - "meta-model" - "modeling language" - "Stratego/XT" - "language modeling" - "composition" - "constraints" - "source-to-source" - "C++" - "Dryad" - "security" - "compiler" - "Meta-Environment" - "extensible language" - "systematic-approach" - "open-source" - "Stratego" - "JavaFront" - "domain-specific language" researchr: "https://researchr.org/publication/KatsBV08" cites: 44 citedby: 3 pages: "91-108" booktitle: "Proceedings of the 23rd Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2008, October 19-23, 2008, Nashville, TN, USA" editor: - name: "Gail E. Harris" link: "https://researchr.org/alias/gail-e.-harris" publisher: "ACM" isbn: "978-1-60558-215-3" kind: "inproceedings" key: "KatsBV08" - title: "Concrete syntax for objects: domain-specific language embedding and assimilation without restrictions" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2004" doi: "http://doi.acm.org/10.1145/1028976.1029007" abstract: "Application programmer's interfaces give access to domain knowledge encapsulated in class libraries without providing the appropriate notation for expressing domain composition. Since object-oriented languages are designed for extensibility and reuse, the language constructs are often sufficient for expressing domain abstractions at the semantic level. However, they do not provide the right abstractions at the syntactic level. In this paper we describe MetaBorg, a method for providing concrete syntax for domain abstractions to application programmers. The method consists of embedding domain-specific languages in a general purpose host language and assimilating the embedded domain code into the surrounding host code. Instead of extending the implementation of the host language, the assimilation phase implements domain abstractions in terms of existing APIs leaving the host language undisturbed. Indeed, MetaBorg can be considered a method for promoting APIs to the language level. The method is supported by proven and available technology, i.e. the syntax definition formalism SDF and the program transformation language and toolset Stratego/XT. We illustrate the method with applications in three domains: code generation, XML generation, and user-interface construction." links: doi: "http://doi.acm.org/10.1145/1028976.1029007" tags: - "programming languages" - "object-oriented programming" - "concrete object syntax" - "syntax definition" - "meta programming" - "assimilation" - "SDF" - "XML" - "XML Schema" - "Stratego/XT" - "transformation language" - "composition" - "MetaBorg" - "language design" - "reuse" - "code generation" - "subject-oriented programming" - "abstraction" - "Meta-Environment" - "extensible language" - "ASF+SDF" - "feature-oriented programming" - "concrete syntax" - "meta-objects" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/BravenboerV04" cites: 51 citedby: 8 pages: "365-383" booktitle: "Proceedings of the 19th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2004" editor: - name: "John M. Vlissides" link: "https://researchr.org/alias/john-m.-vlissides" - name: "Douglas C. Schmidt" link: "https://researchr.org/alias/douglas-c.-schmidt" address: "Vancouver, BC, Canada" publisher: "ACM" isbn: "1-58113-831-8" kind: "inproceedings" key: "BravenboerV04" - title: "NixOS: a purely functional Linux distribution" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" year: "2008" doi: "http://doi.acm.org/10.1145/1411204.1411255" abstract: "Existing package and system configuration management tools suffer from an imperative model, where system administration actions such as upgrading packages or changes to system configuration files are stateful: they destructively update the state of the system. This leads to many problems, such as the inability to roll back changes easily, to run multiple versions of a package side-by-side, to reproduce a configuration deterministically on another machine, or to reliably upgrade a system. In this paper we show that we can overcome these problems by moving to a purely functional system configuration model. This means that all static parts of a system (such as software packages, configuration files and system startup scripts) are built by pure functions and are immutable, stored in a way analogously to a heap in a purely function language. We have implemented this model in NixOS, a non-trivial Linux distribution that uses the Nix package manager to build the entire system configuration from a purely functional specification. " links: doi: "http://doi.acm.org/10.1145/1411204.1411255" tags: - "meta-model" - "modeling language" - "language modeling" - "Meta-Environment" - "state machines" researchr: "https://researchr.org/publication/DolstraL08" cites: 0 citedby: 0 pages: "367-378" booktitle: "Proceeding of the 13th ACM SIGPLAN international conference on Functional programming, ICFP 2008, Victoria, BC, Canada, September 20-28, 2008" editor: - name: "James Hook" link: "https://researchr.org/alias/james-hook" - name: "Peter Thiemann" link: "http://www.informatik.uni-freiburg.de/~thiemann/" publisher: "ACM" isbn: "978-1-59593-919-7" kind: "inproceedings" key: "DolstraL08" - title: "Service configuration management" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2005" doi: "http://doi.acm.org/10.1145/1109128.1109135" abstract: "The deployment of services --- sets of running programs that provide some useful facility on a system or network --- is typically implemented through a manual, time-consuming and error-prone process. For instance, system administrators must deploy the necessary software components, edit configuration files, start or stop processes, and so on. This is often done in an ad hoc style with no reproducibility, violating proper configuration management practices. In this paper we show that build management, software deployment and service deployment can be integrated into a single formalism. We do this in the context of the Nix software deployment system, and show that its advantages --- co-existence of versions and variants, atomic upgrades and rollbacks, and component closure --- extend naturally to service deployment. The approach also elegantly extends to distributed services. In addition, we show that the Nix expression language can simplify the implementation of crosscutting variation points in services. " links: doi: "http://doi.acm.org/10.1145/1109128.1109135" tags: - "programming languages" - "SCM" - "deployment" - "software components" - "software deployment" - "Nix" - "software component" - "software configuration" - "service configuration management" - "context-aware" - "systematic-approach" researchr: "https://researchr.org/publication/DolstraBV05" cites: 0 citedby: 0 pages: "83-98" booktitle: "Proceedings of the 12th International Workshop on Software Configuration Management, SCM 2005, Lisbon, Portugal, September 5-6, 2005" publisher: "ACM" isbn: "1-59593-310-7" kind: "inproceedings" key: "DolstraBV05" - title: "Designing Syntax Embeddings and Assimilations for Language Libraries" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2007" doi: "http://dx.doi.org/10.1007/978-3-540-69073-3_5" abstract: "Language libraries extend regular libraries with domain-specific notation. More precisely, a language library is a combination of a domain-specific language embedded in the general-purpose host language, a regular library implementing the underlying functionality, and an assimilation transformation that maps embedded DSL fragments to host language code. While the basic architecture for realizing language libraries is the same for all applications, there are many design choices to be made in the design of a particular combination of library, guest language syntax, host language, and assimilation. In this paper, we give an overview of the design space for syntax embeddings and assimilations for the realization of language libraries. " links: doi: "http://dx.doi.org/10.1007/978-3-540-69073-3_5" technicalreport: "https://researchr.org/publication/TUD-SERG-2008-042" tags: - "syntax embedding" - "syntax definition" - "assimilation" - "transformation language" - "architecture" - "language design" - "DSL" - "language libraries" - "design" - "transformation" - "domain-specific language" researchr: "https://researchr.org/publication/BravenboerV07" cites: 24 citedby: 1 pages: "34-46" booktitle: "Models in Software Engineering, Workshops and Symposia at MoDELS 2007, Nashville, TN, USA, September 30 - October 5, 2007, Reports and Revised Selected Papers" editor: - name: "Holger Giese" link: "https://researchr.org/alias/holger-giese" volume: "5002" series: "Lecture Notes in Computer Science" publisher: "Springer" isbn: "978-3-540-69069-6" kind: "inproceedings" key: "BravenboerV07" - title: "Exercises in free syntax. Syntax definition, parsing, and assimilation of language conglomerates" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" year: "2008" month: "January" links: "thesis": "http://martin.bravenboer.name/thesis.html" tags: - "syntax definition" - "assimilation" - "parsing" researchr: "https://researchr.org/publication/Bra08" cites: 168 citedby: 1 school: "Utrecht University" address: "Utrecht, The Netherlands" advisor: - name: "S. Doaitse Swierstra" link: "http://www.cs.uu.nl/staff/doaitse.html" - name: "Eelco Visser" link: "http://eelcovisser.org" kind: "phdthesis" key: "Bra08" - title: "MetaBorg in Action: Examples of Domain-Specific Language Embedding and Assimilation Using Stratego/XT" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "René de Groot" link: "http://strategoxt.org/Main/ReneDeGroot" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2006" doi: "http://dx.doi.org/10.1007/11877028_10" abstract: "General-purpose programming languages provide limited facilities for expressing domain-specific concepts in a natural manner. All domain concepts need to be captured using the same generic syntactic and semantic constructs. Generative programming methods and program transformation techniques can be used to overcome this lack of abstraction in general-purpose languages. In this tutorial we describe the MetaBorg method for embedding domain-specific languages, tailored syntactically and semantically to the application domain at hand, in a general-purpose language. MetaBorg is based on Stratego/XT, a language and toolset for the implementation of program transformation systems, which is used for the definition of syntactic embeddings and assimilation of the embedded constructs into the surrounding code. We illustrate MetaBorg with three examples. JavaSwul is a custom designed language for implementing graphical user-interfaces, which provides high-level abstractions for component composition and event-handling. JavaRegex is a new embedding of regular expression matching and string rewriting. JavaJava is an embedding of Java in Java for generating Java code. For these cases we show how Java programs in these domains become dramatically more readable, and we give an impression of the implementation of the language embeddings. " links: doi: "http://dx.doi.org/10.1007/11877028_10" tags: - "generative programming" - "programming languages" - "rule-based" - "transformation engineering" - "Java" - "generic programming" - "assimilation" - "graph transformation" - "Stratego/XT" - "language engineering" - "domain-specific language embedding" - "transformation language" - "composition" - "MetaBorg" - "language design" - "graph-rewriting" - "transformation system" - "language embedding" - "DSL" - "programming" - "abstraction" - "language composition" - "rewriting" - "transformation" - "Stratego" - "program transformation" - "domain-specific language" researchr: "https://researchr.org/publication/BravenboerGV06" cites: 0 citedby: 3 pages: "297-311" booktitle: "Generative and Transformational Techniques in Software Engineering, International Summer School, GTTSE 2005, Braga, Portugal, July 4-8, 2005. Revised Papers" editor: - name: "Ralf Lämmel" link: "http://www.uni-koblenz.de/~laemmel/Site/Home.html" - name: "João Saraiva" link: "http://di.uminho.pt/~jas" - name: "Joost Visser" link: "http://www.di.uminho.pt/~joost.visser/" volume: "4143" series: "Lecture Notes in Computer Science" publisher: "Springer" isbn: "3-540-45778-X" kind: "inproceedings" key: "BravenboerGV06" - title: "Preventing injection attacks with syntax embeddings" author: - name: "Martin Bravenboer" link: "http://martin.bravenboer.name/" - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2007" doi: "http://doi.acm.org/10.1145/1289971.1289975" abstract: "Software written in one language often needs to construct sentences in another language, such as SQL queries, XML output, or shell command invocations. This is almost always done using unhygienic string manipulation, the concatenation of constants and client-supplied strings. A client can then supply specially crafted input that causes the constructed sentence to be interpreted in an unintended way, leading to an injection attack. We describe a more natural style of programming that yields code that is impervious to injections by construction. Our approach embeds the grammars of the guest languages (e.g., SQL) into that of the host language (e.g., Java) and automatically generates code that maps the embedded language to constructs in the host language that reconstruct the embedded sentences, adding escaping functions where appropriate. This approach is generic, meaning that it can be applied with relative ease to any combination of host and guest languages." links: doi: "http://doi.acm.org/10.1145/1289971.1289975" successor: "https://researchr.org/publication/BravenboerDV10" tags: - "programming languages" - "syntax embedding" - "Java" - "preventing injection attacks" - "generic programming" - "injection attack" - "SDF" - "XML" - "embedded software" - "XML Schema" - "SQL" - "security" - "language embedding" - "DSL" - "programming" - "systematic-approach" - "ASF+SDF" - "grammar" - "query language" researchr: "https://researchr.org/publication/BravenboerDV07" cites: 0 citedby: 4 pages: "3-12" booktitle: "Generative Programming and Component Engineering, 6th International Conference, GPCE 2007" editor: - name: "Charles Consel" link: "https://researchr.org/alias/charles-consel" - name: "Julia L. Lawall" link: "http://www.diku.dk/hjemmesider/ansatte/julia/" address: "Salzburg, Austria" publisher: "ACM" isbn: "978-1-59593-855-8" kind: "inproceedings" key: "BravenboerDV07"