Welcome to the tenth issue of Racket News.

It’s still surreal to think we have hit number 10 since I am still adjusting the process of editing and publishing RN. One of the things I have been trying to get right is the publishing dates. I would like it to be bi-monthly but publishing on a weekend is generally a bad idea, therefore I will start to publish every Monday following the 1st and the 15th of the month. This is the last issue published on a Friday.

Also, I have made a head start on gathering statistics for repos other than racket/racket . This is a long standing issue and I want it done. As I have been thinking more about this, I came to the conclusion the mid-month stats make no sense so I will drop them and only the odd numbered issues (beginning of the month) will have repository statistics for the whole of the previous month.

Over the last few issues, some of you told me that Gmail is notifying you about the source of the message. I am not an expert at this and when I set out to create RN, I thought I would just write the content and all the sysadmin stuff would sort itself out but didn’t happen so I didn’t set up anything properly. Jack Firth (thanks!) gave me the necessary nudge and suggestions for me to go ahead and authenticate my domain with Mailchimp by doing some DNS-fu. Hopefully from this issue onwards, Gmail or any other service will complain about the source of RN.

If your mail provider still complains about RN or if you have any further suggestions, please do let me know.

Table of Contents

What’s New?

Racket around the web

Do you blog about Racket? Let me know!

Fairylog by Ross McKinlay;

New Releases

Here are a few Racket-related releases I came across recently.

Fairylog again, whose blog post by Ross you can find above, is a Verilog dialect in Racket;

marionette by Bogdan Popa, is a racket library that lets you control Firefox;

nj-symbols by Jos Koot, is a library for the exact computation of nj-symbols;

Project in the Spotlight

This week’s project in the spotlight is Xenomorph, by Matthew Butterick (docs).

From the documentation:

Hands up: who likes working with binary formats? OK, just a few of you, in the back. You’re free to go. As for everyone else: Xenomorph eases the pain of working with binary formats. Instead of laboriously counting bytes — You describe a binary format declaratively by using smaller ingredients — e.g., integers, strings, lists, pointers, dicts, and perhaps other nested encodings. This is known as a xenomorphic object. This xenomorphic object can then be used as a binary encoder, allowing you to convert Racket values to binary and write them out to a file. But wait, there’s more: once defined, this xenomorphic object can also be used as a binary decoder, reading bytes and parsing them into Racket values. So one binary-format definition can be used for both input and output. Meanwhile, Xenomorph handles all the dull housekeeping of counting bytes (because somebody has to). This package is derived principally from Devon Govett’s restructure library for Node.js.

Featured Racket Paper

This issue’s featured paper is Pycket: A Tracing JIT for a Functional Language by Spenser Bauman, Carl Bolz, Robert Hirschfeld, Vasily Kirilichev, Tobias Pape, Jeremy Siek and Sam Tobin-Hochstadt.

Abstract:

We present Pycket, a high-performance tracing JIT compiler for Racket. Pycket supports a wide variety of the sophisticated features in Racket such as contracts, continuations, classes, structures, dynamic binding, and more. On average, over a standard suite of benchmarks, Pycket outperforms existing compilers, both Racket’s JIT and other highly-optimizing Scheme compilers. Further, Pycket provides much better performance for proxies than existing systems, dramatically reducing the overhead of contracts and gradual typing. We validate this claim with performance evaluation on multiple existing benchmark suites. The Pycket implementation is of independent interest as an application of the RPython meta-tracing framework (originally created for PyPy), which automatically generates tracing JIT compilers from interpreters. Prior work on meta-tracing focuses on bytecode interpreters, whereas Pycket is a high-level interpreter based on the CEK abstract machine and operates directly on abstract syntax trees. Pycket supports proper tail calls and first-class continuations. In the setting of a functional language, where recursion and higher-order functions are more prevalent than explicit loops, the most significant performance challenge for a tracing JIT is identifying which control flows constitute a loop — we discuss two strategies for identifying loops and measure their impact.

Please note I am not hosting any of these files, but instead I am linking to the PDFs hosted by the researchers themselves. If you think there is a better way to do this or if I should host the files myself, drop me a line.

Upcoming Meetups

Racket School and RacketCon tickets are now for sale in a website near you. Click on the links below!

Racket School 2019 - taught by Racket heavyweights it’s your time to get you #lang-fu up to scratch. Will take place in Salt Lake City, US on July 8–12.

RacketCon 2019 - taking place in Salt Lake City, US on July 13, 14, just after Racket School.

Help Needed

Do you know a project looking for contributors or help with a task? I would love to hear about it.

Jobs

If you want to advertise any Racket related jobs, please send me an email or submit an issue.

Contributors

Thanks to

Jens Axel Soegaard

Stephen De Gabrielle

for his contributions to this issue.

Disclaimer

This issue is brought to you by Paulo Matos. Any mistakes or inaccuracies are solely mine and they do not represent the views of the PLT Team, who develop Racket.

I have also tried to survey the most relevant things that happened in Racket lang recently. If you have done something awesome, wrote a blog post or seen something that I missed - my apologies. Let me know so I can rectify it in the next issue.