[HN Gopher] Creating Languages in Racket (2011)
       ___________________________________________________________________
        
       Creating Languages in Racket (2011)
        
       Author : b-man
       Score  : 115 points
       Date   : 2021-02-03 00:05 UTC (22 hours ago)
        
 (HTM) web link (queue.acm.org)
 (TXT) w3m dump (queue.acm.org)
        
       | ralphc wrote:
       | Would this, or something else, be a good solution for producing
       | XML-based output, similar to an HTML templating language?
        
         | samth wrote:
         | Yes, I think the `xml` library in Racket is quite nice for
         | generating XML and XML-like content: https://docs.racket-
         | lang.org/xml/
        
       | tenaciousDaniel wrote:
       | I'm currently trying to create a language but have never done it
       | before. I'm a web developer, so I'm writing some reduced test
       | cases in Node, but I seriously doubt that I'd use it for actual
       | parsing.
       | 
       | Racket seems like a good choice; have never heard of it before.
       | Anyone know the pros/cons/alternatives?
        
         | soegaard wrote:
         | Check 1.3 and 1.4 at https://school.racket-
         | lang.org/2019/plan/mon-mor-lecture.htm... to get an idea.
        
         | skohan wrote:
         | I'm working on a language also, it's a lot of fun!
         | 
         | What's yours about?
        
           | tenaciousDaniel wrote:
           | I'm trying to build a language for UI designers. The goal is
           | to give them a very easy language that allows them to
           | describe visual behavior using grammar and concepts that are
           | familiar to them.
           | 
           | Entirely declarative, low-tech, almost like pseudo-code.
        
             | gglitch wrote:
             | I hope to hear more about your project. And fwiw, my very
             | limited experience suggests that Racket may be a great way
             | to start.
        
       | phonebucket wrote:
       | People interested in language design and learning Racket in one
       | book might enjoy this book https://beautifulracket.com/
       | 
       | Edit: Also Programming Languages: Application and Interpretation,
       | which I haven't been through yet, so can't endorse fully:
       | https://cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-0...
        
         | joubert wrote:
         | More books: https://racket-lang.org/books.html
        
       | submeta wrote:
       | Is it common to use the Racket IDE or is Emacs equally suitable?
       | So anyone using Emacs to program in Racket Scheme?
        
         | swatson741 wrote:
         | DrRacket is a pretty good IDE but, it doesn't have the
         | flexibility and consistency of Emacs. A lot learning material
         | for Racket features the DrRacket IDE.
        
         | JasonFruit wrote:
         | Racket's IDE is pretty good, but it doesn't match the pure
         | editing facilities of Emacs, and racket-mode supplies similar
         | functionality. I use exclusively Emacs for Racket, and other
         | Scheme-like languages.
        
         | Decabytes wrote:
         | I find it easier to trace errors in DrRacket than racket-mode,
         | but use Emacs for 95% of my Racket coding
        
         | spdegabrielle wrote:
         | As the other commenters have mentioned, Racket Mode is
         | excellent, especially racket-xp-mode: "An optional minor mode
         | that enhances racket-mode to explain and explore code."
         | https://www.racket-mode.com/#racket_002dxp_002dmode
         | 
         | The other thing worth mentioning is Racketeers often use their
         | favourite editor, only switching to DrRacket or Racket Mode
         | when they need specific functionality.
        
         | ywei3410 wrote:
         | Emacs is fine; Racket mode is very good [1]; but DrRacket is
         | worth a spin if you're unfamiliar with the language/ideas.
         | 
         | [1] https://www.racket-mode.com/
        
         | cnasc wrote:
         | I find Emacs with racket-mode much better for editing, but
         | DrRacket has some really nifty IDE features that racket-mode
         | doesn't have. I probably split 80/20 between them
        
       | velcrovan wrote:
       | After attending Racket School in 2019, I was able to do a Racket
       | implementation of Tabloid in a couple of days:
       | https://github.com/otherjoel/tabloid ...fun stuff!
        
       | bmitc wrote:
       | I really wish the Racket team would write a book on Racket's
       | language making capabilities, or create a MOOC. I attended Racket
       | School 2019, and it was awesome. The material was well put
       | together and walked us through macros to #langs. But the only
       | published material to walk a person through macros and building
       | languages are _Fear of Macros_ and _Beautiful Racket_.
       | 
       | I have many ideas for little DSLs in Racket, but I am too slow
       | and am slogging my way through learning how to create them.
        
         | iainctduncan wrote:
         | It is certainly true that Racket has a ridiculously low number
         | of books on it that aren't textbooks. It's a real pity. I like
         | Racket a lot, but there is so little focus on use outside of
         | academia that I don't hold my breath on it becoming a
         | production appropriate tool for typical business software.
        
           | spdegabrielle wrote:
           | It's growing;
           | 
           | Racket Programming the Fun Way An introduction to the Racket
           | functional programming language and DrRacket development
           | environment to explore topics in mathematics (mostly
           | recreational) and computer science.
           | 
           | https://nostarch.com/racket-programming-fun-way
        
           | spdegabrielle wrote:
           | More books at https://racket-lang.org/books.html
        
         | disconcision wrote:
         | Agreed that a book would be great, but worth mentioning that
         | the course page for racketschool 2019 itself now provides the
         | current best intro to syntax/parse and DSL making in racket:
         | https://school.racket-lang.org/2019/plan/
        
           | bmitc wrote:
           | That's a good resource for sure, so thanks for pointing
           | people there. Basically, it would be great to take that
           | year's Racket School and turn it into an expanded and more
           | streamlined work.
        
         | Buttons840 wrote:
         | What do you think of https://beautifulracket.com/ ? Isn't it
         | exactly what you're asking for?
         | 
         | You seem to say, I wish there was a book on X, but there is
         | only this book on X. What more do you want? I don't mean that
         | rhetorically, what additional things would you like to see
         | covered?
        
           | nextos wrote:
           | Beautiful Racket is a really nice book.
           | 
           | I wish there was a long tutorial on DSLs + static analysis,
           | preferably abstract interpretation.
           | 
           | Develop a DSL that is a bit beyond a toy example, and show
           | how to carry out static analysis. All in one place.
           | 
           | I think this would help a lot towards making the goal of
           | Racket, language-oriented design, more popular.
        
           | Decabytes wrote:
           | I've worked through Beautiful Racket before, though it's been
           | awhile. I think my main issues are
           | 
           | 1. You need to install the Beautiful Racket package, which
           | makes the starting point for creating the languages easier,
           | but is not representative of how it's used in the Racket Docs
           | (not that I'm saying the Racket docs have a better intro)
           | 
           | 2. Uses Brain Fuck. It feels like there has to be a language
           | that fits in between unintelligible but easy to parse, and
           | extremely verbose and complex. (It's probably scheme but
           | that's taken in this context)
           | 
           | And sometimes I just need to see the same problem from a few
           | different angles before it will stick. That's why Greg's Fear
           | of Macros wasn't able to take me all the way to a comfortable
           | place with macros.
           | 
           | I think BR is a great book, and I definitely learned a lot
           | from it, I'll probably go back to it at some point to see if
           | I can get it to click. I've been on a Racket kick recently so
           | I've got a decent amount of hours into the language.
           | 
           | Also I'm always struck with a feeling when I'm coding in
           | Racket where I go "Would a dsl be good here?" I know Racket
           | makes it easy but I don't even know about what makes a _good_
           | dsl, or how certain dsls might be harder than other based on
           | the way Racket does L.O.P. Again this might just be from
           | inexperience.
           | 
           | Lastly I would also like to see some examples of typed
           | languages being created using typed Racket. I know there is
           | the Turnstile library, but from my understanding it makes it
           | easier to created typed languages, but that the possibility
           | was there before. I'd rather learn the hard unabstracted way
           | first before moving to using a library.
        
         | yaleL wrote:
         | I think using Racket should be avoided because of its
         | problematic community. I've had disgusting experiences
         | interacting with people from Racket community in the past, but
         | so far I thought I was the only one. Unfortunately, it doesn't
         | seem that way. Recently, a computer Scientist Leandro
         | Facchinetti described in his video his ugly experiences with
         | top people in Racket community. The experience was such that he
         | completely gave up his PHD and the use of Racket forever. You
         | can view the video here:
         | https://www.youtube.com/watch?v=_wY7FBtr7_c In the video
         | Leandro Facchinetti says: Speaking of people, it's very sad
         | that I had same bad experiences with some people in the Racket
         | community, especially the people up top because they are the
         | kind of people who are smart and they know about it and they
         | will not lose a chance to tell you. I'll give you some
         | examples: I was at the Racket conference having dinner with one
         | of the creators of the language and some other attendees and
         | the creator of the language had some very good points about
         | higher education and how it is kind of a scam in the U.S. but
         | to prove his point he decided some questions to the waiter that
         | were kind of uncomfortable and everyone at the table kind of
         | cringed. Of course, the waiter was gratious about it but
         | still... As another example, I was talking to another one of
         | the creators of the language and he called one of my
         | collaborators a doofus and the educators at my university,
         | which used to be John Hopkins University, a bunch of donkeys. I
         | understand that he had some points to make about how educators
         | work but this is not the way you make them, right?
         | 
         | It comes to a point that when I was talking to the students of
         | these people, they're kind of afraid of talking to their
         | advisors and I must admit that spending time with these people
         | is one of the reasons why I decided to drop out of the PHD and
         | leave academia all together, because if that's how it looks
         | like to be successful in these communities I think I prefer to
         | try to be successful somewhere else.
        
           | rscho wrote:
           | Seriously, do you have an email alert to come shit on racket
           | with the same comment on HN with a new username every time?
           | :-D
           | 
           | You must have had a really, really bad experience.
        
             | [deleted]
        
             | tartoran wrote:
             | Nice catch, this person really has a beef with the Racket
             | community [0]
             | 
             | https://news.ycombinator.com/item?id=25941867
        
           | tgbugs wrote:
           | I was sitting at that table during that conversation. I'm
           | sorry to hear that Leondro's experience was not a good one,
           | but he does not speak for everyone that was there, he may
           | have felt uncomfortable but he cannot speak for the others.
           | 
           | To paint a whole community based on those interactions is
           | completely unwarranted. There are political issues within the
           | Racket community as there are within any community, but they
           | are not the ones described here.
           | 
           | In point of fact, because of attitudes like the one expressed
           | by the parent certain extremely valuable, active, and long
           | standing members of the community have ceased to participate
           | publicly because of abuse they have received by, shall we
           | say, new incoming "waux" participants.
        
         | Decabytes wrote:
         | I feel exactly the same way. Racket considers this one of it's
         | killer features so they should be plastering it all across the
         | Internet.
        
         | ywei3410 wrote:
         | Hi,
         | 
         | What type of material would you like to see?
         | 
         | What parts of the API are you finding difficult?
        
         | rscho wrote:
         | There's this https://youtu.be/WQGh_NemRy4
         | 
         | Pretty basic, but it helped me a bit.
        
         | brooksbp wrote:
         | What about "Semantics Engineering with PLT Redex"?
        
         | ssivark wrote:
         | If you feel like sharing the ideas, I'm sure many people would
         | be interested in seeing potential example applications where
         | this (abstract and somewhat uncommon, in other languages)
         | capability can be put to good use.
        
           | srcreigh wrote:
           | You can go as complex as your own type system. One type
           | system was added to Racket called Typed Racket. No new
           | features were needed in the language or tooling, they just
           | used Racket macros to build a Racket with static compiler
           | errors which integrates with the IDE.
           | 
           | Two similar cases. One is Typescript. That's a new language
           | with different syntax, a new compiler which targets JS. It
           | also provides its own tooling for IDEs. Another is Python.
           | Over time there were PEPs to add syntax for type hints, and
           | now type systems are being added to the language.
           | 
           | When Racket did this, they were able to do it in Racket
           | without adding more features to the compiler or IDE. There's
           | built in support for static analysis, compiler errors, editor
           | integration. Not to mention a way to organize all the
           | information you need to do type checking in the compile
           | steps, and make that information accessible in the right
           | places. The new type safe Racket was built using plain ol
           | Racket.
           | 
           | There's a reasonably accessible paper about this here:
           | https://www2.ccs.neu.edu/racket/pubs/scheme2007-ctf.pdf
           | 
           | So here are some of my ideas:
           | 
           | 1. Play around with static analysis checks. I want to rebuild
           | Typescript style structural inference to Racket. I like how
           | TS is unsound (has no runtime performance penalty for mixing
           | untyped code), and is easily disabled via any if it's in the
           | way. I love the focus on great error messages. Maybe one day
           | I will contribute to Typed Racket :)
           | 
           | Making your own compiler error appear in Racket is just 5
           | lines of code. https://gist.github.com/srcreigh/a0a087adc26e1
           | 5af0160e8866d4...
           | 
           | 2. New syntax for creating structs. Racket had structs that
           | are initialized like (point 1 2). What if you want keyword
           | syntax ie (point #:x 1 #:y 2)? What if you want that to work
           | with match too? Do you want a JS-style syntax such as (point
           | #:x #:y 2) which pulls in x as an identifier? You can do all
           | this! The rebellion library is pretty awesome in this regard
           | [1], with some sample usage of it in a script here [2].
           | 
           | [1]: https://docs.racket-lang.org/rebellion/Data_Types.html
           | [2]: https://github.com/srcreigh/shift-
           | remapper/blob/main/generat...
        
             | sorawee wrote:
             | > I like how TS is unsound (has no runtime performance
             | penalty for mixing untyped code), and is easily disabled
             | via any if it's in the way.
             | 
             | This is already done. See https://github.com/racket/typed-
             | racket/pull/952 for RFC and
             | https://github.com/racket/typed-racket/pull/948 for the
             | implementation.
        
               | srcreigh wrote:
               | Excellent. Can't wait to try it out.
               | 
               | It's exciting to think of "Deep" checking as a complement
               | to optional checking. Use a mix of both in one code base
               | to play their strengths. For example it'd be great to
               | define a deep type checked module for parsing data. You
               | get static errors and runtime validation too. But, also,
               | use that module from an optionally type checked module,
               | which doesn't add any extra runtime costs if some of your
               | other code / dependencies are untyped.
        
       | Decabytes wrote:
       | One potentially untapped potential of Racket that I think about
       | is sort of as a universal language platform. Seeing more already
       | existing languages reimplemented in Racket would be cool. I know
       | the underlying implementations of other languages don't always
       | line up to Racket, and that you wouldn't be able to use the
       | libraries of the language in question, but it could potentially
       | reduce the friction of extending software you love.
       | 
       | You want to extend this piece of software to suit your needs, but
       | aren't a fan of Racket, extend it in a language with Javascript
       | like, Python like, Java like syntax etc (that ultimately compiles
       | to Racket). An example would be a Game Engine in Racket, that has
       | bindings to other languages a la the Godot Engine, or some other
       | piece of standalone software.
        
       | phonebucket wrote:
       | Are there any vim users that use Racket? If so, I'd be grateful
       | if you could let me know your workflow.
       | 
       | Everything seems to be emacs/DrRacket focussed from what I see.
        
         | spdegabrielle wrote:
         | There are quite a few vim users, to the extent that the manual
         | addresses their needs directly: https://docs.racket-
         | lang.org/guide/Vim.html
         | 
         | A common pattern for Vim users is to happily code in Vim and
         | occasionally switch DrRacket for specific tasks. And use the
         | command line tools - https://docs.racket-
         | lang.org/raco/index.html
        
         | bchar wrote:
         | I've used this, for neovim, and it's very good!
         | https://conjure.fun/
         | 
         | Works with Clojure, Racket, Fennel and Janet.
        
           | phonebucket wrote:
           | This is new to me and it looks awesome! Thanks for bringing
           | it to my attention.
        
       ___________________________________________________________________
       (page generated 2021-02-03 23:01 UTC)