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)