(www.brinckerhoff.org) CSC 430, Spring 2025

ROAM_REFS: https://www.brinckerhoff.org/clements/2254-csc430/index.html

** CSC 430, Spring 2025

Schedule/Homeworks

lab number submission servlet

Hints on Using Typed Racket in CSC 430

Helpful Tidbits

Using Map

Textbook

PLAI TR Translation

Common Assignment Errors

Debugging in Racket

* Welcome!

Here we are at the almost-nearly-end of another year, gee whiz. Spring! Only one more quarter! You've got this!

As always, our highest-level goal is to make the world a better place, and to make you happier, healthier, and better able to make the world a better place yourselves.

So, what exactly does that have to do with programming languages? Well, the tools and ideas of programming languages can be deep ones that affect the way you work and think for the rest of your life. Or, at a much lower level, maybe we can help you write programs a bit more carefully and correctly. It's up to you!

* About the Course

Programming languages determine what programs we can write. Languages with nice abstractions allow us to write elegant, concise, and readable programs.

In this class, we'll start from scratch, and build a programming language by adding only what's necessary. What we'll discover is that this simplistic approach leads to some really powerful abstractions. You can do more with less!

At the end of the course, you should be a better programmer. You should also have a clearer picture of a given language as a choice in a larger design space, and be better able to understand new programming languages and the similarities between them. Finally, you may develop some taste for what you like in a programming language.

This course will involve lots of programming in Racket. I choose Racket for several reasons. First, “functional” programming languages make this kind of course feasible. Writing a series of interpreters in another language would probably involve a whole lot more code. Second, Racket is a wonderful, beautiful language that is probably pretty dramatically different from other languages that you've used. (You can tell I'm totally not biased at all.) Finally, as one of the developers of Racket, running this course in Racket creates a positive feedback loop; your experiences can help to improve the language, especially since Racket is a language that can easily be extended and updated. If these reasons don't make sense to you, then… perhaps you need to take the course!

* Learning Outcomes

Here are the course outcomes that I'm striving for:

** Bonus Topics

We usually get to one of these:

* Prerequisites

In order to take this course you must be able to design and implement small programs (~ 1 KLOC) efficiently. You must have a basic understanding of mathematics and data structures. You should be able to reduce arithmetic expressions by hand, in a small-step style (that is, one step at a time). You should be able to identify statements and expressions in a programming language such as Python. Actually, scratch the "such as"; in order to present examples in class, we are planning to use Python as the language that we assume that you already know. If you can't read Python code, please let us know and we will try to accommodate your skillset by providing resources to get you up to speed in Python.

Local Graph

org-roam 8f73a589-db3d-4bff-84b4-19ce6510dae8 (www.brinckerhoff.org) CSC 430, Sprin... //www.brinckerhoff.org/clements/2254-csc430/schedule.html https://www.brinckerhoff.org/clements/2254-csc430/schedule.html 8f73a589-db3d-4bff-84b4-19ce6510dae8->//www.brinckerhoff.org/clements/2254-csc430/schedule.html //handin-1.brinckerhoff.org/servlets/standalone.rkt https://handin-1.brinckerhoff.org/servlets/standalone.rkt 8f73a589-db3d-4bff-84b4-19ce6510dae8->//handin-1.brinckerhoff.org/servlets/standalone.rkt //www.brinckerhoff.org/clements/2254-csc430/Assignments/tr-notes.html https://www.brinckerhoff.org/clements/2254-csc430/Assignments/tr-notes.html 8f73a589-db3d-4bff-84b4-19ce6510dae8->//www.brinckerhoff.org/clements/2254-csc430/Assignments/tr-notes.html //www.brinckerhoff.org/clements/2254-csc430/CodeFromClass/helpful-tidbits.html https://www.brinckerhoff.org/clements/2254-csc430/CodeFromClass/helpful-tidbits.html 8f73a589-db3d-4bff-84b4-19ce6510dae8->//www.brinckerhoff.org/clements/2254-csc430/CodeFromClass/helpful-tidbits.html //www.brinckerhoff.org/clements/2254-csc430/Files/map-examples.html https://www.brinckerhoff.org/clements/2254-csc430/Files/map-examples.html 8f73a589-db3d-4bff-84b4-19ce6510dae8->//www.brinckerhoff.org/clements/2254-csc430/Files/map-examples.html //cs.brown.edu/courses/cs173/2012/book/ http://cs.brown.edu/courses/cs173/2012/book/ 8f73a589-db3d-4bff-84b4-19ce6510dae8->//cs.brown.edu/courses/cs173/2012/book/ //www.brinckerhoff.org/clements/2254-csc430/CodeFromClass/PLAI-TR-translation.rkt https://www.brinckerhoff.org/clements/2254-csc430/CodeFromClass/PLAI-TR-translation.rkt 8f73a589-db3d-4bff-84b4-19ce6510dae8->//www.brinckerhoff.org/clements/2254-csc430/CodeFromClass/PLAI-TR-translation.rkt //www.brinckerhoff.org/clements/2254-csc430/common-assignment-errors.html https://www.brinckerhoff.org/clements/2254-csc430/common-assignment-errors.html 8f73a589-db3d-4bff-84b4-19ce6510dae8->//www.brinckerhoff.org/clements/2254-csc430/common-assignment-errors.html //www.brinckerhoff.org/clements/2254-csc430/Files/debugging-in-racket.html https://www.brinckerhoff.org/clements/2254-csc430/Files/debugging-in-racket.html 8f73a589-db3d-4bff-84b4-19ce6510dae8->//www.brinckerhoff.org/clements/2254-csc430/Files/debugging-in-racket.html 2a07e4ea-610b-4c9a-bb84-d961fb2450e5 Code and Coffee Book Club 2a07e4ea-610b-4c9a-bb84-d961fb2450e5->8f73a589-db3d-4bff-84b4-19ce6510dae8