CSE 341 -- Programming LanguagesWinter 2000 |
Department of Computer Science and Engineering, University of WashingtonSteve Tanimoto (instructor) and Jeremy Baer (teaching assistant). |
MiniProjectVersion 1.00 of February 18, with due-date revision on March 4. Subject to further change. |
Programming Systems on the WebDue dates and times -- Demonstrations: Wednesday, March, 8, 2000 at 10:30 in Sieg 232. (Topic proposals are due Thursday, February 24 at 5:00. Milestone report M1 is due Friday, March 3.) Submit the final version of your miniproject electronically before Friday, March 10 at 6:00 PM by filling out an online submission form. |
Instructions: 1. Choose a class of computations that
your users will be able to specify. There are lots of possibilities
here including types of simulations, animations, mathematical computations,
or ways to process text or images, or ways to search for information on
the web.
2. Refine that class of computations so that it is a rich one (with
more than a finite number of possible programs), but one that hangs together
as a coherent set.
3. Write a description of that set of computations and what the fundamental
primitives will be in the programming language or programming system.
4. Identify the paradigm or approach that your programming system will
use: rule-based, control-flow, data-flow, textual language with parsing,
textual language embedded in Lisp, programming by demonstration, etc.
5. Implement the user's editor for programs in your language.
If you are doing some kind of diagrammatic language, then your J2 applet
can be a good starting point for this.
6. Implement the execution environment for your user's programs.
If the programs will control the behavior of objects in a microworld, then
implement this microworld, possibly using your J2 applet as the starting
point for an implementation that lets the user configure the simulation
environment.
7. Connect the programming part of your system with the interpretation/execution
part, so that the programs can be run by the user.
Project Requirements: 1. programming system. (User gets
to edit and run some kind of programs).
2. defined class of computations, suitably rich. (not limited
to a finite set of possible programs and executions).
3. implement in Lisp, Java, or Perl. (or a combination, if that helps).
4. identifiable programming approach such as rule-based, data-flow,
functional, etc.
5. nontrivial programs possible in the system -- language should include
means for specifying controlled repetition in the computation, means for
conditional execution.
6. deployed on the web, so that users can write programs in your system
via a web browser.
7. interesting demo example saved and editable and runnable by any
user.
Programming style: Comment your code clearly.
Possible topics include, but are not limited to, the following:
A visual rule-based language for controlling the behaviors of objects in a 2-D microworld. An example of this type of programming system is the AgentBuilder project of Robinson and Cook that ended up, after some polishing the next quarter, being published in a conference proceedings. Here is a Pong game created using AgentBuilder. The Stagecast Creator product demonstrated in class is another example of this sort of programming system.
A programming-by-demonstration environment for traditional numeric algorithms such as factorial, fibonnaci numbers, etc. The ToonTalk system, demonstrated in class, goes well beyond traditional numeric algorithms, but might give you some ideas.
A data-flow programming system for numeric computations. The Prograph language is a good example of such a system.
A visual programming language of some sort.
A computer-based language for specifying animations that help people communicate informally in the Internet. Here's an example called Vedo-Vedi.
A programming language and interpreter for directing the activity of a World Wide Web spider. The user would write or draw small programs that control how a spider searches the web.
A system that lets the user draw image processing algorithms as diagrams.
One box or icon could represent loading an image from a URL on the server,
and other boxes or icons might represent typical image processing operations
such as resizing, changing contrast, adding two images, mosaicing two or
more images together, and displaying an image. Arrows would indicate
ordering of operations.