CS 463 - Homework 10 - Language Writeup

due Monday April 29th 2024, 5:00pm. Late work is accepted by the usual policy.

Overview

This should be a fun assignment to do a bit of exploring, and end the semester on a strong note/good grade. Though it is due last, you can work on it sooner and get it out of the way if you'd like to clear out your end-of-semester schedule.

Each student will write about a different language of their choice (see below for details), and we will all describe some common characteristics. The idea is that we will have one main piazza post, where you pick a language, and then we will each create our own post, link it into the main post (not as followup threads, but editing the main post's "Student Answer"), and then we'll have a nice little handbook of languages. Maybe some industrious person can stitch it all together in to a single document afterwards, but that's of course the least time-sensitive thing on anyone's plate at the end of the semester.

Languages List Link: https://piazza.com/class/lrfdd5w0o4636r/post/6

Steps

  • claim a language by editing the main piazza post with your name (or if you want anonymity, list "Anonymous" in the table, and then privately piazza-post instructors who you are/what language you're writing about).
    • if a language isn't already on the list, you may request it, and if approved you may do that one.
  • research your language sufficiently, take notes, keep track of your resources, etc.
  • create a separate post that you curate with all the required details in it. You might want to start it as a private post (a note, not a question), keep adding to it, and when you're ready, make it public.
  • make your post public, and link your post to the main languages post with an @ tag for the post number. E.g., "@463".

Best-Effort

Many older languages, it will be harder to find these details - it's okay to state "unknown" for a few characteristics if the details escape you, but try your best to find them all!

Topics to Discuss

Timeline/Setting (30%)

  • History of the language - who developed it, by what committee, and so on. Dates of creation/definition/implementation vs dates of commonest usage, as you find relevant info.
  • Also, was there a specific usage in mind, or problem set for it to tackle? Who is the intended audience?
  • runtime tools: is it JVM/.NET accessible? what is a major implementation's path - was it implemented in C, assembly, itself, others?
  • Basically, give us whatever interesting details you find about the start of the language.

Characteristics (30%)

List out these properties for your language. It can just be a bulleted list.

  • programming paradigm. What is supported - imperative, declarative, OO, functional, logic, symbolic, or some mix?
  • interpreted, compiled? Both, a combination? Just-in-time?
  • typing: static / dynamic? explicit, implicit? strong, weak?
  • pure vs impure
  • lazy vs strict (or, is there any lazy component to the language worth mentioning?)
  • scoping: dynamic or static? (or ad-hoc?? unlikely…)
    • Are nested scopes allowed?
  • any interesting implementation details
    • parameter passing convention(s), how to use the various modes. Any details about stack manipulation (if there even is a stack) would be great to hear.
  • any class, module, struct, or abstract data type mechanisms available?
  • other defining details that you discover, or that make the language stand out

Discussion (40%)

Give an open-ended discussion that describes what makes the language interesting or unique. I expect this to be the most varied portion of the writeup.

  1. Include a "Hello, World" implementation.
  2. Write up one other basic program, such as one of the following. If there's a target purpose for the language, please focus on that purpose here. You don't have to be able to run the program (especially for older languages!), but if you can do so and run the output, that is helpful. Explain why the tools are unavailable or what the roadblock was in your attempting to get it installed. If you're concerned about what to do here, contact us ahead of time (and leave enough time for a response)
    • If you are presenting code you've found online here, be sure you record the source.
    • a search/sort implementation (not just a library call)
    • something that shows the flavor of the language - if it has a unique or most common domain of usage (like telecomm, designing hardware chips, etc), aim for that.
    • some other significant computation (implemented, not just a library call)
    • Give a brief example of I/O (to either show that it's easy, archaic, syntactically ugly, or whatever the case may be). Opening a file and reading in a list of numbers, and writing their sum in to another file, would be a simple example.
  3. Describe why you initially chose the language, and also why you either were happily surprised by the language ("file manipulation is so stupidly easy I was giggling in the library, getting glares from the other sleep deprived students"), or why you were let down by the language. ("the Go! language wasn't nearly as moving as I'd hoped. Would not purchase again.")

Overall, please consider each of these points in earnest, have fun, and pretend you're recording a class presentation in wiki format. If people comment on your post, please respond to questions as appropriate.

Sources!

You need to cite works and websites utilized here. Include reference numbers (e.g. [5]) and a bibliography of sorts so that it's clear where things came from. I'm not focusing on the exact format (APA vs MLA vs WWE vs whatever), but something that's organized and descriptive (with a link, most likely) is what I'd like to see here. Unless you are the designer and implementer and sole user of the language, you have to have sources. And if you are all those things, your language should have a language specification document and a user's guide to reference…

Extra discussion

You may post followup threads on anyone else's language to comment or ask questions, but do not edit the main post content. If you see something interesting, chime in! Perhaps we can have some fun content to give you a break from studying for other finals.

Available Languages

Students will pick a language from this list, and claim it on the main Languages Survey post on Piazza. Any attempts to steal a language from somebody else by removing their name from the piazza post will be obvious, because the editing history is preserved. Causing me headaches that way costs you points. (The worse the headache, the more points lost).

If you want to research a language not listed on the piazza post, I'm quite open to the idea, but I'll need to confirm it before you've got the green light to proceed. Any language used in assignments this semester is off limits. Choosing any on the list is an automatic accept.