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:

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