For this assignment, you will be exploring a new programming language. The basic task is
to evaluate various features of the language, using the concepts you have learned in the
course.
Language Choice
You can choose one of these languages as the topic of your assignment:
o Clojure
o Erlang
o Julia
o OCaml
o Scala
You should learn the basics of your chosen programming language. I suggest you start with
a decent tutorial for the language: most languages have one or two. Watch for tutorials for
programmers: some will have tutorials for beginning programmers, which isn't you.
Report
Once you have learned the basic concepts of the language, write a 4–5 page report
summarizing its features (page count excludes diagrams/code examples; standard
formatting, single-spaced). This should be a generally well written essay-style report.
The report should summarize the features of the language using topics from the “Language
Features” part of the class (as appropriate). You should also discuss how this language
compares with other languages you have used.
You should think of the overall goal of your report as explaining the language to average
member of this class, so that they can get a better idea of what this language is good (and
bad) for.
To give you an idea of what kind of information should be included, I have provided
some sample outlines.
Deciding on an Outline
Here are some questions you can ask yourself to help you decide on an outline (and how to
approach your report):
o Based on your experience with Haskell and other languages, what is the one most
important thing about your language? What is the first thing you would tell a
friend who had no experience with your language but knew the others?
o How does this “most important thing” affect the programs you would write in the
language?
Of course you're welcome to (and probably should) modify these outlines as appropriate to
your language. You are free to mix-and-match topics as you like.
Types-First
1. Introduction
2. Type System
a. Built-in types
b. Objects
c. Type system features [strong/weak, static/dynamic, etc.]
3. Memory Management
4. Other Interesting Features
5. Comparison with Other Languages
6. Conclusion
Paradigm-First
1. Introduction
2. Programming Paradigm
a. Dominant Paradigm
b. Other Paradigms [… that are possible to use in the language]
3. Data Manipulation [Given the paradigm, how are calculations done?]
4. Other Interesting Features
5. Comparison with Other Languages
6. Conclusion
Usage-First
1. Introduction
2. Common Uses [projects, fields that use this language]
a. Projects [or fields/areas/subjects that use this language]
b. Strengths [why this language is chosen: fast? easy? types? tools?]
c. Weaknesses [why this language might not be chosen]
3. Other Interesting Features
4. Comparison with Other Languages
5. Conclusion
Exercises
You should also create re-implementations of some of the exercises, to help you compare
(at least) your chosen language and Haskell. You can ignore any implementation details
required by the exercise (like “recursive” or “using foldl”): just create a function/method
that calculates the same result. Write implementations of these functions:
o Exercise2: the divisors, primes, join, and pythagorean functions.
o Exercise3: mergesort (and thus probably also merge). For mergesort, be as general
as you can with one implementation in your language: don't worry about being
able to sort every type if that's difficult.
o Also Exercise3: isPrimeDay and isFriday, using whatever date types are available
in your language
Of course, you should adapt the data types and argument/return values as appropriate to
your language.
Provide a main function (or whatever the code that runs first is called in your language) to
demonstrate calling these functions/methods.
Sample Programs
You should write some additional sample programs in the language. These programs
should demonstrate the critical features of the language as well as its strengths.
These programs are up to you. They do not have be large projects: you should have
probably 3 or 4 examples that are a little more involved than a weekly exercise question.
Try to provide at least one example of a problem that your language solves better (faster,
more elegantly, etc.) than Haskell or C++. Look for another where it's worse.
Of course, these programs should be your work, not examples from tutorials or Wikipedia.
Please comment your code well enough that we can figure out what it's supposed to be
doing.