Discovering a New Language, CSC430, Spring 2026
1 Goal
Work with a team to re-do as much of assignment 4 as possible in 5 hours per person using a host language we choose for you randomly, and present the results in class.
2 Teams
There are a number of different ways you could collaborate on this assignment. You should probably use some kind of repository. If you all use github, that’s fine—there’s no need to make the code you write for this project private—but you can also collaborate in other ways.
NB: Except please please please please don’t put your code from earlier assignments in a public repo. You knew that, right?
3 What to Implement
Your goal is to implement assignment 4 in the language that you’ve been assigned, and to learn about the language you’ve been assigned.
3.1 Parsing
Some languages are better-suited for parsing than others. For this reason, I strongly suggest doing the parser last, or (more likely) not doing it at all.
Specifically, most languages don’t have s-expressions, or anything terribly similar. In dynamic languages like JavaScript, Python, and Ruby, you can model these using arrays. So, for instance, in JavaScript you might write
['var', ['z','=',14], ['+', 'z', 'z']] |
which is a heck of a lot longer than
{var {z = 14} {+ z z}} |
3.2 Interpretation
The interpreter is the important part of the assignment. You should focus on developing a representation of an AST, and writing the interp function.
Please note that you do absolutely have to write some kind of test cases.
4 Time Limit
No person may spend more than five hours implementing this project. This does not include time spent downloading and installing an IDE or compiler, but it does include time spent on "hello world" tutorials and such.
Please note: You are not going to get very far in five hours!
That’s okay. It’s not about completion. It’s about having a good time, getting to know a bit about another language, and thinking a bit about why you might (or might not) choose the language for a project.
It’s also an interesting "sprint" exercise in making the most of a short period of time.
You may wonder how much of your time should be overlapping, and it may occur to you that you can maximize your code completion by relay-racing; that is, I do five hours and then hand the baton off to you, etc. I would encourage you *not* to do this; it’s nearly certain to create misunderstandings, and to block opportunities to work together, correct each others’ issues, and actually get to know some human beings. I certainly don’t require you to be in the same place while you’re working, or to strictly synchronize your work, but I would strongly encourage you to maximize the time you’re working with each other.
After you’re done implementing, you may spend up to half an hour per person assembling your presentation.
5 AI use
Using GenAI will allow you to generate code much more quickly. On the other hand, you may not really understand what that code is doing. On this assignment, you are allowed to use GenAI, but you must disclose that use. In fact, that’s the first part of the presentation.
Whether or not you use GenAI, you must verify that your code works.
6 Presentation
Rather than handing anything in, you will be making a six-minute presentation of your work in class. One of your team should bring a laptop for the presentation, or contact your instructor if none of the team members has a laptop that will work for the presentation.
Did you use Generative AI for this assignment? If not, feel free to brag. If so, which tools did you use, and what were they good at and what were they bad at? How much interaction was required to get something working?
Next, give an overview of the language: who designed it, how old is it, how popular is it, what is it good for?
Very briefly, summarize how much of the interpreter you were able to implement. This will vary dramatically, depending on your implementation language.
Your code. Begin with the test cases, starting with small ones. Present them in a large enough font to be readable from the back of the room. This will help your audience to understand how your code is structured. Then show your data definitions, and finally your functions. This should take about two minutes. You’re not going to get through all the code, so you’ll want to focus on one or two specific tests, a very brief overview of the data definitions, and then a look at the heart of the interpreter. Do not spend more than two minutes on your own code; this will take timed practice. You must keep this section under control so you will have time to finish your presentation before your time runs out.
A tiny demo. Ideally, run the test cases you presented, and show the results. The point here is just to show that the code you wrote actually runs. This part should be 30 seconds max.
A description of the language’s values: does it have objects? closures? strings? symbols? numbers? Other weird things? Highlight things that are interesting or unusual.
A description of the language’s syntax and scoping: are there statements, distinct from expressions? How does the scoping of variables, functions, classes, and methods work? Again, highlight things that are interesting or unusual.
If you have any insight into the language’s type system, you’re welcome to share that.
Finally, would you consider taking a job involving writing code in this language?
Your presentation is the only deliverable for this project.
7 Scoring
10: Your effort score assigned by your teammates
10: The quality of your code (not its completeness), and your observations
10: Your presentation, including finishing within the 6 minute time limit