Welcome to the thirty-eighth issue of Racket News.
Racket has a new official website and RacketCon 2020 has been announced we have an agenda. There are quite a few news and a new Call To Racket! Join the fun!
Summer is gone and we are quick heading towards the end of the year - good riddance 2020. Wherever you are, I hope you stay safe, healthy and away from the virus.
Stay inside and grab a cup of strong coffee! Enjoy!
Table of Contents
- What’s New?
- Racket Around the Web
- New Releases
- Call to Racket!
- Project in the Spotlight
- Featured Racket Paper
- Upcoming Meetups
- Racket Project Statistics
What’s New?
- Racket has redesigned its website - take a look and if you find any issues, let the team know.
- Xsmith is an amazing fuzzing framework for Racket and they have released version 2. It was our featured project for issue 32 and it keeps getting better… check it out.
- Just recently found out that David van Horn published “An Introduction to Redex with Abstracting Abstract Machines” - it is from 2018 but still great for redex newcomers.
- Jens Axel Soegaard recently wrote a very interesting history of the macro system in Reddit - take a look.
Racket around the web
Do you blog about Racket? Let me know!
- A simple Constraint Programming implementation by Boro Sitnikovski.
New Releases
If you know of library releases or maybe your own libraries and you want them to be featured, please let me know.
No new packages this issue… was it the summer holidays effect?
Call to Racket!
Want to contribute to Racket? Don’t know where to start? Each RN issue I choose an easy issue to fix to get you started contributing to Racket. Come, give it a go.
Unfortunately nobody has fixed issue #1400. However, the good first issue
was removed as it was apparently harder to fix than initially expected. Lets try a different one: issue 2314. Racket BC when compiled with --enable-ubsan
and ran through tests tests/racket/test
generates some runtime errors due to undefined behaviour. Can you fix those generating warnings:
../../../bc/gc2/../src/numarith.c:1248:7: runtime error: signed integer overflow: 303003010297263104 * -189795840214982656 cannot be represented in type 'long int'
../../../bc/gc2/../src/numarith.c:1246:7: runtime error: signed integer overflow: -8203282719894814976 + -2082170704078970368 cannot be represented in type 'long int'
../../../bc/gc2/../src/numarith.c:1247:7: runtime error: signed integer overflow: 8022013976092023808 - -1740668310524263936 cannot be represented in type 'long int'
and close the bug? Good luck!
Project in the Spotlight
This week’s project in the spotlight is quickscript by Laurent Orseau.
From the website:
Quickscript’s makes it easy to extend DrRacket with small Racket scripts to automate some actions in the editor, while avoiding the need to restart DrRacket.
Creating a new script is as easy as a click on
Scripts | New script...
. Each script is automatically added as an item to the Scripts menu, without needing to restart DrRacket. A keyboard shortcut can be assigned to a script (via the menu item). By default, a script takes as input the currently selected text, and outputs the replacement text. There is also direct access to some elements of DrRacket GUI for advanced scripting, like DrRacket’s frame and the definition or interaction editor.
Featured Racket Paper
This issue’s featured paper is Hygienic Macro Technology, by William Clinger and Mitchell Wand.
Abstract:
The fully parenthesized Cambridge Polish syntax of Lisp, originally regarded as a temporary expedient to be replaced by more conventional syntax, possesses a peculiar virtue: A read procedure can parse it without knowing the syntax of any expressions, statements, definitions, or declarations it may represent. The result of that parsing is a list structure that establishes a standard representation for uninterpreted abstract syntax trees. This representation provides a convenient basis for macro processing, which allows the programmer to specify that some simple piece of abstract syntax should be replaced by some other, more complex piece of abstract syntax. As is well-known, this yields an abstraction mechanism that does things that procedural abstraction cannot, such as introducing new binding structures. The existence of that standard representation for uninterpreted abstract syntax trees soon led Lisp to a greater reliance upon macros than was common in other high-level languages. The importance of those features is suggested by the ten pages devoted to macros in an earlier ACM HOPL paper, “The Evolution of Lisp.” However, naïve macro expansion was a leaky abstraction, because the movement of a piece of syntax from one place to another might lead to the accidental rebinding of a program’s identifiers. Although this problem was recognized in the 1960s, it was 20 years before a reliable solution was discovered, and another 10 before a solution was discovered that was reliable, flexible, and efficient. In this paper, we summarize that early history with greater focus on hygienic macros, and continue the story by describing the further development, adoption, and influence of hygienic and partially hygienic macro technology in Scheme. The interplay between the desire for standardization and the development of new algorithms is a major theme of that story. We then survey the ways in which hygienic macro technology has been adapted into recent non-parenthetical languages. Finally, we provide a short history of attempts to provide a formal account of macro processing.
Upcoming Meetups
Do you know of any upcoming meetups I can advertise? Let me know.
- (chaperone) 10th RacketCon 2020 taking place online between October 16 and October 18.
Racket Project Statistics
Some data about the activity in the Racket et al. repositories, for the month of August, 2020. Given ChezScheme is now a tree in the Racket repository, this is the last issue tracking the racket/ChezScheme
repository.
# commits | Issues (new/closed/open) | PRs (new/closed/open) | |
---|---|---|---|
racket | 112 | 31/28/379 | 22/24/77 |
ChezScheme | 20 | 0/0/1 | 0/0/1 |
scribble | 9 | 5/4/64 | 9/7/13 |
typed-racket | 7 | 9/3/231 | 3/4/20 |
plot | 5 | 0/1/6 | 4/5/0 |
drracket | 4 | 8/5/187 | 0/1/1 |
redex | 3 | 2/2/42 | 0/0/9 |
Contributions by (22):
- Alex Harsányi
- Alexis King
- Ayman Osman
- Bogdan Popa
- Fred Fu
- Griffin Byatt
- Jay McCarthy
- Jesse Alama
- Matthew Flatt
- Mauer-Oats
- Paulo Matos
- Philip McGrath
- Robby Findler
- Ryan Culpepper
- Sam Tobin-Hochstadt
- Stephen De Gabrielle
- William J. Bowman
bdeket
dyb
evdubs
sorawee
yjqww6
Of these, 8 are new contributors for 2020:
- Ayman Osman
- Griffin Byatt
- Jay McCarthy
- Jesse Alama
- Mauer-Oats
- William J. Bowman
evdubs
yjqww6
Repositories included above are: racket
, ChezScheme
, redex
, typed-racket
, drracket
, scribble
, plot
.
Edit (2020.09.15):Remove Mauer-Oats which showed up twice in contributors.
Contributors
Thanks to
- Jens Soegaard
sorawee
- Stephen De Gabrielle
for their 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.