summaryrefslogtreecommitdiff
path: root/soplt.html
diff options
context:
space:
mode:
Diffstat (limited to 'soplt.html')
-rw-r--r--soplt.html19
1 files changed, 9 insertions, 10 deletions
diff --git a/soplt.html b/soplt.html
index c26608c..0835c4b 100644
--- a/soplt.html
+++ b/soplt.html
@@ -1,13 +1,9 @@
<!DOCTYPE html>
-<html lang="en">
+<html>
<head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Summer of PLT</title>
-
- <link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="prose.css">
- <script src="toc.js"></script>
+ <script src="article.js"></script>
</head>
<body>
<div class="content">
@@ -18,15 +14,16 @@
<p>Looking for a summer coding project? Try making a programming language!</p>
<p>I think that every programmer, new or experienced, could benefit from understanding a little bit about how the languages they use daily actually work.</p>
<p>As such, this is my collection of resources that I used to teach myself a little bit of Programming Language Theory last summer, which concluded in my creation of <a href="https://github.com/bluedragon1221/ci">CI lisp</a>.</p>
- <p>I'm planning on doing something similar this summer, so I figured I'd invite other people to try a 'Summer of PLT' too.</p>
+ <p>I'm planning on doing something similar this summer, so I figured I'd invite other people to try a 'Summer of PLT' too.</p>
<p class="comment">Disclaimer: I'm just a guy with no formal education in PLT. Like <a href="https://danilafe.com/blog/i_love_programming_languages">Daniel Fedorin said</a>, I just <em>love the field of programming languages</em>.</p>
<h2 id="read">Read a Book</h2>
<p>
- If you're new to the field of programming languages, my first piece of advice is READ CRAFTING INTERPRETERS!
+ If you're new to the field of programming languages, my first piece of advice is to read Crafting Interpreters!
<span style="color: #666">(or at least the first section, "A Treewalking Interpreter")</span>
In my opinion, there is no better way to break into the field of PLT than by reading Bob Nystrom's book on the subject: <a href="https://craftinginterpreters.com">Crafting Interpreters</a>.
- There's also a free HTML version on his site if you don't feel like paying money.</p>
+ There's also a free HTML version on his site if you don't feel like paying money.
+ </p>
<p>After that, I would suggest looking into Lisp.</p>
@@ -38,9 +35,10 @@
<p class="comment">Alternatively, you could consider going down the Emacs rabbit hole to teach yourself lisp. In the Emacs environment, you'll quickly gain proficiency with the parentheses, but you'll probably lose at least a few weeks in the process.</p>
<p>Theory-wise, I would recommend reading the original John McCarthy Lisp paper (be prepared for dense academic writing though): <a href="https://www.cs.tufts.edu/~nr/cs257/archive/john-mccarthy/recursive.pdf">Recursive Functions of Symbolic Expressions and Their Computation by Machine</a>.</p>
+ <p>Additionally, many suggest the book <a href="https://mitp-content-server.mit.edu/books/content/sectbyfn/books_pres_0/6515/sicp.zip/index.html">Structure and Interpretation of Computer Programs</a>, which also includes some </p>
+
<p>The C2 lisp rant is also a fun read (but by no means required): <a href="https://wiki.c2.com/?LostInaSeaofParentheses">Lost Ina Seaof Parentheses</a>.</p>
-
<p>If you want more of a guided, handhold-y tutorial for making a lisp clone, I can only recommend <a href="https://github.com/kanaka/mal">mal - Make a Lisp</a>. I personally have not gone through it, but I've heard good things.</p>
<p class="comment">Alternatively, ask an LLM to help you learn how programming languages work. Just make sure that you're actually learning, not just copying whatever it says to do. Try something like "Don't give me any code, just explain to me..."</p>
@@ -58,6 +56,7 @@
<h3 id="monads">Monadic IO</h3>
<p>Also on the theory-heavy side, you could learn about Haskell's system for safe IO operations which use monads.</p>
<p>This paper on the subject (discovered on the Haskell wiki) is a pretty dense, but has all of the foundational ideas for Monadic IO in Haskell: <a href="https://web.archive.org/web/20140303101716/http://www-fp.dcs.st-and.ac.uk/~kh/papers/io-tutorial/io-tutorial.html">Monadic I/O in Haskell 1.3</a>.</p>
+ <p>The foundational ideas of Monads are well explained in <a href="https://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf">Monads for functional programming</a> by Phillip Wadler. I found this paper easier to understand than the prior one, and it gives you a great intuition for <em>why</em> Monads are cool. Definitely read this one!</p>
<h3 id="sugar">Syntactic Sugar</h3>
<p>