prev next
Why Not Java?
It would certainly be possible to implement the system using an
existing programming language as the source language. However, the
very high perplexity and aphonic nature of current programming
languages hinder high recognition accuracy and ease of
utterance. Consider the preponderance of punctuation in Java, for
example.
Natural Language Justification for Design Choices
I have used evidence from natural language to guide the design
choices, although these pages will only touch briefly on this. The
natural language aspect of programming languages was the topic for my
CogSci 201 project. The report will be available on-line shortly.
Also, I have implemented a speech recognizer for a procedural subset
of sopl for yet another class project (EECS 225D). Its report will
also be available on-line shortly, and source is available upon
request.
Missing Features
There are several desirable features which have either not made it
into the language or for which the currently implementation is not
fully consistent with the goals listed above. With some of these
features, I simply did not have enough experience to feel comfortable
adapting them for sopl. Other features were not part of the study of
natural language aspects of programming languages, and therefore have
not been fully adapted for sopl.
Most notably, arrays are only partially adapted. More work needs to be
done to understand how to speak the various syntactic and semantic
aspects of arrays.
None of the following features are implemented in sopl:
- exception handling
- parametric types
- first-class functions
- general pragmas
- aliases
Aliases especially are absolutely necessary for a spoken language, but
it only occurred to me recently! More work needs to be done to
discover a low perplexity, easily speakable, and semanticly correct
method of specifying general aliases. Some ideas:
// Make print stand for System.out.printf
alias print = System.out.printf
// Make package1.anything stand for a.really.long.qualified.name.anything
alias package1.* = a.really.long.qualified.name.*
// More general matching?
alias [1].[3] = a.long.qualified.name.with.*.embedded.strings*.inside
prev next