CS 331 Spring 2020 > Project Description
CS 331 Spring 2020
Project Description
The Project is due at 9 pm Sunday, April 26. It is worth 100 points.
Procedures
The project may be done individually or in a group of two students.
As soon as possible, e-mail me indicating whether your will be working alone or whom you will be working with, and proposing a programming language for your project. I will reply, telling you whether your programming language is approved.
By the due date, turn in your report in PDF form on the UA Blackboard Learn site, under Semester Project for this class. Only one student in a group needs to turn in the project; under normal circumstances, all group members will receive the same grade.
What To Do
Write a report introducing your PL to someone who is unfamiliar with it—roughly along the lines of the introduction I have given in class for Lua, Haskell, etc, but in the form of a written report.
You may assume your reader is a knowledgable programmer who is familiar with all of the terminology we use in class.
After reading your report, the reader should have a good idea of:
- What the PL is like: where it came from, what kind of PL it is, what it is good for, what code in the PL looks like, what the PL's type system is like, what you (the author) think of the PL.
- How to obtain the PL and its documentation.
- How one writes and executes code in the PL.
- What interesting or unusual features the PL has.
Topics To Cover
You must cover:
- The PL’s type system.
- How code is executed.
Here are examples of things you might discuss. You do not need to cover them all. I have subdivided them into three categories.
- Overview
- Build and Execution
- Special Features
1. Overview
Here are examples of things you might discuss. (You do not need to cover them all.)
- History. Where did the programming language come from? Who invented it? When? Why? Is it popular? Was it ever? Does it have many versions, or just one? Is it currently maintained? Very well? Does it have a recognized standard?
- Overall Characteristics. What programming-language category or categories does it fit in? (Functional? Concatenative? Dynamic?) Does it support any particular programming styles (Object-oriented?) Is it typically compiled? To machine code? To some interpreted byte code? JIT compiled? Is it typically used interactively? Descripe the programming language’s type system. Is the programming language aimed at some particular application (graphics, sound, web scripting, scientific modeling, control of automated systems, text processing, statistics, education, games, etc.)?
- Your Opinion. Is this a well-designed PL? Is it well supported? It is easy to obtain? Is it kept up to date? Is it convenient to use? Do you recommend it?
You must describe your programming language’s type system.
2. Build and Execution
Describe the entire process of writing source code, turning it into something executable, and executing it.
3. Special Features
What is special about this programming language? Here are some possible features to mention.
- I/O (including graphics, sound, etc.).
- Support for concurrency or paralellism (threads/fibers/strands, SIMD/vector computation, actors, distributed execution, etc.).
- Advanced numerical capabilities.
- Support for OOP.
- String handling.
- Support for abstract mathematical operations.
- Error handling.
- Advanced containers.
- Support for reflection.
- Unusual execution methods (lazy evaluation, resolution/backtracking, etc.).
- Other interesting constructs (monads, comprehensions, guard objects, pattern matching, generators, macros, regular expressions, etc.).
Other Issues
Length—Generally, 2 pages is too short, and 20 pages is probably too long. However, I am more interested in getting a good overview of a PL than I am in you reaching some arbitrary minimum length. Saying something in ten words, when you could have said it just as well in three, is not going to gain you any favor. Consider the amount and depth of information about a PL that I convey in class (in both slides and discussion), and then do something like that in written form.
Quality Writing—Be sure to use good grammar and complete sentences with proper punctuation.
Terminology—Use terminology and notation correctly. Definitions of many terms are given in the slides; make use of these. And if a term exists, then use it; for example, rather than writing, “Types are determined, and type compatibility is checked, when the code involving these types is executed,” it is better to write, “This PL uses dynamic typing.”
Readability—Avoid writing a “wall of text”. Break up your report with headings and subheadings. Break up sections into natural paragraphs. Do not write over-long sentences. Make use of bulleted or numbered lists.
Possible Programming Languages
Your programming language must meet the following requirements.
- It should be an actual programming language. So not CSS, HDL, HTML, JSON, SGML, SQL, XML.
- It should not be a regular part of the UAF/UAA C.S. curricula. So not Assembly (of any kind, unless special-purpose), C, C++, Forth, GLSL, Haskell, Java, JavaScript, Lua, PostScript, Prolog , Scheme.
- It should not be among the top twelve on the TIOBE Programming Community Index for March 2020. So the following are also ruled out: Python, C#, Visual Basic, PHP, Go, R.
- It should be intended for use by real people to do real work. No “esoteric” programming languages. So nothing on this list.
- You must be able to write, build, and execute code in this PL on an actual computer. (And by “you”, I mean you, not some hypothetical person.)
Try to choose a programming language that is a little off the beaten path, or one that used to be popular, but has fallen by the wayside. This still leaves a huge number of choices. The Fledgling Languages List is a good place to look for ideas.
Some programming languages to consider are listed below. I do not have a working knowledge of all of these. Some of them might turn out to be poor choices for a project. If some programming language interests you, then check it out!
Crossed-out items are programming languages that have been assigned to a group.
|
|
|