publications: - title: "A Language Independent Task Engine for Incremental Name and Type Analysis" author: - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Danny M. Groenewegen" link: "https://www.linkedin.com/in/dannygroenewegen/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2013" doi: "http://dx.doi.org/10.1007/978-3-319-02654-1_15" abstract: "IDEs depend on incremental name and type analysis for responsive feedback for large projects. In this paper, we present a language-independent approach for incremental name and type analysis. Analysis consists of two phases. The first phase analyzes lexical scopes and binding instances and creates deferred analysis tasks. A task captures a single name resolution or type analysis step. Tasks might depend on other tasks and are evaluated in the second phase. Incrementality is supported on file and task level. When a file changes, only this file is recollected and only those tasks are reevaluated, which are affected by the changes in the collected data. The analysis does neither re-parse nor re-traverse unchanged files, even if they are affected by changes in other files. We implemented the approach as part of the Spoofax Language Workbench and evaluated it for the WebDSL web programming language. " links: doi: "http://dx.doi.org/10.1007/978-3-319-02654-1_15" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/WachsmuthKVGV13" technicalreport: "https://researchr.org/publication/TUD-SERG-2013-018" researchr: "https://researchr.org/publication/WachsmuthKVGV13" cites: 0 citedby: 0 pages: "260-280" booktitle: "SLE" kind: "inproceedings" key: "WachsmuthKVGV13" - title: "DynSem: A DSL for Dynamic Semantics Specification" author: - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Pierre Néron" link: "https://researchr.org/profile/pierrejeanmichelneron/publications" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2015" doi: "http://dx.doi.org/10.4230/LIPIcs.RTA.2015.365" abstract: "The formal semantics of a programming language and its implementation are typically separately defined, with the risk of divergence such that properties of the formal semantics are not properties of the implementation. In this paper, we present DynSem, a domain-specific language for the specification of the dynamic semantics of programming languages that aims at supporting both formal reasoning and efficient interpretation. DynSem supports the specification of the operational semantics of a language by means of statically typed conditional term reduction rules. DynSem supports concise specification of reduction rules by providing implicit build and match coercions based on reduction arrows and implicit term constructors. DynSem supports modular specification by adopting implicit propagation of semantic components from I-MSOS, which allows omitting propagation of components such as environments and stores from rules that do not affect those. DynSem supports the declaration of native operators for delegation of aspects of the semantics to an external definition or implementation. DynSem supports the definition of auxiliary meta-functions, which can be expressed using regular reduction rules and are subject to semantic component propagation. DynSem specifications are executable through automatic generation of a Java-based AST interpreter. " links: doi: "http://dx.doi.org/10.4230/LIPIcs.RTA.2015.365" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/rta/VerguNV15" "techreport": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2015-003.pdf" researchr: "https://researchr.org/publication/VerguNV15" cites: 0 citedby: 0 pages: "365-378" booktitle: "RTA" kind: "inproceedings" key: "VerguNV15" - title: "Specializing a meta-interpreter: JIT compilation of Dynsem specifications on the Graal VM" author: - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2018" doi: "https://doi.org/10.1145/3237009.3237018" abstract: " DynSem is a domain-specific language for concise specification of the dynamic semantics of programming languages, aimed at rapid experimentation and evolution of language designs. DynSem specifications can be executed to interpret programs in the language under development. To enable fast turnaround during language development, we have developed a meta-interpreter for DynSem specifications, which requires minimal processing of the specification. In addition to fast development time, we also aim to achieve fast run times for interpreted programs. In this paper we present the design of a meta-interpreter for DynSem and report on experiments with JIT compiling the application of the meta-interpreter on the Graal VM. By interpreting specifications directly, we have minimal compilation overhead. By specializing pattern matches, maintaining call-site dispatch chains and using native control-flow constructs we gain significant run-time performance. We evaluate the performance of the meta-interpreter when applied to the Tiger language specification running a set of common benchmark programs. Specialization enables the Graal VM to JIT compile the meta-interpreter giving speedups of up to factor 15 over running on the standard Oracle Java VM. " links: doi: "https://doi.org/10.1145/3237009.3237018" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/pppj/VerguV18" researchr: "https://researchr.org/publication/VerguV18" cites: 0 citedby: 0 booktitle: "PPPJ" kind: "inproceedings" key: "VerguV18" - title: "Finding bugs in program generators by dynamic analysis of syntactic language constraints" author: - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Mira Mezini" link: "https://researchr.org/alias/mira-mezini" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2014" doi: "http://doi.acm.org/10.1145/2584469.2584474" abstract: "Program generators and transformations are hard to implement correctly, because the implementation needs to generically describe how to construct programs, for example, using templates or rewrite rules. We apply dynamic analysis to program generators in order to support developers in finding bugs and identifying the source of the bug. Our analysis focuses on syntactic language constraints and checks that generated programs are syntactically well-formed. To retain a language's grammar as the unique specification of the language's syntax, we devised mechanisms to derive the analysis from the grammar. Moreover, we designed a run-time system to support the modular activation/deactivation of the analysis, so that generators do not require adaption. We have implemented the analysis for the Stratego term-rewriting language and applied it in case studies based on Spoofax and SugarJ." links: doi: "http://doi.acm.org/10.1145/2584469.2584474" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/aosd/ErdwegVMV14" researchr: "https://researchr.org/publication/ErdwegVMV14-demo" cites: 0 citedby: 0 pages: "17-20" booktitle: "AOSD" kind: "inproceedings" key: "ErdwegVMV14-demo" - title: "A Language Independent Task Engine for Incremental Name and Type Analysis" author: - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Danny M. Groenewegen" link: "https://www.linkedin.com/in/dannygroenewegen/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2013" month: "October" abstract: "IDEs depend on incremental name and type analysis for responsive feedback for large projects. In this paper, we present a language-independent approach for incremental name and type analysis. Analysis consists of two phases. The first phase analyzes lexical scopes and binding instances and creates deferred analysis tasks. A task captures a single name resolution or type analysis step. Tasks might depend on other tasks and are evaluated in the second phase. Incrementality is supported on file and task level. When a file changes, only this file is recollected and only those tasks are reevaluated, which are affected by the changes in the collected data. The analysis does neither re-parse nor re-traverse unchanged files, even if they are affected by changes in other files. We implemented the approach as part of the Spoofax Language Workbench and evaluated it for the WebDSL web programming language. " links: published: "https://researchr.org/publication/WachsmuthKVGV13" "pdf": "http://swerl.tudelft.nl/twiki/pub/Main/TechnicalReports/TUD-SERG-2013-014.pdf" researchr: "https://researchr.org/publication/TUD-SERG-2013-018" cites: 0 citedby: 0 institution: "Delft University of Technology" number: "TUD-SERG-2013-018" address: "Delft, The Netherlands" kind: "techreport" key: "TUD-SERG-2013-018" - title: "The Spoofax Name Binding Language" author: - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Lennart C. L. Kats" link: "http://www.lclnet.nl/" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2012" doi: "https://doi.org/10.1145/2384716.2384748" abstract: "In textual software languages, names are used to identify program elements such as variables, methods, and classes. Name analysis algorithms resolve names in order to establish references between definitions and uses of names. In this poster, we present the Spoofax Name Binding Language (NBL), a declarative meta-language for the specification of name binding and scope rules, which departs from the programmatic encodings of name binding provided by regular approaches. NBL aspires to become the universal language for name binding, which can be used next to BNF definitions in reference manuals, as well as serve the generation of implementations." links: doi: "https://doi.org/10.1145/2384716.2384748" "url": "https://doi.org/10.1145/2384716.2384748" tags: - "C++" - "Spoofax" researchr: "https://researchr.org/publication/KonatVKWV2012" cites: 0 citedby: 0 booktitle: "Companion to the 27th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2011, part of SPLASH 2012, Tucson, AR, USA, October 19 - 26, 2012" kind: "inproceedings" key: "KonatVKWV2012" - title: "Modular specification and dynamic enforcement of syntactic language constraints when generating code" author: - name: "Sebastian Erdweg" link: "http://www.informatik.uni-marburg.de/~seba/" - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Mira Mezini" link: "https://researchr.org/alias/mira-mezini" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2014" doi: "http://doi.acm.org/10.1145/2577080.2577089" abstract: "A key problem in metaprogramming and specifically in generative programming is to guarantee that generated code is well-formed with respect to the context-free and context-sensitive constraints of the target language. We propose typesmart constructors as a dynamic approach to enforcing the well-formedness of generated code. A typesmart constructor is a function that is used in place of a regular constructor to create values, but it may reject the creation of values if the given data violates some language-specific constraint. While typesmart constructors can be implemented individually, we demonstrate how to derive them automatically from a grammar, so that the grammar remains the sole specification of a language's syntax and is not duplicated. We have integrated support for typesmart constructors into the run-time system of Stratego to enforce usage of typesmart constructors implicitly whenever a regular constructor is called. We evaluate the applicability, performance, and usefulness of typesmart constructors for syntactic constraints in a compiler for MiniJava developed with Spoofax and in various language extensions of Java and Haskell implemented with SugarJ and SugarHaskell." links: doi: "http://doi.acm.org/10.1145/2577080.2577089" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/aosd/ErdwegVMV14a" researchr: "https://researchr.org/publication/ErdwegVMV14" cites: 0 citedby: 0 pages: "241-252" booktitle: "AOSD" kind: "inproceedings" key: "ErdwegVMV14" - title: "Scopes and Frames Improve Meta-Interpreter Specialization" author: - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Andrew P. Tolmach" link: "http://www.cs.pdx.edu/~apt" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2019" doi: "https://doi.org/10.4230/LIPIcs.ECOOP.2019.4" abstract: "DynSem is a domain-specific language for concise specification of the dynamic semantics of programming languages, aimed at rapid experimentation and evolution of language designs. To maintain a short definition-to-execution cycle, DynSem specifications are meta-interpreted. Meta-interpretation introduces runtime overhead that is difficult to remove by using interpreter optimization frameworks such as the Truffle/Graal Java tools; previous work has shown order-of-magnitude improvements from applying Truffle/Graal to a meta-interpreter, but this is still far slower than what can be achieved with a language-specific interpreter. In this paper, we show how specifying the meta-interpreter using scope graphs, which encapsulate static name binding and resolution information, produces much better optimization results from Truffle/Graal. Furthermore, we identify that JIT compilation is hindered by large numbers of calls between small polymorphic rules and we introduce rule cloning to derive larger monomorphic rules at run time as a countermeasure. Our contributions improve the performance of DynSem-derived interpreters to within an order of magnitude of a handwritten language-specific interpreter." links: doi: "https://doi.org/10.4230/LIPIcs.ECOOP.2019.4" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/ecoop/VerguTV19" researchr: "https://researchr.org/publication/VerguTV19" cites: 0 citedby: 0 booktitle: "ECOOP" kind: "inproceedings" key: "VerguTV19" - title: "A Language Designer's Workbench: A One-Stop-Shop for Implementation and Verification of Language Designs" author: - name: "Eelco Visser" link: "http://eelcovisser.org" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" - name: "Andrew P. Tolmach" link: "http://www.cs.pdx.edu/~apt" - name: "Pierre Néron" link: "https://researchr.org/profile/pierrejeanmichelneron/publications" - name: "Vlad A. Vergu" link: "http://www.linkedin.com/in/vladv" - name: "Augusto Passalaqua" link: "http://www.linkedin.com/pub/augusto-passalaqua/9/829/b29" - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" year: "2014" doi: "http://doi.acm.org/10.1145/2661136.2661149" abstract: "The realization of a language design requires multiple artifacts that redundantly encode the same information. This entails significant effort for language implementors, and often results in late detection of errors in language definitions. In this paper we present a proof-of-concept language designer's workbench that supports generation of IDEs, interpreters, and verification infrastructure from a single source. This constitutes a first milestone on the way to a system that fully automates language implementation and verification. " links: doi: "http://doi.acm.org/10.1145/2661136.2661149" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/oopsla/VisserWTNVPK14" "pdf": "http://dl.acm.org/ft_gateway.cfm?id=2661149&ftid=1505232&dwn=1&CFID=550125770&CFTOKEN=54358949" researchr: "https://researchr.org/publication/VisserOnward14" cites: 0 citedby: 0 pages: "95-111" booktitle: "OOPSLA" kind: "inproceedings" key: "VisserOnward14"