Portrait

Ronald Garcia

Assistant Professor
Software Practices Lab
Department of Computer Science
University of British Columbia
201-2366 Main Mall
Vancouver, B.C., Canada V6T 1Z4

Contents

Research Interests
Teaching
Activities
Refereed Publications
Technical Reports
Boost
Personal


Research Interests

I am interested in many aspects of programming language semantics, design, and implementation, including language support for library-centric and modular software development, generic and generative programming, and domain specific languages and libraries.

Teaching

Spring 2013: Programming Language Principles (
CPSC 509)
Fall 2013: Computation, Programs, and Programming (CPSC 110)
Spring 2012: Programming Language Principles (CPSC 509)
Fall 2012: Computation, Programs, and Programming (CPSC 110)
Fall 2011: Programming Language Principles (CPSC 509)

Activities

Refereed Publications

The Reaction of Open-Source Projects to New Language Features: An Empirical Study of C#.
Donghoon Kim, Emerson Murphy-Hill, Chris Parnin, Christian Bird, and Ronald Garcia. Journal of Object Technology, Volume 12, no. 4 (November 2013), pp. 1:1-31.
Generics have become viewed as a crucial feature of object oriented languages, and as such have been added to both Java and C#. This paper presents an empirical study of how generics have been adopted over time in ongoing open source projects, and to what extent the available data supports or undercuts language designers' claims about their benefits.
Calculating Threesomes, with Blame
Ronald Garcia. In ICFP '13: The 18th International Conference on Functional Programming.
The coercion calculus of Henglein is a pleasant framework in which to design space-efficient cast calculi that embody particular blame strategies, but implementing coercions directly and correctly is challenging. The threesome calculus of Siek and Wadler also supports space-efficient casts and is straightforward to implement, but is tricky to endow with a blame strategy. This paper shows that you can enjoy the best of both worlds by designing your blame strategy using coercions, and then calculate a corresponding notion of threesomes using correctness-preserving transformations. The concrete result is three new threesome calculi that cover the design space of casts identified by Siek, Garcia, and Wadler.
Gradual Typestate
Roger Wolff, Ronald Garcia, Éric Tanter, and Jonathan Aldrich. In ECOOP '11: The 25th European Conference on Object-Oriented Programming.
This paper presents Gradual Featherweight Typestate (GFT), a formal model of a language for Typestate-oriented programming. Though powerful, static typestate checkers, like the one built into GFT, are sometimes too weak to recognize correct programs, and sometimes too complex for programmers to use. This work averts this limitation by developing a model of combined static and dynamic typestate checking. The result is a language that provides powerful static safety and program structuring facilities with tractable and flexible type checking.
Permission-Based Programming Languages
Jonathan Aldrich, Ronald Garcia, Mark Hahnenberg, Manuel Mohr, Karl Naden, Darpan Saini, Sven Stork, Joshua Sunshine, Éric Tanter, and Roger Wolff. In ICSE '11: the 33rd International Conference on Software Engineering: New Ideas and Emerging Results (NIER) track.
This paper proposes access permissions as a powerful extension to programming language type systems. They can be used to support stronger safety checks, more flexible program structure, and safe concurrency.
Lazy Evaluation and Delimited Control
Ronald Garcia, Andrew Lumsdaine, and Amr Sabry. In Logical Methods in Computer Science, Volume 6, Issue 3: Special Issue on POPL 2009.
This journal paper extends the results of the 2009 POPL paper with more language features and an abstract machine for cyclic call-by-need evaluation.
ACM DL Author-ize
						       serviceToward foundations for type-reflective metaprogramming
Ronald Garcia, Andrew Lumsdaine
GPCE '09 Proceedings of the eighth international conference on Generative programming and component engineering, 2009
C++ template metaprogramming is a suite of techniques for compile-time computation that leverage the expressive power of C++'s type system. Because it relies on emergent properties of language features that were originally intended for other purposes, template metaprogramming suffers practical shortcomings and is not well-understood in theory. In this paper, we analyze core capabilities of template metaprogramming apart from the particular C++ features that support them. Guided by this analysis we develop and study a foundational language semantics that directly captures those capabilities.
Exploring the Design Space of Casts
Jeremy Siek, Ronald Garcia, and Walid Taha. In ESOP '09: The 18th European Symposium on Programming.
Variants of the lambda calculus augmented with a dynamic type and cast expressions (cast calculi) have been used to formalize languages that combine dynamic and static type disciplines. Due to the diversity of requirements imposed by these languages, no single cast calculus design suffices. In this paper, we develop a modular semantic framework that captures a number of cast calculi, some novel and some extending or matching results from the literature. Each calculus supports space-efficient implementation and tracks blame for cast failures. Furthermore, we introduce a novel and intuitive blame-assignment strategy that respects traditional subtyping.
ACM DL Author-ize
						       serviceLazy evaluation and delimited control
