# Racket Summer School 2018

## by Markus Pfeiffer

This summer I traveled to Salt Lake City, Utah to attend the Racket Summer School 2018. I signed up to this summer school because I have made an effort to implement the GAP language in Racket for a while now, and was hoping for some better insights into how Racket syntax parsing and language implementation works.

I was not going to be disappointed.

As British people like to do, lets first address the weather; Boy it was hot in Salt Lake City in July, a sweltering 308+ degrees, with some lighting shows in the evening. Luckily as everywhere in the U.S. buildings are prepared for it and there’s air conditioning everywhere.

## The School

Let’s move on to the summer school though; it required me to apply to attend, this normally makes me feel a bit icky about events, but I guess the organisers want to have the correct audience and make their funds go as far as they can; I’ve been there as an organiser, too but I got invited to come along. The school was taught by Matthias Felleisen, Matthew Flatt, Matthew Butterick, Stephen Chang, Jay McCarthy, and Robby Findler.

If you have done a tiny bit of Racket programming you’ll have come across these names; they’re kind of master-minds behind and in the Racket community. They were also really really good at teaching and it was very noticeable that they don’t only believe in their “product”, but also really care about teaching it.

On the first day, Matthias Felleisen gave an introduction to the ideas and philosophy behind Language Oriented Programming ((See also) in Racket. He made explicit some ideas behind programming languages: languages are made to express ideas, and if you constrain a language you constrain ideas. Languages should be malleable to express ideas. This was part of my motivation to look at racket: To play with programming languages for mathematics.

Using the Scheme macro system one can easily develop one’s own syntax and full programming language in Racket which is transformed by the system into S-expressions.

Every lesson was given as a talk, but usually included live coding. Having my laptop in front of me I was able to play along and around with these talks already, which I found incredibly valuable. It also slowed the speaker down to exactly the right pace: Even though I suspect they knew what they were going to type, I could easily follow along and understand.

The talk-style lessons were followed by pair-programming exercises: everyone in the room paired up with a (random) other person and we solved problems together, in front of a single screen. This way one could meet other people in the room, and understand the material. Sometimes, having a slightly more experienced Racketeer as a partner got me to focus on some more advanced understanding, sometimes with a less-experienced person, I got to test my own understanding of the material by trying to explain it to my peer.

The second day consisted of more learning about macros: Mattew Flatt explained how to build a simple s-expression-based language. He also explained some of the previously (to me!) magical symbols #%top, #%app and friends. I was now all set to develop my own language after only two days!

I also got to meet Matthew Butterick, the maker of Beautiful Racket, and as stated somewhere on my page, my personal hero for making pollen. He gave lessons on parsing and lexing, some bits of developing a language which I used to dread quite profusely (try writing a parser in C or any other of these common pesky low-level languages, and you’ll understand why). With Racket it becomes a pleasure to play with syntax, try out different options of how to parse your language.

Stephen Chang then went on to blow my mind even more: He showed ideas behind developing a type system using Racket macros. How cool is that? He and a student (and presumably more people!) implemented Turnstile, a language to help people develop typed languages in Racket. I was already sold on Racket before I came to this Summer School, I am now wholly convinced that I want to do quite a lot more development in Racket, and with Racket, and for Racket. Luckily some people want to do Computer Algebra with it!

On the last day we saw some Racket gems. Unfortunately I missed most of Jay McCarthy’s talk, but Robby Findler really showed again how important it is for a language to express ideas without muddying the mind in technicalities. He found a JavaScript program on the internet to produce Haikus; The code is absolutely indecipherable, but if one refactors it into readable code, and translates it into Racket, the idea behind the code, the important bit, becomes visible. An absolutely beautiful closing point to the school.

## Re­flec­tion

I did not know what to expect from a summer school on Racket other than a group of awkward nerds (me included) meeting up. I have been at GAP Days and at Sage Days, and Maths workshops; I was involved in teaching GAP as well.

I never quite had the feeling of being this convinced (or this convincing, when teaching) than I was after this Racket Summer School, and I want to take some of the ideas and spirit with me.

A special thank you goes to Jay McCarthy who was my point of contact for organisational purposes, such as booking accommodation, paying the school and dealing with the idiosyncracies of getting funds transferred and approved.

Thank you Racketeers for making such a great tool!

## Ac­knowl­edge­ment

 I ac­knowl­edge re­ceiv­ing fund­ing for this trip from the Eu­ro­pean Union’s Hori­zon 2020 re­search and in­no­va­tion pro­gramme un­der grant agree­ment No 676541.