<-- Back to schedule

Grace: an open-source educational programming language

Project: Grace

Grace is a new programming language aimed at education. Grace intends to reflect the last two decades' accumulation of knowledge on language design and teaching, and integrates well-known features that have proved themselves useful in other languages. Grace permits multiple approaches to program design and teaching, including object-, class-, procedure-, and function-based programming, with or without types, and allows moving between these approaches within the same language, so that students can be exposed to multiple approaches and instructors can tailor their courses to the topics they wish to teach.

Supporting users at different stages of understanding is a key goal of Grace. While the main purpose of Grace is to be used for introductory programming courses, it is also a full-powered language incorporating the state of the art in language design. Different approaches and different levels of learning are supported by a feature called dialects: extended and restricted user-defined sub-languages applied on a per-module basis. Through dialects a learner need only see the functionality that is relevant to their stage of learning, with other features that might confuse the issue hidden, and can gradually move to an unrestricted language.

In this talk, I'll outline the principal features of Grace and the philosophy behind them. I'll discuss the design choices made and the paths not taken, and describe the remaining open issues of the language. I'll talk about where language design can help programmers say what they mean, and talk particularly about the interesting pattern-matching and dialect features in Grace.

I'll also look at what educational research tells us about learning to program and programming languages. I'll outline how that has influenced the design of Grace. In the same vein, I’ll give some examples from the design process so far showing how conceptually orthogonal design decisions turn out to be deeply interrelated and require careful balancing with the goals of the language. I'll mention preliminary trials using Grace educationally.

Grace has two existing open-source implementations. I'll introduce both of these, the self-hosted Minigrace compiler and the concurrent JavaScript-based Hopper interpreter. I'll also demonstrate a unique interface built on them that integrates visual programming à la Scratch and textual programming for the same code, to achieve a smoother transition for even earlier programmers.

Michael Homer

Michael has a long-standing interest in programming languages and language features that help programmers say what they mean. He has spent the last three years designing and building a compiler for the Grace language, and participating in the design and evaluation of the language itself. He has worked on the GoboLinux distribution and is also interested in education, package management, JavaScript, the web, and data storage.