Ronald Garcia, Andrew Lumsdaine, Amr Sabry
POPL '09 Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages, 2009
This paper formalizes the connection between lazy evaluation and coroutine-like control operations, both of which are often used to solve the same problems. Starting from a variant of the call-by-need lambda calculus, we produce a novel heap-less abstract machine that uses control operations to locally manage laziness. We then recast the machine's operational behavior as a simulation of call-by-need evaluation in a call-by-value language with delimited control operations and first-class generative prompts. Both semantic artifacts cast lazy evaluation as an elegant expression of control operations.
An extended comparative study of language support for generic programming
Ronald Garcia, Jaakko Järvi, Andrew Lumsdaine, Jeremy Siek, and Jeremiah Willcock. In Journal of Functional Computing, Volume 17, Number 2, 2007.
This paper extends the work presented in the OOPSLA 2003 paper. It adds explorations of the generic programming style using the class system of Objective Caml and the symmetric multi-methods of Cecil. The analysis of the previously studied languages has been updated to reflect changes since 2003, some of which were inspired by that work.

Type classes without types
Ronald Garcia and Andrew Lumsdaine. In Scheme '05: the 2005 ACM SIGPLAN Workshop on Scheme and Functional Programming.

Haskell type classes are an interesting example of how static type information can be used to enhance the expressiveness of a programming language. Scheme macros are a powerful mechanism for developing syntactic abstractions. This paper explores how far macros can go toward extending a dynamically typed language with a feature normally associated with static typing.

MultiArray: a C++ library for generic programming with arrays
Ronald Garcia and Andrew Lumsdaine. In Software: Practice and Experience, Volume 35, Number 2, 2005.

This paper reports on the design and implementation of MultiArray, a library for multi-dimensional array programming. This library is based on the generic programming style popularized by the Standard Template Library. It provides array containers, adaptors, and views, all built on a consistent conceptual basis.

ACM DL Author-ize
						      serviceA comparative study of language support for generic programming
Ronald Garcia, Jaakko Jarvi, Andrew Lumsdaine, Jeremy G. Siek, Jeremiah Willcock
OOPSLA '03 Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications, 2003
Both research and mainstream programming languages now provide mechanisms for type-based abstraction, including templates, parametric polymorphism, and sophisticated module systems. This paper uses a case-study to explore the capabilities and shortcomings of several programming languages with respect to their ability to express libraries of generic data structures and algorithms.

Technical Reports

Concepts for C++0x
Jeremy Siek, Douglas Gregor, Ronald Garcia, Jeremiah Willcock, Jaakko Järvi, and Andrew Lumsdaine. Technical report N1758=05-0018, ISO/IEC JTC 1, Information Technology, Subcommittee SC 22, Programming Language C++, 2005.

C++ has been a very capable language for implementing generic libraries, but provides limited explicit support for generic programming. Based on our experiences implementing C++ libraries and studying language support for the generic programming style, we designed C++ language extensions to directly support concepts, a modular constraint formalism for generics. The design has since evolved into a joint proposal with colleagues at Texas A&M, and is expected to be part of the next C++ standard (so-called C++0X).

Boost

I am an active participant in the Boost C++ Libraries project. I serve (with John Phillips) as Review Wizard, primarily responsible for coordinating review managers and library reviews.

I am the primary developer of the Boost MultiArray Library. MultiArray is a library of multi-dimensional array abstractions. MultiArray is based on generic programming. It provides a number of array types (self-managed containers, adaptors, and views) as well as a type-generic programming interface (or concept in generic programming terms) that enables the implementation of generic array algorithms.

I've contributed code to a variety of other Boost projects. For example, I implemented a flexible GraphViz parser for the Boost Graph Library. I have also provided an IOStreams codecvt facet for the Unicode UTF-8 encoding. This facet is used in several Boost libraries including the Serialization and Program Options libraries.

Personal

I am an avid fan and player of ultimate frisbee. I also like to run and ride my bike around interesting places. While not particularly fond of cooking, I'm a big fan of eating.