Advanced compiler design and implementation
Advanced compiler design and implementation
How to Comprehend Queries Functionally
Journal of Intelligent Information Systems - Special issue on functional approach to intelligent information systems
Domain specific embedded compilers
Proceedings of the 2nd conference on Domain-specific languages
Optimizing object queries using an effective calculus
ACM Transactions on Database Systems (TODS)
Incremental Updates for Materialized OQL Views
DOOD '97 Proceedings of the 5th International Conference on Deductive and Object-Oriented Databases
Journal of Functional Programming
Secrets of the Glasgow Haskell Compiler inliner
Journal of Functional Programming
ACM SIGPLAN Notices
LINQ: reconciling object, relations and XML in the .NET framework
Proceedings of the 2006 ACM SIGMOD international conference on Management of data
Statistically rigorous java performance evaluation
Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications
Lost in translation: formalizing proposed extensions to c#
Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications
The end of an architectural era: (it's time for a complete rewrite)
VLDB '07 Proceedings of the 33rd international conference on Very large data bases
Caching and incrementalisation in the java query language
Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
FERRY: database-supported program execution
Proceedings of the 2009 ACM SIGMOD International Conference on Management of data
The good, the bad, and the ugly: three ways to use a semantic code query system
Proceedings of the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and applications
FlumeJava: easy, efficient data-parallel pipelines
PLDI '10 Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation
OSDI'08 Proceedings of the 8th USENIX conference on Operating systems design and implementation
Lightweight modular staging: a pragmatic approach to runtime code generation and compiled DSLs
GPCE '10 Proceedings of the ninth international conference on Generative programming and component engineering
The pain of implementing LINQ providers
Communications of the ACM
Repeatability, reproducibility, and rigor in systems research
EMSOFT '11 Proceedings of the ninth ACM international conference on Embedded software
ScalaQL: language-integrated database queries for scala
SLE'09 Proceedings of the Second international conference on Software Language Engineering
CodeQuest: scalable source code queries with datalog
ECOOP'06 Proceedings of the 20th European conference on Object-Oriented Programming
Efficient object querying for java
ECOOP'06 Proceedings of the 20th European conference on Object-Oriented Programming
POPL '13 Proceedings of the 40th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Open GADTs and declaration-site variance: a problem statement
Proceedings of the 4th Workshop on Scala
Composition and reuse with compiled domain-specific languages
ECOOP'13 Proceedings of the 27th European conference on Object-Oriented Programming
Hi-index | 0.00 |
Modularity and efficiency are often contradicting requirements, such that programers have to trade one for the other. We analyze this dilemma in the context of programs operating on collections. Performance-critical code using collections need often to be hand-optimized, leading to non-modular, brittle, and redundant code. In principle, this dilemma could be avoided by automatic collection-specific optimizations, such as fusion of collection traversals, usage of indexing, or reordering of filters. Unfortunately, it is not obvious how to encode such optimizations in terms of ordinary collection APIs, because the program operating on the collections is not reified and hence cannot be analyzed. We propose SQuOpt, the Scala Query Optimizer--a deep embedding of the Scala collections API that allows such analyses and optimizations to be defined and executed within Scala, without relying on external tools or compiler extensions. SQuOpt provides the same "look and feel" (syntax and static typing guarantees) as the standard collections API. We evaluate SQuOpt by re-implementing several code analyses of the FindBugs tool using SQuOpt, show average speedups of 12x with a maximum of 12800x and hence demonstrate that SQuOpt can reconcile modularity and efficiency in real-world applications.