publications: - title: "WebLab project" author: - name: "Tuin, Marieke van der" link: "https://researchr.org/alias/tuin%2C-marieke-van-der" - name: "A. Bastiaan Reijm" link: "https://researchr.org/alias/a.-bastiaan-reijm" - name: "Jong, Tim K. de" link: "https://researchr.org/alias/jong%2C-tim-k.-de" - name: "Jeff Smits" link: "https://www.jeffsmits.net/" year: "2013" month: "7" abstract: "WebLab is an online academic tool used to improve education by providing a framework for teachers to supply a higher quantity and quality of assignments to students. Currently this system is being used in a variety of courses including the Concepts of Programming Languages course taught to bachelor students at the Delft University of Technology. As a tool is used more and more functionality must be added in order to meet the ever increasing demands. The goal of this project is just that, expand on the current system to provide support for a new set of features. Specifically two new courses want to start using WebLab. MySQL support is added to support the database part of the Web & Database Technology course so students can execute queries and test their code against the correct queries without seeing those queries. Java support is added to provide extra practice material for the Object-oriented Programming in Java course; students who are new to programming have a chance to practice with the material at their own pace without having to install a myriad of software packages. Aside from these main features other features including group support and random assignment collections are also included in this project. Finally, as with any other software engineering project we include our requirements analysis, system analysis, project process, and take an in depth look at the testing of such a diverse and complex system." links: "url": "http://resolver.tudelft.nl/uuid:bb2d7a13-1bef-4545-bca0-f2b084a04240" researchr: "https://researchr.org/publication/TuinRJS13" cites: 0 citedby: 0 school: "Delft University of Technology" type: "Bachelor's thesis" advisor: - name: "Eelco Visser" link: "http://eelcovisser.org" kind: "mastersthesis" key: "TuinRJS13" - title: "Constructing Hybrid Incremental Compilers for Cross-Module Extensibility with an Internal Build System" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2020" doi: "https://doi.org/10.22152/programming-journal.org/2020/4/16" abstract: "Context: Compilation time is an important factor in the adaptability of a software project. Fast recompilation enables cheap experimentation with changes to a project, as those changes can be tested quickly. Separate and incremental compilation has been a topic of interest for a long time to facilitate fast recompilation. Inquiry: Despite the benefits of an incremental compiler, such compilers are usually not the default. This is because incrementalization requires cross-cutting, complicated, and error-prone techniques such as dependency tracking, caching, cache invalidation, and change detection. Especially in compilers for languages with cross-module definitions and integration, correctly and efficiently implementing an incremental compiler can be a challenge. Retrofitting incrementality into a compiler is even harder. We address this problem by developing a compiler design approach that reuses parts of an existing non-incremental compiler to lower the cost of building an incremental compiler. It also gives an intuition into compiling difficult-to-incrementalize language features through staging. Approach: We use the compiler design approach presented in this paper to develop an incremental com- piler for the Stratego term-rewriting language. This language has a set of features that at first glance look incompatible with incremental compilation. Therefore, we treat Stratego as our critical case to demonstrate the approach on. We show how this approach decomposes the original compiler and has a solution to com- pile Stratego incrementally. The key idea on which we build our incremental compiler is to internally use an incremental build system to wire together the components we extract from the original compiler. Knowledge: The resulting compiler is already in use as a replacement of the original whole-program compiler. We find that the incremental build system inside the compiler is a crucial component of our approach. This allows a compiler writer to think in multiple steps of compilation, and combine that into a incremental compiler almost effortlessly. Normally, separate compilation à la C is facilitated by an external build system, where the programmer is responsible for managing dependencies between files. We reuse an existing sound and optimal incremental build system, and integrate its dependency tracking into the compiler. Grounding: The incremental compiler for Stratego is available as an artefact along with this article. We evaluate it on a large Stratego project to test its performance. The benchmark replays edits to the Stratego project from version control. These benchmarks are part of the artefact, packaged as a virtual machine image for easy reproducibility. Importance: Although we demonstrate our design approach on the Stratego programming language, we also describe it generally throughout this paper. Many currently used programming languages have a compiler that is much slower than necessary. Our design provides an approach to change this, by reusing an existing compiler and making it incremental within a reasonable amount of time." links: doi: "https://doi.org/10.22152/programming-journal.org/2020/4/16" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/programming/SmitsKV20" researchr: "https://researchr.org/publication/SmitsKV20" cites: 0 citedby: 0 journal: "Programming Journal" volume: "4" number: "3" pages: "16" kind: "article" key: "SmitsKV20" - title: "Gradually typing strategies" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2020" doi: "https://doi.org/10.1145/3426425.3426928" abstract: "The Stratego language supports program transformation by means of term rewriting with programmable rewriting strategies. Stratego's traversal primitives support concise definition of generic tree traversals. Stratego is a dynamically typed language because its features cannot be captured fully by a static type system. While dynamic typing makes for a flexible programming model, it also leads to unintended type errors, code that is harder to maintain, and missed opportunities for optimization. In this paper, we introduce a gradual type system for Stratego that combines the flexibility of dynamically typed generic programming, where needed, with the safety of statically declared and enforced types, where possible. To make sure that statically typed code cannot go wrong, all access to statically typed code from dynamically typed code is protected by dynamic type checks (casts). The type system is backwards compatible such that types can be introduced incrementally to existing Stratego programs. We formally define a type system for Core Gradual Stratego, discuss its implementation in a new type checker for Stratego, and present an evaluation of its impact on Stratego programs." links: doi: "https://doi.org/10.1145/3426425.3426928" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/SmitsV20" researchr: "https://researchr.org/publication/SmitsV20" cites: 0 citedby: 0 pages: "1-15" booktitle: "Proceedings of the 13th ACM SIGPLAN International Conference on Software Language Engineering, SLE 2020, Virtual Event, USA, November 16-17, 2020" editor: - name: "Ralf Lämmel" link: "https://researchr.org/alias/ralf-l%C3%A4mmel" - name: "Laurence Tratt" link: "https://researchr.org/alias/laurence-tratt" - name: "Juan de Lara" link: "https://researchr.org/alias/juan-de-lara" publisher: "ACM" isbn: "978-1-4503-8176-5" kind: "inproceedings" key: "SmitsV20" - title: "HactarV2: An Agent Team Strategy Based on Implicit Coordination" author: - name: "Marc Dekker" link: "https://researchr.org/alias/marc-dekker" - name: "Pieter Hameete" link: "https://researchr.org/alias/pieter-hameete" - name: "Michiel Hegemans" link: "https://researchr.org/alias/michiel-hegemans" - name: "Sebastiaan Leysen" link: "https://researchr.org/alias/sebastiaan-leysen" - name: "Joris van den Oever" link: "https://researchr.org/alias/joris-van-den-oever" - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Koen V. Hindriks" link: "http://mmi.tudelft.nl/~koen/" year: "2011" doi: "http://dx.doi.org/10.1007/978-3-642-31915-0_10" links: doi: "http://dx.doi.org/10.1007/978-3-642-31915-0_10" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/promas/DekkerHHLOSH11" researchr: "https://researchr.org/publication/DekkerHHLOSH11" cites: 0 citedby: 0 pages: "173-184" booktitle: "Programming Multi-Agent Systems - 9th International Workshop, ProMAS 2011, Taipei, Taiwan, May 3, 2011, Revised Selected Papers" editor: - name: "Louise A. Dennis" link: "https://researchr.org/alias/louise-a.-dennis" - name: "Olivier Boissier" link: "https://researchr.org/alias/olivier-boissier" - name: "Rafael H. Bordini" link: "https://researchr.org/alias/rafael-h.-bordini" volume: "7217" series: "Lecture Notes in Computer Science" publisher: "Springer" isbn: "978-3-642-31914-3" kind: "inproceedings" key: "DekkerHHLOSH11" - title: "FlowSpec: A Declarative Specification Language for Intra-Procedural Flow-Sensitive Data-Flow Analysis" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2020" doi: "https://doi.org/10.1016/j.cola.2019.100924" abstract: "Data-flow analysis is the static analysis of programs to estimate their approximate run-time behavior or approximate intermediate run-time values. It is an integral part of modern language specifications and compilers. In the specification of static semantics of programming languages, the concept of data-flow allows the description of well-formedness such as definite assignment of a local variable before its first use. In the implementation of compiler back-ends, data-flow analyses inform optimizations. Data-flow analysis has an established theoretical foundation. What lags behind is implementations of data-flow analysis in compilers, which are usually ad-hoc. This makes such implementations difficult to extend and maintain. In previous work researchers have proposed higher-level formalisms suitable for whole-program analysis in a separate tool, incremental analysis within editors, or bound to a specific intermediate representation. In this paper, we present FlowSpec, an executable formalism for specification of data-flow analysis. FlowSpec is a domain-specific language that enables direct and concise specification of data-flow analysis for programming languages, designed to express flow-sensitive, intra-procedural analyses. We define the formal semantics of FlowSpec in terms of monotone frameworks. We describe the design of FlowSpec using examples of standard analyses. We also include a description of our implementation of FlowSpec. In a case study we evaluate FlowSpec with the static analyses for Green-Marl, a domain-specific programming language for graph analytics." links: doi: "https://doi.org/10.1016/j.cola.2019.100924" dblp: "http://dblp.uni-trier.de/rec/bibtex/journals/vlc/SmitsWV20" researchr: "https://researchr.org/publication/SmitsWV20" cites: 0 citedby: 0 journal: "Journal of Computer Languages" volume: "57" pages: "100924" kind: "article" key: "SmitsWV20" - title: "From Whole Program Compilation to Incremental Compilation: A Critical Case" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Gabriël Konat" link: "http://nl.linkedin.com/in/gabrielkonat" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2019" month: "10" abstract: "We introduce a design approach for incremental compilers that we believe may be applicable to other languages. We demonstrate it on the critical case of Stratego, a term rewriting language with open extensibility features. After a brief overview of the open extensibility features, we show our compilation method, which is somewhere in between separate and incremental compilation. Our approach allows us to reuse almost all of the existing compiler while gaining great improvements in recompilation speed. We evaluate the new compiler with a benchmark on the version control history of a large Stratego project." researchr: "https://researchr.org/publication/SmitsKV19" cites: 0 citedby: 0 booktitle: "Second Workshop on Incremental Computing (IC 2019)" kind: "inproceedings" key: "SmitsKV19" - title: "Gradually Typing Strategies - Artifact" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2020" month: "September" doi: "10.5281/zenodo.4032445" abstract: "This is the artifact for the paper Gradually Typing Strategies, accepted at International Conference on Software Language Engineering." links: successor: "https://researchr.org/publication/SmitsV20" "url": "https://doi.org/10.5281/zenodo.4032445" researchr: "https://researchr.org/publication/SmitsV20-Artifact" cites: 0 citedby: 0 howpublished: "Zenodo" kind: "misc" key: "SmitsV20-Artifact" - title: "Optimising First-Class Pattern Matching" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Toine Hartman" link: "https://www.linkedin.com/in/toinehartman/" - name: "Jesper Cockx" link: "https://jesper.sikanda.be" year: "2022" doi: "https://doi.org/10.1145/3567512.3567519" links: doi: "https://doi.org/10.1145/3567512.3567519" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/SmitsHC22" researchr: "https://researchr.org/publication/SmitsHC22" cites: 0 citedby: 0 pages: "74-83" booktitle: "Proceedings of the 15th ACM SIGPLAN International Conference on Software Language Engineering, SLE 2022, Auckland, New Zealand, December 6-7, 2022" editor: - name: "Bernd Fischer" link: "http://www.ecs.soton.ac.uk/people/bf" - name: "Lola Burgueño" link: "https://researchr.org/alias/lola-burgue%C3%B1o" - name: "Walter Cazzola" link: "https://researchr.org/alias/walter-cazzola" publisher: "ACM" isbn: "978-1-4503-9919-7" kind: "inproceedings" key: "SmitsHC22" - title: "FlowSpec: declarative dataflow analysis specification" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2017" doi: "http://doi.acm.org/10.1145/3136014.3136029" abstract: "We present FlowSpec, a declarative specification language for the domain of dataflow analysis. FlowSpec has declarative support for the specification of control flow graphs of programming languages, and dataflow analyses on these control flow graphs. We define the formal semantics of FlowSpec, which is rooted in Monotone Frameworks. We also discuss a prototype implementation of the language, built in the Spoofax Language Workbench. Finally, we evaluate the expressiveness and conciseness of the language with two case studies. These case studies are analyses for Green-Marl, an industrial, domain-specific language for graph processing. The first case study is a classical dataflow analysis, scaled to this full language. The second case study is a domain-specific analysis of Green-Marl. " links: doi: "http://doi.acm.org/10.1145/3136014.3136029" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/sle/SmitsV17" successor: "https://researchr.org/publication/SmitsWV20" researchr: "https://researchr.org/publication/SmitsV17" cites: 0 citedby: 0 pages: "221-231" booktitle: "Proceedings of the 10th ACM SIGPLAN International Conference on Software Language Engineering, SLE 2017, Vancouver, BC, Canada, October 23-24, 2017" editor: - name: "Benoît Combemale" link: "https://researchr.org/alias/beno%C3%AEt-combemale" - name: "Marjan Mernik" link: "https://researchr.org/alias/marjan-mernik" - name: "Bernhard Rumpe" link: "http://www.se-rwth.de/~rumpe/" publisher: "ACM" isbn: "978-1-4503-5525-4" kind: "inproceedings" key: "SmitsV17" - title: "The Static Semantics of the Green-Marl Graph Analysis Language: Formal Specification, Declarative Implementation and Integration with a Compiler Back-end" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" year: "2016" month: "2" abstract: "Green-Marl is a domain specific language for efficient graph analysis. In this thesis, we define the formal static semantics of the language and provide an implementation in the Spoofax language workbench. The type system of Green-Marl includes limited forms of name-dependent types, overloading, parametric polymorphism, and inference. We give a formal specification that covers all aspects of this type system. We also describe our implementation of the type system in the Spoofax language workbench, where we focus on the capabilities of Spoofax's meta-languages to describe the type system. Green-Marl provides several parallel language constructs, as well as constructs to mitigate data races that can occur in parallel regions. We give a formal description of a symbolic, tree-based dependence analysis that can check the invariants of the mitigation strategies and find potential data races. We employ a rewrite system for the implementation of this analysis in the Spoofax language workbench. Finally, we discuss the integration of these analyses with successive program transformation steps. Each transformation step is informed by the static analysis. However, transformation steps invalidate parts of the analysis results, which inhibits the successive steps. A naive approach to re-analyse the program after every transformation step does not scale. Therefore, we incrementally update analysis results after each transformation step." links: "url": "http://resolver.tudelft.nl/uuid:4f07cbbb-d017-41e8-aba6-8ff0c19f258d" researchr: "https://researchr.org/publication/Smits2016" cites: 0 citedby: 0 school: "Delft University of Technology" type: "Master's thesis" advisor: - name: "Guido Wachsmuth" link: "https://www.linkedin.com/in/guidowachsmuth/" kind: "mastersthesis" key: "Smits2016" - title: "Towards Incremental Compilation for Stratego" author: - name: "Jeff Smits" link: "https://www.jeffsmits.net/" - name: "Eelco Visser" link: "http://eelcovisser.org" year: "2018" month: "10" abstract: "Stratego is a transformation language based on term rewriting with programmable rewriting strategies. A program in Stratego consists of named rewrite rules and strategies. When definitions have the same name, they contribute to the same rule. This works across files, thereby allowing extensibility. Due to this distribution of rules over modules, the Stratego compiler has always been a whole program compiler. Large Stratego programs are slow to compile as a result. In this work we present our approach to incremental compilation of Stratego. The approach may be useful for incremental compilation of other languages with similar cross-file features." researchr: "https://researchr.org/publication/SmitsV18" cites: 3 citedby: 0 howpublished: "Poster at SPLASH" kind: "misc" key: "SmitsV18"