Grace is a programming language under development aimed at education. Grace
is object-oriented, imperative, and block-structured, and intended for use in
first- and second-year object-oriented programming courses. We present a
number of language features we have designed for Grace and implemented in our
self-hosted compiler. We describe the design of a pattern-matching system
with object-oriented structure and minimal extension to the language. We give
a design for an object-based module system, which we use to build dialects, a
means of extending and restricting the language available to the programmer,
and of implementing domain-specific languages. We show a visual programming
interface that melds visual editing (à la Scratch) with textual editing, and
that uses our dialect system, and we give the results of a user experiment we
performed to evaluate the usability of our interface.
Auxiliary data
There is accompanying additional auxiliary data for the benefit of future
researchers:
Minigrace: The source code of Minigrace, the
Grace compiler I built, including its complete revision history as a
Git repository. The repository is also available with Git
from https://github.com/mwh/minigrace. Several bootstrap tarballs are
also available:
Grace web IDE: The web interface to Minigrace’s
ECMAScript backend.
Tiled Grace: The source code of Tiled Grace, the
combined graphical-textual interface described in Chapter 7 of the
thesis. The repository is also available with Git
from https://github.com/mwh/tiledgrace.
Experimental data: Anonymised data
from the experiment I conducted using Tiled Grace, including survey
responses, instrumentation data, analysis scripts, and the
instrumented interface used in the experiment. The data set is
distributed under CC-BY 4.0 and created by Michael Homer.
Grace-GTK: The source code of the Minigrace
bindings to the GTK+ widget library described in section
8.4.1 of the thesis. The repository is also available with Git
from https://github.com/mwh/grace-gtk.
Grace-CUDA: The source code of the Minigrace
plugin and runtime library for GPU programming described in section
8.4.2 of the thesis. The repository is also available with Git from
https://github.com/mwh/grace-cuda.
Publications
Several of my publications correspond to chapters of the thesis. These
are:
Patterns as Objects in Grace. Dynamic Language Symposium (DLS), 2012. Michael Homer, James Noble, Kim B. Bruce, Andrew P. Black, and David J. Pearce. (author copy) (Chapter 4)
Modules as Gradually-Typed Objects. 7th Workshop on Dynamic Languages and Applications (DYLA), 2013. Michael Homer, James Noble, Kim B. Bruce, and Andrew P. Black. (author copy) (Chapter 5)
Graceful Dialects. European Conference on Object-Oriented Programming (ECOOP), 2014. Michael Homer, Timothy Jones, James Noble, Kim B. Bruce, and Andrew P. Black. (author copy) (Chapter 6)