Harmonizing classes, functions, tuples, and type parameters in Virgil III
Venue
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation, ACM, New York, New York (2013), pp. 85-94
Publication Year
2013
Authors
BibTeX
Abstract
Languages are becoming increasingly multi-paradigm. Subtype polymorphism in
statically-typed object-oriented languages is being supplemented with parametric
polymorphism in the form of generics. Features like first-class functions and
lambdas are appearing everywhere. Yet existing languages like Java, C#, C++, D, and
Scala seem to accrete ever more complexity when they reach beyond their original
paradigm into another; inevitably older features have some rough edges that lead to
nonuniformity and pitfalls. Given a fresh start, a new language designer is faced
with a daunting array of potential features. Where to start? What is important to
get right first, and what can be added later? What features must work together, and
what features are orthogonal? We report on our experience with Virgil III, a
practical language with a careful balance of classes, functions, tuples and type
parameters. Virgil intentionally lacks many advanced features, yet we find its core
feature set enables new species of design patterns that bridge multiple paradigms
and emulate features not directly supported such as interfaces, abstract data
types, ad hoc polymorphism, and variant types. Surprisingly, we find variance for
function types and tuple types often replaces the need for other kinds of type
variance when libraries are designed in a more functional style.
