Final Project


Introduction

In this course, we have studied three languages (Ruby, Haskell, and Prolog) at some level of depth, and we have discussed many others in passing. The objective of this project is to become familiar with another modern language that interests you but that we have not examined in detail during this course.

Instructions

Choose a language that interests you. The following languages are not valid choices for this assignment, due to the fact that either 1) we've covered them in this course, or 2) there are other JMU courses that cover them:

  • C/C++
  • Haskell
  • Java
  • Prolog
  • Python
  • Ruby

You must choose a language that has an active community (i.e., not a "dead" language) and is not a "joke" language (e.g., Whitespace or BrainFuck). Languages will be claimed first-come-first-served as soon as the Piazza thread has been started. Post your language on the thread after verifing that no one else has already claimed it. If you choose a language that was originally released before 1990, please focus your research on the more recent versions of the language (preferably a version released in the past ten years).

You should create a short (5-7 slides) presentation on the language of your choice, and submit it by the deadline. You may submit it as a LibreOffice Impress presentation (preferred), a PDF, or a MS PowerPoint presentation.

Your presentation should contain the following information:

  • Your language's name and a brief history of it. Who originally invented it, and what was its intended purpose? What (if any) companies have been involved in its development? What are its direct ancestors or major influences? Has it influenced any descendant or spin-off languages?
  • What platform(s) is it available on? Does it have a large standard library? How and where is it commonly used, and what other languages or technologies is it often used with?
  • Is the language procedural? Functional? Object-oriented? Is it used as a scripting language? Is it compiled, interpreted, or both?
  • How robust is the type system? Is the language strongly-typed? Does it support static type checking? Duck typing? Does it support generic containers? Does it have any unique data types?
  • Does it provide built-in support for any of the following: concurrency, graphical user interfaces, network communication, high-precision math, automatic memory management, or first-class functions?
  • Include 2-3 short programs in your language, demonstrating any interesting features of its syntax or semantics. Try to make these programs slightly more complicated than "hello, world" examples, but make sure they fit on a single slide and are easily digestible. Include comments where appropriate.
  • Any other interesting/unique attributes or behaviors that you find while experimenting with the language.

Here are some recommended algorithms to implement in your language (although not all of these make sense in every type of language):

If you wish, you may build your presentation using the following template:

If you wind up collecting a lot of information and it cannot fit into 5-7 slides, feel free to assemble an additional document and submit it separately via email. This would be particularly appropriate if you wrote a significant amount of code as part of your investigation.

This project will count as a programming assignment and will be graded based on the correctness and thoroughness of your investigation and presentation. A part (~20%) of the grade will be based on the quality of your in-class talk on the designated presentation day.

For full credit, you must attend the designated class presentation period (April 28) to give a short (3-5 minutes or less) talk about your language. The talk should not be a comprehensive overview of the language, but rather should be a very succinct description of the unique qualities and features of your chosen language, in the context of everything we've talked about this semester.

Deliverable Requirements

Submit your presentation file on Canvas by 11:59 pm on Friday, April 24, 2015, and be prepared to give a short (3-5 min) talk about it on April 28. Please include your name on the first slide. If you wish to submit additional documentation or code, please email it to me separately.

The programming project penalties DO NOT apply to this project; you will not receive any credit for a late submission.