Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Michael J. Steindorfer

dblp:150/9959 · DBLP profile ↗
← Back
7ranked-venue papers
5as first author
0since 2021 · last 2018
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 7 · 5 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Theoretical computer science
2 papers
Algorithms and data structures · 100%
Software engineering, system software, and programming languages
2 papers
Runtime systems and virtual machines · 57% Compilers and program optimization · 26% Programming languages and type systems · 17%

Topics — the 3 heaviest of 4, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Algorithms and data structures › dynamic data structures
persistent data structures
0.522018
To-many or to-one? all-in-one! efficient purely functional multi-maps with type-heterogeneous hash-tries · PLDI 2018
Optimizing hash-array mapped tries for fast and lean immutable JVM collections · OOPSLA 2015
Runtime systems and virtual machines › virtual machine implementation
java virtual machine
0.212015
Optimizing hash-array mapped tries for fast and lean immutable JVM collections · OOPSLA 2015
Programming languages and type systems
functional programming
0.112015
Optimizing hash-array mapped tries for fast and lean immutable JVM collections · OOPSLA 2015
YearPublicationVenuePosition
2018 To-many or to-one? all-in-one! efficient purely functional multi-maps with type-heterogeneous hash-tries
abstract
An immutable multi-map is a many-to-many map data structure with expected fast insert and lookup operations. This data structure is used for applications processing graphs or many-to-many relations as applied in compilers, runtimes of programming languages, or in static analysis of object-oriented systems. Collection data structures are assumed to carefully balance execution time of operations with memory consumption characteristics and need to scale gracefully from a few elements to multiple gigabytes at least. When processing larger in-memory data sets the overhead of the data structure encoding itself becomes a memory usage bottleneck, dominating the overall performance.
Michael J. Steindorfer, Jurgen J. Vinju
PLDI1
2018 Declarative specification of indentation rules: a tooling perspective on parsing and pretty-printing layout-sensitive languages
abstract
In layout-sensitive languages, the indentation of an expression or statement can influence how a program is parsed. While some of these languages (e.g., Haskell and Python) have been widely adopted, there is little support for software language engineers in building tools for layout-sensitive languages. As a result, parsers, pretty-printers, program analyses, and refactoring tools often need to be handwritten, which decreases the maintainability and extensibility of these tools. Even state-of-the-art language workbenches have little support for layout-sensitive languages, restricting the development and prototyping of such languages.
Luís Eduardo de Souza Amorim, Michael J. Steindorfer, Sebastian Erdweg, Eelco Visser
SLE2
2017 Deep priority conflicts in the wild: a pilot study
abstract
Context-free grammars are suitable for formalizing the syntax of programming languages concisely and declaratively. Thus, such grammars are often found in reference manuals of programming languages, and used in language workbenches for language prototyping. However, the natural and concise way of writing a context-free grammar is often ambiguous.
Luís Eduardo de Souza Amorim, Michael J. Steindorfer, Eelco Visser
SLE2
2016 Towards a software product line of trie-based collections
abstract
Collection data structures in standard libraries of programming languages are designed to excel for the average case by carefully balancing memory footprint and runtime performance. These implicit design decisions and hard-coded trade-offs do constrain users from using an optimal variant for a given problem. Although a wide range of specialized collections is available for the Java Virtual Machine (JVM), they introduce yet another dependency and complicate user adoption by requiring specific Application Program Interfaces (APIs) incompatible with the standard library.
Michael J. Steindorfer, Jurgen J. Vinju
GPCE1
2016 Performance Modeling of Maximal Sharing
abstract
It is noticeably hard to predict the effect of optimization strategies in Java without implementing them. "Maximal sharing" (a.k.a. "hash-consing") is one of these strategies that may have great benefit in terms of time and space, or may have detrimental overhead. It all depends on the redundancy of data and the use of equality. We used a combination of new techniques to predict the impact of maximal sharing on existing code: Object Redundancy Profiling (ORP) to model the effect on memory when sharing all immutable objects, and Equals-Call Profiling (ECP) to reason about how removing redundancy impacts runtime performance. With comparatively low effort, using the MAximal SHaring Oracle (MASHO), a prototype profiler based on ORP and ECP, we can uncover optimization opportunities that otherwise would remain hidden.
Michael J. Steindorfer, Jurgen J. Vinju
ICPE1
2015 Optimizing hash-array mapped tries for fast and lean immutable JVM collections
abstract
The data structures under-pinning collection API (e.g. lists, sets, maps) in the standard libraries of programming languages are used intensively in many applications. The standard libraries of recent Java Virtual Machine languages, such as Clojure or Scala, contain scalable and well-performing immutable collection data structures that are implemented as Hash-Array Mapped Tries (HAMTs). HAMTs already feature efficient lookup, insert, and delete operations, however due to their tree-based nature their memory footprints and the runtime performance of iteration and equality checking lag behind array-based counterparts. This particularly prohibits their application in programs which process larger data sets. In this paper, we propose changes to the HAMT design that increase the overall performance of immutable sets and maps. The resulting general purpose design increases cache locality and features a canonical representation. It outperforms Scala’s and Clojure’s data structure implementations in terms of memory footprint and runtime efficiency of iteration (1.3–6.7x) and equality checking (3–25.4x).
Michael J. Steindorfer, Jurgen J. Vinju
OOPSLA1
2014 Code specialization for memory efficient hash tries (short paper)
abstract
The hash trie data structure is a common part in standard collection libraries of JVM programming languages such as Clojure and Scala. It enables fast immutable implementations of maps, sets, and vectors, but it requires considerably more memory than an equivalent array-based data structure. This hinders the scalability of functional programs and the further adoption of this otherwise attractive style of programming. In this paper we present a product family of hash tries. We generate Java source code to specialize them using knowledge of JVM object memory layout. The number of possible specializations is exponential. The optimization challenge is thus to find a minimal set of variants which lead to a maximal loss in memory footprint on any given data. Using a set of experiments we measured the distribution of internal tree node sizes in hash tries. We used the results as a guidance to decide which variants of the family to generate and which variants should be left to the generic implementation. A preliminary validating experiment on the implementation of sets and maps shows that this technique leads to a median decrease of 55% in memory footprint for maps (and 78% for sets), while still maintaining comparable performance. Our combination of data analysis and code specialization proved to be effective.
Michael J. Steindorfer, Jurgen J. Vinju
GPCE1