268 results on '"Eelco Visser"'
Search Results
102. Adding Concrete Syntax to a Prolog-Based Program Synthesis System (Extended Abstract).
- Author
-
Bernd Fischer 0002 and Eelco Visser
- Published
- 2003
- Full Text
- View/download PDF
103. Separation of concerns in language definition.
- Author
-
Eelco Visser
- Published
- 2014
- Full Text
- View/download PDF
104. Strategies for Source-to-Source Constant Progagation.
- Author
-
Karina Olmos and Eelco Visser
- Published
- 2002
- Full Text
- View/download PDF
105. Building Interpreters with Rewriting Strategies.
- Author
-
Eelco Dolstra and Eelco Visser
- Published
- 2002
- Full Text
- View/download PDF
106. Scoped Dynamic Rewrite Rules.
- Author
-
Eelco Visser
- Published
- 2001
- Full Text
- View/download PDF
107. Fusing Logic and Control with Local Transformations: An Example Optimization.
- Author
-
Patricia Johann and Eelco Visser
- Published
- 2001
- Full Text
- View/download PDF
108. A Survey of Strategies in Program Transformation Systems.
- Author
-
Eelco Visser
- Published
- 2001
- Full Text
- View/download PDF
109. XT: a bundle of program transformation tools.
- Author
-
Merijn de Jonge, Eelco Visser, and Joost Visser 0001
- Published
- 2001
- Full Text
- View/download PDF
110. Safe-by-Design in Engineering: An Overview and Comparative Analysis of Engineering Disciplines
- Author
-
Ruud Balkenende, Ruud van Ommen, Behnam Taebi, Bart Walhout, Ibo van de Poel, Pieter van Gelder, Tiny van der Werff, Dick Jung, Frank Hollmann, Wolter Pieters, Robbert Krebbers, Eelco Visser, Jos de Lange, Karel Terwel, Zoë Robaey, Erik-Jan van Kampen, Nima Khakzad, Lotte Asveld, Pim Klaassen, Athena Institute, and Network Institute
- Subjects
Engineering ,Technology ,Health, Toxicology and Mutagenesis ,Risk-based design ,Social Sciences ,responsible research and innovation ,02 engineering and technology ,010501 environmental sciences ,01 natural sciences ,Article ,Filosofie ,Responsible research and innovation ,Humanities ,Safe-by-design ,Design for values ,uncertainty ,Secure-by-design ,Risk management ,0105 earth and related environmental sciences ,Work, Health and Performance ,safe-by-design ,secure-by-design ,risk-based design ,design for values ,Responsible Research and Innovation ,business.industry ,Corporate governance ,Public Health, Environmental and Occupational Health ,Equity (finance) ,Uncertainty ,021001 nanoscience & nanotechnology ,Secure by design ,SDG 11 - Sustainable Cities and Communities ,Philosophy ,Attitude ,Sustainability ,Medicine ,Engineering ethics ,0210 nano-technology ,business ,Discipline ,Municipal or urban engineering - Abstract
Contains fulltext : 237091.pdf (Publisher’s version ) (Open Access) In this paper, we provide an overview of how Safe-by-Design is conceived and applied in practice in a large number of engineering disciplines. We discuss the differences, commonalities, and possibilities for mutual learning found in those practices and identify several ways of putting those disciplinary outlooks in perspective. The considered engineering disciplines in the order of historically grown technologies are construction engineering, chemical engineering, aerospace engineering, urban engineering, software engineering, bio-engineering, nano-engineering, and finally cyber space engineering. Each discipline is briefly introduced, the technology at issue is described, the relevant or dominant hazards are examined, the social challenge(s) are observed, and the relevant developments in the field are described. Within each discipline the risk management strategies, the design principles promoting safety or safety awareness, and associated methods or tools are discussed. Possible dilemmas that the designers in the discipline face are highlighted. Each discipline is concluded by discussing the opportunities and bottlenecks in addressing safety. Commonalities and differences between the engineering disciplines are investigated, specifically on the design strategies for which empirical data have been collected. We argue that Safe-by-Design is best considered as a specific elaboration of Responsible Research and Innovation, with an explicit focus on safety in relation to other important values in engineering such as well-being, sustainability, equity, and affordability. Safe-by-Design provides for an intellectual venue where social science and the humanities (SSH) collaborate on technological developments and innovation by helping to proactively incorporate safety considerations into engineering practices, while navigating between the extremes of technological optimism and disproportionate precaution. As such, Safe-by-Design is also a practical tool for policymakers and risk assessors that helps shape governance arrangements for accommodating and incentivizing safety, while fully acknowledging uncertainty. 28 p.
- Published
- 2021
111. A core language for rewriting.
- Author
-
Eelco Visser and Zine-El-Abidine Benaissa
- Published
- 1998
- Full Text
- View/download PDF
112. The spoofax name binding language.
- Author
-
Gabriël D. P. Konat, Vlad A. Vergu, Lennart C. L. Kats, Guido Wachsmuth, and Eelco Visser
- Published
- 2012
- Full Text
- View/download PDF
113. Safe-by-design in engineering
- Author
-
Pieter van Gelder, Pim Klaassen, Behnam Taebi, Bart Walhout, Ruud van Ommen, Ibo van de Poel, Zoe Robaey, Lotte Asveld, Ruud Balkenende, Frank Hollmann, Erik Jan van Kampen, Nima Khakzad, Robbert Krebbers, Jos de Lange, Wolter Pieters, Karel Terwel, Eelco Visser , Tiny van der Werff, Dick Jung
- Published
- 2021
- Full Text
- View/download PDF
114. Scope States: Guarding Safety of Name Resolution in Parallel Type Checkers
- Author
-
Hendrik van Antwerpen and Eelco Visser, van Antwerpen, Hendrik, Visser, Eelco, Hendrik van Antwerpen and Eelco Visser, van Antwerpen, Hendrik, and Visser, Eelco
- Abstract
Compilers that can type check compilation units in parallel can make more efficient use of multi-core architectures, which are nowadays widespread. Developing parallel type checker implementations is complicated by the need to handle concurrency and synchronization of parallel compilation units. Dependencies between compilation units are induced by name resolution, and a parallel type checker needs to ensure that units have defined all relevant names before other units do a lookup. Mutually recursive references and implicitly discovered dependencies between compilation units preclude determining a static compilation order for many programming languages. In this paper, we present a new framework for implementing hierarchical type checkers that provides implicit parallel execution in the presence of dynamic and mutual dependencies between compilation units. The resulting type checkers can be written without explicit handling of communication or synchronization between different compilation units. We achieve this by providing type checkers with an API for name resolution based on scope graphs, a language-independent formalism that supports a wide range of binding patterns. We introduce the notion of scope state to ensure safe name resolution. Scope state tracks the completeness of a scope, and is used to decide whether a scope graph query between compilation units must be delayed. Our framework is implemented in Java using the actor paradigm. We evaluated our approach by parallelizing the solver for Statix, a meta-language for type checkers based on scope graphs, using our framework. This parallelizes every Statix-based type checker, provided its specification follows a split declaration-type style. Benchmarks show that the approach results in speedups for the parallel Statix solver of up to 5.0x on 8 cores for real-world code bases.
- Published
- 2021
- Full Text
- View/download PDF
115. Scope States (Artifact)
- Author
-
Hendrik van Antwerpen and Eelco Visser, van Antwerpen, Hendrik, Visser, Eelco, Hendrik van Antwerpen and Eelco Visser, van Antwerpen, Hendrik, and Visser, Eelco
- Abstract
Compilers that can type check compilation units in parallel can make more efficient use of multi-core architectures, which are nowadays widespread. Developing parallel type checker implementations is complicated by the need to handle concurrency and synchronization of parallel compilation units. This artifact contains benchmarks and sources for a new framework for implementing hierarchical type checkers that provides implicit parallel execution in the presence of dynamic and mutual dependencies between compilation units. The resulting type checkers can be written without explicit handling of communication or synchronization between different compilation units. We achieve this by providing type checkers with an API for name resolution based on scope graphs, a language-independent formalism that supports a wide range of binding patterns. Our framework is implemented in Java using the actor paradigm. We evaluated our approach by parallelizing the solver for Statix, a meta-language for type checkers based on scope graphs, using our framework. Benchmarks show that the approach results in speedups for the parallel Statix solver of up to 5.0x on 8 cores for real-world code bases.
- Published
- 2021
- Full Text
- View/download PDF
116. Library-based model-driven software development with SugarJ.
- Author
-
Sebastian Erdweg, Lennart C. L. Kats, Tillmann Rendel, Christian Kästner, Klaus Ostermann, and Eelco Visser
- Published
- 2011
- Full Text
- View/download PDF
117. SugarJ: library-based language extensibility.
- Author
-
Sebastian Erdweg, Lennart C. L. Kats, Tillmann Rendel, Christian Kästner, Klaus Ostermann, and Eelco Visser
- Published
- 2011
- Full Text
- View/download PDF
118. Mobl: the new language of the mobile web.
- Author
-
Zef Hemel and Eelco Visser
- Published
- 2011
- Full Text
- View/download PDF
119. Testing domain-specific languages.
- Author
-
Lennart C. L. Kats, Rob Vermaas, and Eelco Visser
- Published
- 2011
- Full Text
- View/download PDF
120. The Spoofax language workbench.
- Author
-
Lennart C. L. Kats and Eelco Visser
- Published
- 2010
- Full Text
- View/download PDF
121. Weaving web applications with WebDSL: (demonstration).
- Author
-
Danny M. Groenewegen and Eelco Visser
- Published
- 2009
- Full Text
- View/download PDF
122. WebDSL: a domain-specific language for dynamic web applications.
- Author
-
Danny M. Groenewegen, Zef Hemel, Lennart C. L. Kats, and Eelco Visser
- Published
- 2008
- Full Text
- View/download PDF
123. Gradually typing strategies
- Author
-
Eelco Visser and Jeff Smits
- Subjects
Flexibility (engineering) ,050101 languages & linguistics ,Generic programming ,type preserving ,Programming language ,Computer science ,05 social sciences ,Program transformation ,02 engineering and technology ,computer.software_genre ,Backward compatibility ,Tree traversal ,0202 electrical engineering, electronic engineering, information engineering ,Programming paradigm ,Code (cryptography) ,020201 artificial intelligence & image processing ,0501 psychology and cognitive sciences ,Rewriting ,gradual types ,strategy ,computer ,generic programming - 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.
- Published
- 2020
124. Knowing when to ask: sound scheduling of name resolution in type checkers derived from declarative specifications
- Author
-
Arjen Rouvoet, Hendrik van Antwerpen, Casper Bach Poulsen, Eelco Visser, and Robbert Krebbers
- Subjects
Type Systems ,Correctness ,Semantics (computer science) ,Computer science ,Programming language ,Name binding ,Statix ,Name resolution (programming languages) ,Specification language ,Type Checker ,computer.software_genre ,Operational semantics ,Static Semantics ,Name Binding ,Software Science ,Safety, Risk, Reliability and Quality ,computer ,Software ,Scope (computer science) ,Declarative programming - Abstract
There is a large gap between the specification of type systems and the implementation of their type checkers, which impedes reasoning about the soundness of the type checker with respect to the specification. A vision to close this gap is to automatically obtain type checkers from declarative programming language specifications. This moves the burden of proving correctness from a case-by-case basis for concrete languages to a single correctness proof for the specification language. This vision is obstructed by an aspect common to all programming languages: name resolution. Naming and scoping are pervasive and complex aspects of the static semantics of programming languages. Implementations of type checkers for languages with name binding features such as modules, imports, classes, and inheritance interleave collection of binding information (i.e., declarations, scoping structure, and imports) and querying that information. This requires scheduling those two aspects in such a way that query answers are stable—i.e., they are computed only after all relevant binding structure has been collected. Type checkers for concrete languages accomplish stability using language-specific knowledge about the type system. In this paper we give a language-independent characterization of necessary and sufficient conditions to guarantee stability of name and type queries during type checking in terms of critical edges in an incomplete scope graph . We use critical edges to give a formal small-step operational semantics to a declarative specification language for type systems, that achieves soundness by delaying queries that may depend on missing information. This yields type checkers for the specified languages that are sound by construction—i.e., they schedule queries so that the answers are stable, and only accept programs that are name- and type-correct according to the declarative language specification. We implement this approach, and evaluate it against specifications of a small module and record language, as well as subsets of Java and Scala.
- Published
- 2020
125. Intrinsically-Typed Definitional Interpreters for Linear, Session-Typed Languages
- Author
-
Eelco Visser, Casper Bach Poulsen, Arjen Rouvoet, and Robbert Krebbers
- Subjects
Computer science ,Semantics (computer science) ,Agda ,Concurrency ,Definitional interpreters ,Session types ,02 engineering and technology ,Separation logic ,computer.software_genre ,Mechanized semantics ,Type safety ,0202 electrical engineering, electronic engineering, information engineering ,Linear types ,computer.programming_language ,Programming language ,020207 software engineering ,computer.file_format ,Object (computer science) ,Dependent types ,Computer Science::Programming Languages ,020201 artificial intelligence & image processing ,Executable ,computer ,Interpreter - Abstract
An intrinsically-typed definitional interpreter is a concise specification of dynamic semantics, that is executable and type safe by construction. Unfortunately, scaling intrinsically-typed definitional interpreters to more complicated object languages often results in definitions that are cluttered with manual proof work. For linearly-typed languages (including session-typed languages) one has to prove that the interpreter, as well as all the operations on semantic components, treat values linearly. We present new methods and tools that make it possible to implement intrinsically-typed definitional interpreters for linearly-typed languages in a way that hides the majority of the manual proof work. Inspired by separation logic, we develop reusable and composable abstractions for programming with linear operations using dependent types. Using these abstractions, we define interpreters for linear lambda calculi with strong references, concurrency, and session-typed communication in Agda.
- Published
- 2020
126. A language generic solution for name binding preservation in refactorings.
- Author
-
Maartje de Jonge and Eelco Visser
- Published
- 2012
- Full Text
- View/download PDF
127. Declarative specification of template-based textual editors.
- Author
-
Tobi Vollebregt, Lennart C. L. Kats, and Eelco Visser
- Published
- 2012
- Full Text
- View/download PDF
128. The Asf+Sdf Meta-Environment Documentation Tools for Free!
- Author
-
Mark van den Brand and Eelco Visser
- Published
- 1995
- Full Text
- View/download PDF
129. Design of the CodeBoost Transformation System for Domain-Specific Optimisation of C++ Programs.
- Author
-
Otto Skrove Bagge, Karl Trygve Kalleberg, Magne Haveraaen, and Eelco Visser
- Published
- 2003
- Full Text
- View/download PDF
130. Towards Language-Parametric Semantic Editor Services Based on Declarative Type System Specifications (Brave New Idea Paper)
- Author
-
Daniel A. A. Pelsmaeker and Hendrik van Antwerpen and Eelco Visser, Pelsmaeker, Daniel A. A., van Antwerpen, Hendrik, Visser, Eelco, Daniel A. A. Pelsmaeker and Hendrik van Antwerpen and Eelco Visser, Pelsmaeker, Daniel A. A., van Antwerpen, Hendrik, and Visser, Eelco
- Abstract
Editor services assist programmers to more effectively write and comprehend code. Implementing editor services correctly is not trivial. This paper focuses on the specification of semantic editor services, those that use the semantic model of a program. The specification of refactorings is a common subject of study, but many other semantic editor services have received little attention. We propose a language-parametric approach to the definition of semantic editor services, using a declarative specification of the static semantics of the programming language, and constraint solving. Editor services are specified as constraint problems, and language specifications are used to ensure correctness. We describe our approach for the following semantic editor services: reference resolution, find usages, goto subclasses, code completion, and the extract definition refactoring. We do this in the context of Statix, a constraint language for the specification of type systems. We investigate the specification of editor services in terms of Statix constraints, and the requirements these impose on a suitable solver.
- Published
- 2019
- Full Text
- View/download PDF
131. Scopes and Frames Improve Meta-Interpreter Specialization
- Author
-
Vlad Vergu and Andrew Tolmach and Eelco Visser, Vergu, Vlad, Tolmach, Andrew, Visser, Eelco, Vlad Vergu and Andrew Tolmach and Eelco Visser, Vergu, Vlad, Tolmach, Andrew, and Visser, Eelco
- 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.
- Published
- 2019
- Full Text
- View/download PDF
132. Towards Zero-Overhead Disambiguation of Deep Priority Conflicts
- Author
-
LuÃs Eduardo de Souza Amorim, Michael J. Steindorfer, and Eelco Visser
- Subjects
FOS: Computer and information sciences ,Computer science ,media_common.quotation_subject ,Context (language use) ,parsing ,02 engineering and technology ,computer.software_genre ,Modularity ,Order of operations ,Rule-based machine translation ,0202 electrical engineering, electronic engineering, information engineering ,media_common ,Computer Science - Programming Languages ,Parsing ,Grammar ,Syntax (programming languages) ,declarative disambiguation ,Programming language ,operator precedence ,020207 software engineering ,data-dependent grammars ,16. Peace & justice ,TheoryofComputation_MATHEMATICALLOGICANDFORMALLANGUAGES ,020201 artificial intelligence & image processing ,Rewriting ,computer ,performance ,Programming Languages (cs.PL) - Abstract
**Context** Context-free grammars are widely used for language prototyping and implementation. They allow formalizing the syntax of domain-specific or general-purpose programming languages concisely and declaratively. However, the natural and concise way of writing a context-free grammar is often ambiguous. Therefore, grammar formalisms support extensions in the form of *declarative disambiguation rules* to specify operator precedence and associativity, solving ambiguities that are caused by the subset of the grammar that corresponds to expressions. **Inquiry** Implementing support for declarative disambiguation within a parser typically comes with one or more of the following limitations in practice: a lack of parsing performance, or a lack of modularity (i.e., disallowing the composition of grammar fragments of potentially different languages). The latter subject is generally addressed by scannerless generalized parsers. We aim to equip scannerless generalized parsers with novel disambiguation methods that are inherently performant, without compromising the concerns of modularity and language composition. **Approach** In this paper, we present a novel low-overhead implementation technique for disambiguating deep associativity and priority conflicts in scannerless generalized parsers with lightweight data-dependency. **Knowledge** Ambiguities with respect to operator precedence and associativity arise from combining the various operators of a language. While *shallow conflicts* can be resolved efficiently by one-level tree patterns, *deep conflicts* require more elaborate techniques, because they can occur arbitrarily nested in a tree. Current state-of-the-art approaches to solving deep priority conflicts come with a severe performance overhead. **Grounding** We evaluated our new approach against state-of-the-art declarative disambiguation mechanisms. By parsing a corpus of popular open-source repositories written in Java and OCaml, we found that our approach yields speedups of up to 1.73x over a grammar rewriting technique when parsing programs with deep priority conflicts--with a modest overhead of 1-2 % when parsing programs without deep conflicts. **Importance** A recent empirical study shows that deep priority conflicts are indeed wide-spread in real-world programs. The study shows that in a corpus of popular OCaml projects on Github, up to 17 % of the source files contain deep priority conflicts. However, there is no solution in the literature that addresses efficient disambiguation of deep priority conflicts, with support for modular and composable syntax definitions.
- Published
- 2018
133. Intrinsically-Typed Definitional Interpreters for Imperative Languages
- Author
-
Arjen Rouvoet, Casper Bach Poulsen, Eelco Visser, Andrew Tolmach, and Robbert Krebbers
- Subjects
Computer science ,Semantics (computer science) ,Agda ,0102 computer and information sciences ,02 engineering and technology ,computer.software_genre ,01 natural sciences ,mechanized semantics ,Abstract syntax ,scope graphs ,Type safety ,0202 electrical engineering, electronic engineering, information engineering ,Safety, Risk, Reliability and Quality ,computer.programming_language ,dependent types ,Programming language ,Object language ,scopes and frames ,Name binding ,020207 software engineering ,Object (computer science) ,definitional interpreters ,type safety ,010201 computation theory & mathematics ,TheoryofComputation_LOGICSANDMEANINGSOFPROGRAMS ,computer ,Software ,Interpreter ,Java - Abstract
A definitional interpreter defines the semantics of an object language in terms of the (well-known) semantics of a host language, enabling understanding and validation of the semantics through execution. Combining a definitional interpreter with a separate type system requires a separate type safety proof. An alternative approach, at least for pure object languages, is to use a dependently-typed language to encode the object language type system in the definition of the abstract syntax. Using such intrinsically-typed abstract syntax definitions allows the host language type checker to verify automatically that the interpreter satisfies type safety. Does this approach scale to larger and more realistic object languages, and in particular to languages with mutable state and objects? In this paper, we describe and demonstrate techniques and libraries in Agda that successfully scale up intrinsically-typed definitional interpreters to handle rich object languages with non-trivial binding structures and mutable state. While the resulting interpreters are certainly more complex than the simply-typed λ-calculus interpreter we start with, we claim that they still meet the goals of being concise, comprehensible, and executable, while guaranteeing type safety for more elaborate object languages. We make the following contributions: (1) A dependent-passing style technique for hiding the weakening of indexed values as they propagate through monadic code. (2) An Agda library for programming with scope graphs and frames , which provides a uniform approach to dealing with name binding in intrinsically-typed interpreters. (3) Case studies of intrinsically-typed definitional interpreters for the simply-typed λ-calculus with references (STLC+Ref) and for a large subset of Middleweight Java (MJ).
- Published
- 2018
134. Scalable Incremental Building with Dynamic Task Dependencies
- Author
-
Sebastian Erdweg, Gabriël D. P. Konat, and Eelco Visser
- Subjects
Programming language ,business.industry ,Computer science ,Maintainability ,020207 software engineering ,02 engineering and technology ,computer.software_genre ,build ,Task (project management) ,Set (abstract data type) ,Software ,Scripting language ,Scalability ,incremental ,dynamic task dependency ,0202 electrical engineering, electronic engineering, information engineering ,scalable ,020201 artificial intelligence & image processing ,Incremental build model ,business ,computer ,Language construct - Abstract
Incremental build systems are essential for fast, reproducible software builds. Incremental build systems enable short feedback cycles when they capture dependencies precisely and selectively execute build tasks efficiently. A much overlooked feature of build systems is the expressiveness of the scripting language, which directly influences the maintainability of build scripts. In this paper, we present a new incremental build algorithm that allows build engineers to use a full-fledged programming language with explicit task invocation, value and file inspection facilities, and conditional and iterative language constructs. In contrast to prior work on incrementality for such programmable builds, our algorithm scales with the number of tasks affected by a change and is independent of the size of the software project being built. Specifically, our algorithm accepts a set of changed files, transitively detects and re-executes affected build tasks, but also accounts for new task dependencies discovered during building. We have evaluated the performance of our algorithm in a real-world case study and confirm its scalability.
- Published
- 2018
135. PixieDust
- Author
-
Nick ten Veen, Daco C. Harkes, and Eelco Visser
- Subjects
business.industry ,Programming language ,Computer science ,Boilerplate code ,020207 software engineering ,02 engineering and technology ,computer.software_genre ,Rendering (computer graphics) ,020204 information systems ,0202 electrical engineering, electronic engineering, information engineering ,Reactive programming ,Web application ,User interface ,business ,computer ,Incremental computing - Abstract
Modern web applications are interactive. Reactive programming languages and libraries are the state-of-the-art approach for declara- tively specifying these interactive applications. However, programs written with these approaches contain error-prone boilerplate code for e ciency reasons. In this paper we present PixieDust, a declarative user-interface language for browser-based applications. PixieDust uses static de- pendency analysis to incrementally update a browser-DOM at run- time, without boilerplate code. We demonstrate that applications in PixieDust contain less boilerplate code than state-of-the-art ap- proaches, while achieving on-par performance.
- Published
- 2018
136. Migrating Custom DSL Implementations To a Language Workbench (Tool Demo)
- Author
-
Louis van Gool, Eelco Visser, and Jasper Denkers
- Subjects
Domain-specific language ,business.industry ,Programming language ,Computer science ,computer.internet_protocol ,020207 software engineering ,02 engineering and technology ,Modular design ,Python (programming language) ,computer.software_genre ,migration ,Backward compatibility ,Digital subscriber line ,domain-specific languages ,0202 electrical engineering, electronic engineering, information engineering ,020201 artificial intelligence & image processing ,Architecture ,Software_PROGRAMMINGLANGUAGES ,business ,Implementation ,computer ,XML ,computer.programming_language - Abstract
We present a tool architecture that supports migrating custom domain-specific language (DSL) implementations to a language workbench. We demonstrate an implementation of this architecture for models in the domains of defining component interfaces (IDL) and modeling system behavior (OIL) which are developed and used at a digital printer manufacturing company. Increasing complexity and the lack of DSL syntax and IDE support for existing implementations in Python based on XML syntax hindered their evolution and adoption. A reimplementation in Spoofax using modular language definition enables composition between IDL and OIL and introduces more concise DSL syntax and IDE support. The presented tool supports migrating to new implementations while being backward compatible with existing syntax and related tooling.
- Published
- 2018
137. Language Design with the Spoofax Language Workbench
- Author
-
Guido Wachsmuth, Gabriël D. P. Konat, and Eelco Visser
- Subjects
Domain-specific language ,Functional logic programming ,Computer science ,Comparison of multi-paradigm programming languages ,computer.software_genre ,Very high-level programming language ,Third-generation programming language ,Code generation ,Fifth-generation programming language ,Declarative programming ,Syntax (programming languages) ,Programming language ,business.industry ,Name binding ,Program transformation ,Second-generation programming language ,Syntax ,Language primitive ,High-level programming language ,Programming paradigm ,Fourth-generation programming language ,First-generation programming language ,Software engineering ,business ,Low-level programming language ,computer ,Software ,Programming language theory - Abstract
IDEs are essential for programming language developers, and state-of-the-art IDE support is mandatory for programming languages to be successful. Although IDE features for mainstream programming languages are typically implemented manually, this often isn't feasible for programming languages that must be developed with significantly fewer resources. The Spoofax language workbench is a platform for developing textual programming languages with state-of-the-art IDE support. Spoofax is a comprehensive environment that integrates syntax definition, name binding, type analysis, program transformation, code generation, and declarative specification of IDE components. It also provides high-level languages for each of these aspects. These languages are highly declarative, abstracting over the implementation of IDE features and letting engineers focus on language design.
- Published
- 2014
138. A pure embedding of attribute grammars
- Author
-
Lennart C. L. Kats, Anthony M. Sloane, and Eelco Visser
- Subjects
Functional programming ,Domain-specific language ,Theoretical computer science ,Scala ,Computer science ,Programming language ,Attribute grammar ,computer.software_genre ,Rule-based machine translation ,Dynamic Extension ,Compiler ,L-attributed grammar ,computer ,Software ,computer.programming_language - Abstract
Attribute grammars are a powerful specification paradigm for many language processing tasks, particularly semantic analysis of programming languages. Recent attribute grammar systems use dynamic scheduling algorithms to evaluate attributes on demand. In this paper, we show how to remove the need for a generator, by embedding a dynamic approach in a modern, object-oriented and functional programming language. The result is a small, lightweight attribute grammar library that is part of our larger Kiama language processing library. Kiama's attribute grammar library supports a range of advanced features including cached, uncached, higher order, parameterised and circular attributes. Forwarding is available to modularise higher order attributes and decorators abstract away from the details of attribute value propagation. Kiama also implements new techniques for dynamic extension and variation of attribute equations. We use the Scala programming language because of its support for domain-specific notations and emphasis on scalability. Unlike generators with specialised notation, Kiama attribute grammars use standard Scala notations such as pattern-matching functions for equations, traits and mixins for composition and implicit parameters for forwarding. A benchmarking exercise shows that our approach is practical for realistic language processing.
- Published
- 2013
139. IceDust 2: Derived Bidirectional Relations and Calculation Strategy Composition (Artifact)
- Author
-
Daco C. Harkes and Eelco Visser, Harkes, Daco C., Visser, Eelco, Daco C. Harkes and Eelco Visser, Harkes, Daco C., and Visser, Eelco
- Abstract
This artifact is based on IceDust2, a data modeling language with derived values. The provided package is designed to support the claims of the companion paper: in particular, it allows users to compile and run IceDust2 specifications. Instructions for building the IceDust2 compiler from source in Spoofax are also provided.
- Published
- 2017
- Full Text
- View/download PDF
140. IceDust 2: Derived Bidirectional Relations and Calculation Strategy Composition
- Author
-
Daco C. Harkes and Eelco Visser, Harkes, Daco C., Visser, Eelco, Daco C. Harkes and Eelco Visser, Harkes, Daco C., and Visser, Eelco
- Abstract
Derived values are values calculated from base values. They can be expressed with views in relational databases, or with expressions in incremental or reactive programming. However, relational views do not provide multiplicity bounds, and incremental and reactive programming require significant boilerplate code in order to encode bidirectional derived values. Moreover, the composition of various strategies for calculating derived values is either disallowed, or not checked for producing derived values which will be consistent with the derived values they depend upon. In this paper we present IceDust2, an extension of the declarative data modeling language IceDust with derived bidirectional relations with multiplicity bounds and support for statically checked composition of calculation strategies. Derived bidirectional relations, multiplicity bounds, and calculation strategies all influence runtime behavior of changes to data, leading to hundreds of possible behavior definitions. IceDust2 uses a product-line based code generator to avoid explicitly defining all possible combinations, making it easier to reason about correctness. The type system allows only sound composition of strategies and guarantees multiplicity bounds. Finally, our case studies validate the usability of IceDust2 in applications.
- Published
- 2017
- Full Text
- View/download PDF
141. Natural and Flexible Error Recovery for Generated Modular Language Environments
- Author
-
Eelco Visser, Lennart C. L. Kats, Maartje de Jonge, and Emma Söderberg
- Subjects
Parsing ,Syntax (programming languages) ,Computer science ,Programming language ,020207 software engineering ,02 engineering and technology ,Parsing expression grammar ,Semantics ,Top-down parsing ,computer.software_genre ,TheoryofComputation_MATHEMATICALLOGICANDFORMALLANGUAGES ,Rule-based machine translation ,020204 information systems ,0202 electrical engineering, electronic engineering, information engineering ,S-attributed grammar ,L-attributed grammar ,computer ,Software - Abstract
Integrated Development Environments (IDEs) increase programmer productivity, providing rapid, interactive feedback based on the syntax and semantics of a language. Unlike conventional parsing algorithms, scannerless generalized-LR parsing supports the full set of context-free grammars, which is closed under composition, and hence can parse languages composed from separate grammar modules. To apply this algorithm in an interactive environment, this article introduces a novel error recovery mechanism. Our approach is language independent, and relies on automatic derivation of recovery rules from grammars. By taking layout information into consideration it can efficiently suggest natural recovery suggestions.
- Published
- 2012
142. A scalable infrastructure for teaching concepts of programming languages in Scala with WebLab: an experience report
- Author
-
Daniel A. A. Pelsmaeker, Thomas Smith, Tim van der Lippe, and Eelco Visser
- Subjects
Unit testing ,Scala ,Computer science ,Programming language ,Teaching ,Testing ,Definitional interpreters ,020207 software engineering ,02 engineering and technology ,WebLab ,computer.software_genre ,Concepts of programming languages ,020204 information systems ,Scalability ,0202 electrical engineering, electronic engineering, information engineering ,Learning Management ,Pattern matching ,Reference implementation ,computer ,Implementation ,Interpreter ,computer.programming_language - Abstract
In this paper, we report on our experience in teaching a course on concepts of programming languages at TU Delft based on Krishnamurthi's PAPL book with the definitional interpreter approach using Scala as meta-language and using the WebLab learning management system. In particular, we discuss our experience with encoding of definitional interpreters in Scala using case classes, pattern matching, and recursive functions; offering this material in the web-based learning management system WebLab; automated grading and feedback of interpreter submissions using unit tests; testing tests to force students to formulate tests, instead of just implementing interpreters; generation of tests based on a reference implementation to reduce the effort of producing unit tests; and the construction of a product line of interpreters in order to maximize reuse and consistency between reference implementations.
- Published
- 2016
143. A constraint language for static semantic analysis based on scope graphs
- Author
-
Andrew Tolmach, Pierre Neron, Hendrik van Antwerpen, Guido Wachsmuth, and Eelco Visser
- Subjects
Domain-specific language ,Meta-Theory ,Theoretical computer science ,Programming language ,Computer science ,media_common.quotation_subject ,Name binding ,Language Specification ,Initialization ,020207 software engineering ,Graph theory ,02 engineering and technology ,Ambiguity ,Static analysis ,computer.software_genre ,Name Binding ,Metatheory ,Types ,Programming language specification ,0202 electrical engineering, electronic engineering, information engineering ,020201 artificial intelligence & image processing ,computer ,Domain Specific Languages ,media_common - Abstract
In previous work, we introduced scope graphs as a formalism for describing program binding structure and performing name resolution in an AST-independent way. In this paper, we show how to use scope graphs to build static semantic analyzers. We use constraints extracted from the AST to specify facts about binding, typing, and initialization. We treat name and type resolution as separate building blocks, but our approach can handle language constructs -- such as record field access -- for which binding and typing are mutually dependent. We also refine and extend our previous scope graph theory to address practical concerns including ambiguity checking and support for a wider range of scope relationships. We describe the details of constraint generation for a model language that illustrates many of the interesting static analysis issues associated with modules and records.
- Published
- 2016
144. Preventing injection attacks with syntax embeddings
- Author
-
Eelco Dolstra, Eelco Visser, and Martin Bravenboer
- Subjects
SQL ,computer.internet_protocol ,Computer science ,Program generation ,Concatenation ,0102 computer and information sciences ,02 engineering and technology ,computer.software_genre ,01 natural sciences ,Rule-based machine translation ,0202 electrical engineering, electronic engineering, information engineering ,Injection attacks ,computer.programming_language ,Concrete object syntax ,Syntax (programming languages) ,business.industry ,Programming language ,String (computer science) ,Program transformation ,020207 software engineering ,Homoiconicity ,Construct (python library) ,010201 computation theory & mathematics ,Security ,020201 artificial intelligence & image processing ,Artificial intelligence ,Syntax embedding ,business ,computer ,Sentence ,XML ,Software ,Natural language processing - 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 context-free host and guest languages.
- Published
- 2010
145. Providing rapid feedback in generated modular language environments
- Author
-
Emma Nilsson-Nyman, M. de Jonge, Eelco Visser, and Lennart C. L. Kats
- Subjects
Computer science ,media_common.quotation_subject ,02 engineering and technology ,computer.software_genre ,Semantics ,Parser combinator ,Rule-based machine translation ,020204 information systems ,0202 electrical engineering, electronic engineering, information engineering ,Code generation ,Syntax error ,media_common ,Parsing ,Grammar ,Syntax (programming languages) ,Programming language ,business.industry ,LR parser ,020207 software engineering ,Parsing expression grammar ,Context-free grammar ,Computer Graphics and Computer-Aided Design ,Syntax ,TheoryofComputation_MATHEMATICALLOGICANDFORMALLANGUAGES ,Extended Affix Grammar ,020201 artificial intelligence & image processing ,S-attributed grammar ,Top-down parsing language ,Artificial intelligence ,L-attributed grammar ,business ,computer ,Software ,Syntax highlighting ,Natural language processing - Abstract
This paper is a pre-print of: Providing Rapid Feedback in Generated Modular Language Environments. Adding Error Recovery to Scannerless Generalized-LR Parsing. In: Gary T. Leavens, editor, Proceedings of the 24th ACM SIGPLAN Conference on Object-Oriented Programing, Systems, Languages, and Applications (OOPSLA 2009), ACM, 2009. Integrated development environments (IDEs) increase programmer productivity, providing rapid, interactive feedback based on the syntax and semantics of a language. A heavy burden lies on developers of new languages to provide adequate IDE support. Code generation techniques provide a viable, efficient approach to semi-automatically produce IDE plugins. Key components for the realization of plugins are the language’s grammar and parser. For embedded languages and language extensions, constituent IDE plugin modules and their grammars can be combined. Unlike conventional parsing algorithms, scannerless generalized-LR parsing supports the full set of context-free grammars, which is closed under composition, and hence can parse language embeddings and extensions composed from separate grammar modules. To apply this algorithm in an interactive environment, this paper introduces a novel error recovery mechanism, which allows it to be used with files with syntax errors – common in interactive editing. Error recovery is vital for providing rapid feedback in case of syntax errors, as most IDE services depend on the parser – from syntax highlighting to semantic analysis and cross-referencing. We base our approach on the principles of island grammars, and derive permissive grammars with error recovery productions from normal SDF grammars. To cope with the added complexity of these grammars, we adapt the parser to support backtracking. We evaluate the recovery quality and performance of our approach using a set of composed languages, based on Java and Stratego.
- Published
- 2009
146. Stratego/XT 0.17. A language and toolset for program transformation
- Author
-
Martin Bravenboer, Rob Vermaas, Eelco Visser, and Karl Trygve Kalleberg
- Subjects
Stratego/XT ,Syntax (programming languages) ,Computer science ,Programming language ,Object language ,Concrete syntax ,Program transformation ,Stratego ,020207 software engineering ,02 engineering and technology ,computer.software_genre ,Rewrite rules ,Dynamic rewrite rules ,Software development process ,Transformation (function) ,020204 information systems ,0202 electrical engineering, electronic engineering, information engineering ,Rewriting strategies ,Rewriting ,computer ,Software ,Abstraction (linguistics) - 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.This paper gives an overview of Stratego/XT 0.17, including a description of the Stratego language and XT transformation tools; a discussion of the implementation techniques and software engineering process; and a description of applications built with Stratego/XT.
- Published
- 2008
- Full Text
- View/download PDF
147. Conf.Researchr.Org: towards a domain-specific content management system for managing large conference websites
- Author
-
Craig Anslow, Eelco Visser, and Elmer van Chastelet
- Subjects
conference website ,content management system ,Multimedia ,business.industry ,Computer science ,A domain ,computer.software_genre ,Domain (software engineering) ,World Wide Web ,Software ,web programming ,domain-specific ,business ,computer ,ComputingMilieux_MISCELLANEOUS ,Content management system - Abstract
Federated conferences such as SPLASH are complex orga- nizations composed of many parts (co-located conferences, symposia, and workshops), and are put together by many different people and committees. Developing the website for such a conference requires a considerable effort, and is often reinvented for each edition of a conference using software that provides little to no support for the domain. In this paper, we give a high-level overview of the design of Conf.Researchr.Org, a domain-specific content management system developed to support the production of large conference web sites, which is being used for the federated confer- ences of ACM SIGPLAN.
- Published
- 2015
148. Understanding software through linguistic abstraction
- Author
-
Eelco Visser
- Subjects
Domain-specific language ,Computer science ,business.industry ,Programming language ,Software understanding ,Programming languages ,computer.software_genre ,Linguistics ,Domain (software engineering) ,Software ,Argument ,Linguistic abstraction ,business ,computer ,Domain-specific languages ,Abstraction (linguistics) - Abstract
In this essay, I argue that linguistic abstraction should be used systematically as a tool to capture our emerging understanding of domains of computation. Moreover, to enable that systematic application, we need to capture our understanding of the domain of linguistic abstraction itself in higher-level meta languages. The argument is illustrated with examples from the SDF, Stratego, Spoofax, and WebDSL projects in which I explore these ideas.
- Published
- 2015
149. A survey of strategies in rule-based program transformation systems
- Author
-
Eelco Visser
- Subjects
Program representation ,Theoretical computer science ,Attribute grammars ,media_common.quotation_subject ,Strategy combinators ,computer.software_genre ,Domain (software engineering) ,Congruence operators ,Tree parsing ,Transformation rule ,Pattern matching ,Function (engineering) ,media_common ,Mathematics ,Algebra and Number Theory ,Parsing ,Programming language ,Transformation strategy ,Program transformation ,Rule-based system ,Context-sensitive rules ,Tree traversal ,Term rewriting ,Computational Mathematics ,Strategy annotations ,Transformation (function) ,Generic traversal strategies ,Rewriting ,Extensions of term rewriting ,computer - Abstract
Program transformation is the mechanical manipulation of a program in order to improve it relative to some cost function and is understood broadly as the domain of computation where programs are the data. The natural basic building blocks of the domain of program transformation are transformation rules expressing a ‘one-step’ transformation on a fragment of a program. The ultimate perspective of research in this area is a high-level, language parametric, rule-based program transformation system, which supports a wide range of transformations, admitting efficient implementations that scale to large programs. This situation has not yet been reached, as trade-offs between different goals need to be made. This survey gives an overview of issues in rule-based program transformation systems, focusing on the expressivity of rule-based program transformation systems and in particular on transformation strategies available in various approaches. The survey covers term rewriting, extensions of basic term rewriting, tree parsing strategies, systems with programmable strategies, traversal strategies, and context-sensitive rules.
- Published
- 2005
150. Scopes Describe Frames: A Uniform Model for Memory Layout in Dynamic Semantics (Artifact)
- Author
-
Casper Bach Poulsen and Pierre Néron and Andrew Tolmach and Eelco Visser, Bach Poulsen, Casper, Néron, Pierre, Tolmach, Andrew, Visser, Eelco, Casper Bach Poulsen and Pierre Néron and Andrew Tolmach and Eelco Visser, Bach Poulsen, Casper, Néron, Pierre, Tolmach, Andrew, and Visser, Eelco
- Abstract
Our paper introduces a systematic approach to the alignment of names in the static structure of a program, and memory layout and access during its execution. We develop a uniform memory model consisting of frames that instantiate the scopes in the scope graph of a program. This provides a language-independent correspondence between static scopes and run-time memory layout, and between static resolution paths and run-time memory access paths. The approach scales to a range of binding features, supports straightforward type soundness proofs, and provides the basis for a language-independent specification of sound reachability-based garbage collection. This Coq artifact showcases how our uniform model for memory layout in dynamic semantics provides structure to type soundness proofs. The artifact contains type soundness proofs mechanized in Coq for (supersets of) all languages in the paper. The type soundness proofs rely on a language-independent framework formalizing scope graphs and frame heaps.
- Published
- 2016
- Full Text
- View/download PDF
Catalog
Discovery Service for Jio Institute Digital Library
For full access to our library's resources, please sign in.