General plan for how the course will go.
Administrative stuff. (Most of the stuff from the web page.)
Why should we care about programming languages? (Any examples of big projects without a little language?)
What defines a language?
How important is each of these?
libraries give you the run-time support, not an important part of the language itself. (BTW, the line between “a library” and “part of the language” is less obvious than it seems.)
Yet another example:
How would you expect this code perform? How do you think it does in the reality of many uses of JS by people who are not really programmers?
(+ (vector-ref a 25) 5)(Racket: exception)
-> syntax is mostly in the cosmetics department; semantics is the real thing.
How should we talk about semantics?
A few well-known formalisms for semantics.
We will use programs to explain semantics: the best explanation is a program.
Ignore possible philosophical issues with circularity (but be aware of them). (Actually, they are solved: Scheme has a formal explanation that can be taken as a translation from Scheme to logic, which means that things that we write can be translated to logic.)
We will use Racket for many reasons (syntax, functional, practical, simple, formal, statically typed, environment).