Quoted staged rewriting: a practical approach to library-defined optimizations
Autor: | Lionel Parreaux, Christoph Koch, Amir Shaikhha |
---|---|
Rok vydání: | 2017 |
Předmět: |
Optimization
Intermediate language Staging Theoretical computer science Interface (Java) Scala Computer science Programming language 02 engineering and technology computer.software_genre Computer Graphics and Computer-Aided Design Metaprogramming Rewrite Rules 020202 computer hardware & architecture 020204 information systems 0202 electrical engineering electronic engineering information engineering Code (cryptography) Rewriting Pattern matching Macro Programmer computer Software computer.programming_language |
Zdroj: | GPCE |
ISSN: | 1558-1160 0362-1340 |
DOI: | 10.1145/3170492.3136043 |
Popis: | Staging has proved a successful technique for programmatically removing code abstractions, thereby allowing for faster program execution while retaining a high-level interface for the programmer. Unfortunately, techniques based on staging suffer from a number of problems — ranging from practicalities to fundamental limitations — which have prevented their widespread adoption. We introduce Quoted Staged Rewriting (QSR), an approach that uses type-safe, pattern matching-enabled quasiquotes to define optimizations. The approach is “staged” in two ways: first, rewrite rules can execute arbitrary code during pattern matching and code reconstruction, leveraging the power and flexibility of staging; second, library designers can orchestrate the application of successive rewriting phases (stages). The advantages of using quasiquote-based rewriting are that library designers never have to deal directly with the intermediate representation (IR), and that it allows for non-intrusive optimizations — in contrast with staging, it is not necessary to adapt the entire library and user programs to accommodate optimizations. We show how Squid, a Scala macro-based framework, enables QSR and renders library-defined optimizations more practical than ever before: library designers write domain-specific optimizers that users invoke transparently on delimited portions of their code base. As a motivating example we describe an implementation of stream fusion (a well-known deforestation technique) that is both simpler and more powerful than the state of the art, and can readily be used by Scala programmers with no knowledge of metaprogramming. |
Databáze: | OpenAIRE |
Externí odkaz: |