1. 29

  2. 11

    Very easy to read, but is this really PLT? Feels more like PLI (Programming Language Implementation), a useful study, but it doesn’t quite prepare you to discuss the fringes.

    An excellent PLT introduction is Iverson’s Notation as a Tool of Thought which can really get you thinking about the use and value of good notation (syntax).

    Another piece I like recommending is Moseley and Marks Out of the Tar Pit which correctly identifies the most valuable area of research in programming language theory is addressing complexity.

    If these feel too advanced, try printing them out and reading them away from your computer.

    There are a lot of good resources once you are strong with computer science fundamentals, and I appreciate the want to skip ahead and jump right into the design and implementation of the software you’re dreaming of, but you’ll get much more out of it when you’re a better programmer.

    Finally: The decision to bring a new programming language into the world is not one to be taken lightly. We have quite a lot of them already, and I’m of the opinion that study of other - stranger languages is a better use of the young journeyman’s time.

    1. 8

      I agree about the naming, but at least in my (albeit limited) experience I think implementation can actually be the most gentle entry point to theory. I like learning about PLT because it’s fun, and I’m not sure it would have seemed that way if I started off with the theory itself. Since then, theory has become more digestible. But the rush of having made my own language that did something cool and nontrivial was a big part of me making it there.

      1. 3

        That is a really good point. Building something cool is motivational, so maybe add some next steps to dig into the real theory stuff? Help build why they just did things the way they just did it (and not some other way) might help get them thinking the right way.

    2. 6

      I literally was so happy to see this post because (a) I’m glad to see this information being more widespread and (b) it’s exactly what I learned in my recent PL class.

      You might imagine my surprise that it turned out to be my recent PL class… Hi Mark! (It’s Charles)

      1. 4

        Haha, hey Charles! CS221 for life :)

        P.S. any interest in hacking on a monadic SNAPE? DM me if so!

      2. 4

        Minor adjustment: what was written here is mostly an interpreter. It’s probably worth noting the idea of a compiler targeting some other language (possibly a machine language). The idea of comparative linguistics and translation is important to introduce in any intro to PLT writeup.

        1. 2

          Good call. When actually writing interpreters (for example, the majority of my PL class), the two terms often get conflated.

        2. 2

          Awesome article!

          Clojure and ClojureScript compile to JVM bytecode and JavaScript, respectively. In contrast, an interpreter directly executes the input code. Some popular interpreted languages are JavaScript, Python, and Ruby.

          To be fair, Python gets compiled to bytecode too, so if it’s interpreted then so are JVM languages.

          1. 2

            There was a good discussion of this a while back: https://lobste.rs/s/21ik7o/are_there_any_interpreted_languages