Beautiful Racket
beautifulracket.com
beautifulracket.com
However, DrRacket the IDE was a huge pain for me. I often felt that what the language offered in power and sophistication, its development environment lacked.
So my question is: What about DrRacket didn't seem like enough for your project?
This is not clear, can someone explain please?
First, syntax objects are data, but with extra information, such as binding information, source location, etc.
Second, the #' form (written out it's called `syntax`) is similar to the ' form (written out as `quote`). But the first one includes the extra information to make a syntax object. Also, it has an extra character, which the chapter points out can be seen as going along with the extra information.
E:
I may have misparsed your question, upon re-reading it and had an overly liberal understanding of "solicit feedback". Apologies in advance if my answer isn't quite up the alley you were looking for.
Edit: Information is uncountable, so maybe data should as well be. Is that plural or singular? Yes, you can have sand and a grain of sand, but the grain is hardly sandy. A lone 1 is hardly, excuse the pun, dative.
the singular is 'datum'.
In Italian (the direct descendent of latin) there is both singular and plural for datum (singular: 'dato', plural: 'dati')
Edit: Interestingly, wiktionary says informations is just uncommon, and that information is not data, it's the meaning of data, in the computing context. ... with source. It links to a paper about an ISO standard, no less, that tries to define vocabulary and happens to use data as singular. Document Reader [is a] Character reader whose input data is the text from specific areas on a given type of form [1]. (This makes me so happy right now.)
Overall, if it's a technical term they invented, the authors are free to name their language construct whatever they want. But if it's so fudged that the author even writes datums ... I rest my case.
[1] https://www.iso.org/obp/ui/#iso:std:iso-iec:2382:ed-1:v1:en
But everyone writes about how to build these kinds of basic Forths, or Lisps, or reverse polish notation calculators. To be honest, once you've learned the basic technique, writing a toy dynamic language interpreter is pretty easy. Even adding a toy JIT isn't very hard, and there are multiple guides online on how to do this using Luajit, or Libjit, PyPy, or LLVM, etc.
What I want more than anything is a guide written on the same level on how to build a toy statically-typed language, with algebraic data types. And even better, some basic discussion on how to learn about implementing advanced techniques like refinement, or linear, or dependent types (I realize these are extremely complex topics).
Every discussion I find on these topics is in dense academic papers. I'm slowly making headway, but it's a slog.
The only good resource I've found so far (and it's an excellent one) is Andrej Bauer's Programming Languages Zoo. But as far as I know, it's all (very helpful and instructive) source code, with no accompanying tutorials.
Is there no very simple introduction on writing a simple ML, with type checking? Any recommended resources?
It's possible that Butterick intends to cover these topics in later chapters, in which case I can't wait to read the book.
Particularly an approachable intro to Hindley-Milner and building a toy/mini-ML, and type checking in general. All the better if it's in Racket, or some ML.
Actually, do you know of any examples of ML-type languages, or any statically-typed languages, that are written in Racket, aside from Typed Racket itself? Is looking at the Typed Racket code instructive? (I should just take a look)
http://www.cse.chalmers.se/edu/year/2015/course/DAT150/ http://www.cse.chalmers.se/edu/year/2015/course/DAT150/lectu...
ftp://ftp.cs.utexas.edu/pub/garbage/cs345/schintro-v14/schintro_toc.html
Yes, an ftp url.
One Hour ML https://vimeo.com/64593770
Algorithm W Step by Step http://catamorph.de/documents/AlgorithmW.pdf
Implementing functional languages http://research.microsoft.com/en-us/um/people/simonpj/Papers...
The Implementation of Functional Programming Languages http://research.microsoft.com/en-us/um/people/simonpj/Papers...
That said, the old Peyton Jones textbook that was referenced above looks pretty interesting. Might work through that one before I buy Types and Programming Languages.
The answers here might be useful: http://stackoverflow.com/questions/12532552/what-part-of-mil...
> Is there no very simple introduction on writing a simple ML, with type checking? Any recommended resources?
I'd recommend reading A. Field, P. Harrison, "Functional Programming". Despite the title, the book is about implementation techniques.
P.S. I keep suggesting to everyone interested in implementing type systems to use a very simple technique: find an embeddable Prolog compiler for your language of choice (e.g., MiniKanren for Racket), and then simply emit a flat list of Prolog equations out of your source language AST (do the lexical scoping pass first). Easy. And easily extendable to dependent typing and all that fancy stuff.
So, you represent the AST associations and type-checks as Prolog logic rules that operate on predicates describing the AST? And the inference engine runs through it to dump out true or false for various predicates and rules? Am I understanding it right?
Also, didn't realize Prolog could handle dependent types and such. That's neat to know.
Firstly, all the expression nodes must be annotated with type tags: 'A1:apply(A2:apply(A3:var("plus"),A4:var("x")), A5:const("2"))'.
Then your typing pass walking over this segment of AST would generate the following (mostly trivial) equations
A5=integer // from constant type
A4=Vx
A3=Vplus
A3=fun(integer, fun(integer, integer)) // from environment lookup
A3=fun(V1, A2) // application rule
A2=fun(V2, A1) // application rule
Then this long Prolog query (all equations are comma separated) is executed and you'll get all An type values to attach to your AST, as well as variable x type.> Prolog could handle dependent types
It's Turing-complete. You can encode anything you want in it.
Thanks for the example. That does seem straight-forward.
"It's Turing-complete. You can encode anything you want in it."
The reason I mention it is that many people doing proofs and such specifically avoid first-order logic in favor of HOL or Coq. They sometimes mention FOL is too limited or you have to go out of your way for what they're doing. Not specialist enough to have figured out what they're talking about. There appears, though, to be some cutoff point where one is better off using HOL-style tools for analysis, proof, synthesis, whatever. Wish I had references on-hand if it's not clear already what I'm talking about.
I don't quite understand this phrase "you'll get all An type values to attach to your AST". Do you just mean "all type values" or is "An type" a technical term?
This whole thread has been a huge boon to me, very glad for all the input.
https://github.com/soegaard/minipascal
There are two versions. The first one
https://github.com/soegaard/minipascal/blob/master/minipascal/compiler-simple.rkt
is without typechecking. The second one adds a type checker:https://github.com/soegaard/minipascal/blob/master/minipasca...