Welcome to the fifth issue of Racket News.

Last week Racketfest took place in Berlin, where I had the opportunity to meet some of you and have some great Racket time. It was an awesome event - thanks to Jesse once again for setting it up. Thank you for the support you showed for Racket News during the event! A last comment to point out that we have now passed 100 subscribers to the Racket News newsletter - you may have that extra espresso today in celebration of this momentous achievement.

In this issue, I have added a new section: Featured Racket Paper. We all know Racket is born and nurtured in a state of the art academic lab where researchers do not sleep in order to bring us this amazing Programming Language. In celebration of this academic effort, I will start choosing papers related to Racket to feature in this newsletter. If you have a suggestion for a paper you would like to see featured here let me know.

Due to some travelling arrangements in the middle of this month, which will coincide with Issue 6 publishing date, I will either publish it a few days earlier or if there is not enough content, delay it until May 1st.

If there’s something you really dislike, or something you want to see added to the newsletter please send me an email or submit an issue.

Now, grab that cup of coffee and enjoy!

Table of Contents

What’s New?

These last couple weeks were full of Racket. Here are a few things happening in the Racket World.

Racket around the web

Do you blog about Racket? Let me know!

Building a GUI Application for the Password Generator by Alex Harsanyi

New Releases

If you know of library releases or maybe your own libraries and you want them to be featured, please let me know.

Algebraic Racket by Eric Griffis - an extension for algebraic structures in untyped Racket

Algebraic structures provide the operational under-pinnings for algebraic data types. What’s missing is the static typing constraints.

The initial release provides a #lang algebraic/racket/base that extends #lang racket/base with:

first class, lexically scoped, naturally ordered data constructors; and

> (data Maybe (Just Nothing)) > (define maybe (function* [(n _ Nothing) n] [(_ f (Just x)) (f x)])) > (maybe #f values (Just 123)) 123 > (maybe #f values Nothing) #f

a consistent destructuring syntax for functions and macros.

> (define fib (function [n #:if (< n 2) 1] [n (+ (fib (- n 1)) (fib (- n 2)))])) > (map fib (build-list 7 values)) '(1 1 2 3 5 8 13) > (define-syntax m-fib (macro [n:nat #:if (< (var n) 2) 1] [n:nat (+ (m-fib #,(- (var n) 1)) (m-fib #,(- (var n) 2)))])) > (list (m-fib 0) (m-fib 1) (m-fib 2) (m-fib 3) (m-fib 4) (m-fib 5) (m-fib 6)) '(1 1 2 3 5 8 13)

The package is fully documented. The documentation includes the first of three tutorials in a series on building interpreters with Algebraic Racket.

Algebraic Racket is the first major milestone in a larger effort to produce a complete language-oriented toolkit for integrating algebraic structure into more sophisticated designs.

The project aims to:

Implement and document the forms, functions, and syntax classes comprising Algebraic Racket for maximum potential reuse. Support the development of modular type systems and other language-facing components as libraries.

Pull requests of any size are welcome. For major changes, please start a conversation on racket-users or open an issue to discuss what you would like to change.

Project in the Spotlight

I got several the suggestions for projects to highlight - thanks for that. I have queued them all for future issues.

In celebration of the start of the triathlon season in Europe, I would like to feature one of the most polished Racket GUI applications I have seen implemented in Racket.

By Alex Harsanyi the project in the spotlight is ActivityLog2. From its webpage.

Import swim, bike and run and other activities from .FIT files. Display plots, scatter plots, histograms, maps and other views for activities. Show reports and trends from activity data and track equipment usage. Features Import Run, Bike and Swim activities from FIT files (as generated by Garmin devices, and others)

Show data charts, histograms, scatter plots, best-average plots

Show GPS track on a map, with several map tile styles

Show hill climbs and best sections (e.g. best 5k, best 20 min power)

Elevation correction (see Notes)

Show weather information for sessions with GPS data

Fix recording errors in swim activities (merge or split lengths, fix stroke type)

Export data as CSV for analyzing it with other tools

Export settings sport zones to the device

Show trend plots and reports

Track equipment usage and service reminders (e.g. replace running shoes or service the bike).

Shows firmware version and battery voltage for all sensors (e.g HRM or Bike Cadence sensor), displays a warning on low battery.

Track body weight, and other metrics

Estimate Critical Power

Generate workout files for downloading to the Garmin device.

Featured Racket Paper

We kick off this new section with the One Paper everyone should read: The Racket Manifesto.

By Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi, Eli Barzilay, Jay McCarthy, Sam Tobin-Hochstadt.

Abstract:

The creation of a programming language calls for guiding principles that point the developers to goals. This article spells out the three basic principles behind the 20-year development of Racket. First, programming is about stating and solving problems, and this activity normally takes place in a context with its own language of discourse; good programmers ought to formulate this language as a programming language. Hence, Racket is a programming language for creating new programming languages. Second, by following this language-oriented approach to programming, systems become multi-lingual collections of interconnected components. Each language and component must be able to protect its specific invariants. In support, Racket offers protection mechanisms to implement a full language spectrum, from C-level bit manipulation to soundly typed extensions. Third, because Racket considers programming as problem solving in the correct language, Racket also turns extra-linguistic mechanisms into linguistic constructs, especially mechanisms for managing resources and projects. The paper explains these principles and how Racket lives up to them, presents the evaluation framework behind the design process, and concludes with a sketch of Racket’s imperfections and opportunities for future improvements.

In addition to the paper there are a few resources related to the paper:

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.

Racket Project Statistics

Some data about the activity in the Racket repository for the month of March, 2019.

Number of master Commits 109 Number of Opened PRs 9 Number of Merged PRs 19 Number of Opened Bugs 21 Number of Closed Bugs 23 Bugs open - currently 302 PRs open - currently 92

Contributions by (20):

Alexander McLin

Alexis King

Alex Knauth

bdeket

Ben Greenman

Georges Dupéron

Gustavo Massaccesi

John Clements

Lassi Kortela

Marc Kaufmann

Matthew Butterick

Matthew Flatt

Matthias Felleisen

Michael MacLeod

Paulo Matos

Philip McGrath

Robby Findler

Ryan Culpepper

Sam Tobin-Hochstadt

yjqww6

Of which, making the list the first time this year (6):

Alex Knauth

bdeket

Georges Dupéron

Lassi Kortela

Matthew Butterick

Michael MacLeod

Jobs

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

Contributors

Thanks to

Jay McCarthy

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.