CSE 341 -- Programming Languages

Autumn 2002

Department of Computer Science and Engineering, University of Washington

Steve Tanimoto (instructor)

Group Projects

Version 1.0 of November 13

Designing and Prototyping New Programming Languages 

Due dates: Topics due Monday, Nov. 18 by midnight. Email your topic to Steve at tanimoto@cs (see instructions). Working programs due Monday, December 9 at 10:30 AM. Written reports and all code due Monday, December 16 at 5:00 PM.

Turn-in requirements: Hardcopy of the report, including a URL to all the code.


 

Title: Designing and Prototyping New Programming Languages

Purposes: Gain the experience of actually designing and implementing a new (though limited) programming language. Practice working in a group. Practice using one or more of the four languages studied in the class.
 
Suggested Options
 
Implement a new programming environment, complete with language, editor, execution subsystem, and debugging facility. Can be interpreted. Examples, data-flow visual languages, simulation languages with visual constructs.
 
Design and implement an embedded language in Scheme or ML that provides new datatypes, functions, macros, and debugging facilities for some particular class of computations.
 
Ideas for Classes of Computations Report Requirements
  Language Design Document that includes...
    1. A statement of what class of computations the language
        is intended for.
    2. Analysis of the paradigm(s) involved in your language.
    3. Description of the language in terms of
         (a) basic representations for operations and data.
               If you are doing an embedded language then
               you will probably be relying on the host language
               (e.g., Scheme or ML) for this.
         (b) new datatypes
         (c) new functions
         (d) new control structures
         (e) how the programmers using your language will put
              programs together out of the pieces you provide.
     4. Whether your language is "Turing complete" and why or
          why not.
     5. Literature references to the most closely related
        articles, books, or web pages.
  Example programs in your language:
     1. One or two simple programs in the spirit of the "Hello
        World" programs to show a minimal working setup.
     2. One or more slightly more complex programs that
        illustrate a particular language feature you provide.
     3. One or more complex programs that show an "application"
        using your language.  Such a program will probably be
        about 2-3 pages of code.
  Documentation of your programming environment.  This may
   include any of the following...
     1. Interpreter for your language... how does it work?
     2. Debugging or visualization facility.
     3. Editor for programs.  If you develop a visual language,
        this may be a sort of drawing interface.
     4. Performance analysis features -- related to debugging
        in that it reveals information about the running of
        the program, but may emphasize resource usage rather
        than correctness.
  Instructions for using your language and for running a demo.
     1. Full path information to finding your software and
        documentation on one of the departmental machines such
        as cubist.
     2. How to start your software.
     3. How to load a demo program that you provide.
     4. How to load one's own program.
     5. How to use any other facilities you provide.
     6. How to quit gracefully.
  Project Retrospective
     1. List of team members and what responsibility each one
        had.  Each person should have some individual
        responsibility.
     2. Biggest technical challenge faced by your group and
        how you met the challenge.
     3. What you learned from the project.
     4. What you would do differently if you were to do the
        project again under the same time constraints.
        What you would do if you had more time.
  Source Code Description
     1. List of the names and paths of all files of code you
        have written, For each file give a few words describing the
        purpose of the code in the file, and giving the name(s)
        of the team member(s) responsible for this file.
     2. URL or host + path for all your source code.
Topics Forms (Due Monday, Nov. 18 at Midnight)
Submit the following in a plain ASCII text email message to Steve: tanimoto@cs. Don't use attachments unless you need to submit a diagram.