Sign up ×

I'm interested in learning more about programming languages. In particular, I'd like to look at some of the new developments in programming languages (even the really obscure ones that only academics care about). I need to learn to read grammar specifications, as well. Where should I begin?

share|improve this question



3 Answers 3

up vote 9 down vote accepted

A good place to start your studies in programming language design is with Van Roy and Haridi's Concepts, Techniques, and Models of Computer Programming. For instance, Programming Paradigms for Dummies: What Every Programmer Should Know.

Lambda the Ultimate is a forum dedicated to studying programming languages, so should prove a pretty good place to read about the cutting edge of the field of language design.

share|improve this answer
+1 for Lambda the Ultimate - IIRC they have a page of links to basic theory stuff – Steve314 Jan 16 '11 at 19:24
Lambda the Ultimate is excellent! – syrion Feb 3 '11 at 16:34

If you are serious about learning in-depth stuff, I would recommend watching the MIT OpenCourseWare class on the subject.

Course description:

6.821 teaches the principles of functional, imperative, and logic programming languages. Topics covered include: meta-circular interpreters, semantics (operational and denotational), type systems (polymorphism, inference, and abstract types), object oriented programming, modules, and multiprocessing. The course involves substantial programming assignments and problem sets as well as a significant amount of reading. The course uses the Scheme+ programming language for all of its assignments.

share|improve this answer

The dragon book is a great practical intro.

It doesn't cover what makes a programming language suitable/usable for a particular task, and was written before most modern languages, but it does introduce the major sub-disciplines that lie between code and a running program. Read it and you'll be well prepared to understand more recent developments in sub-fields like:

  1. Notation: the notations used for grammars like Backus-Naur form,
  2. Grammar Theory: a bit on Chomsky's hierarchy of grammars and getting used to thinking of a language as a set of strings with associated semantics.
  3. Lexing: the distinction between lexers (operators over token stream) and grammars,
  4. Parsing: how grammars are converted to parse trees,
  5. Inspecting: how to perform optimizations on parse trees, derive symbol tables, and the like
  6. Pre-compiling: how to convert parse trees to a variety of intermediate forms (like three-operand form) that have the structure of a real instruction set, but without the architecture-specific assumptions,
  7. Optimization: converting programs into simpler/more-efficient but equivalent programs
  8. Binary generation: how to convert those intermediate forms into actual instructions that can be run by a processor or virtual machine

The dragon book doesn't cover modern type systems, formal semantics, or other tools that assist in program correctness. For a great introduction to type systems and formal reasoning, see "Types And Programming Languages" by B. Pierce.

Once you understand the role each of the various sub-fields play, you should start searching for papers titled "Survey of ... in programming languages" and "Recent developments in programming languages for ...".

share|improve this answer
+1 Dragon book is indeed a good book on compilers and their principle components. As the book is quite old now, it will not lend to current developments, but a good grounding. Just realised I first read that over 11 years ago, time flies! – Orbling Jan 16 '11 at 18:41
would you mind explaining more on what it does and why do you recommend it as answering the question asked? "Link-only answers" are not quite welcome at Stack Exchange – gnat Jul 15 '13 at 3:15
@gnat, please see my rewrite. – Mike Samuel Jul 15 '13 at 15:44
