Matthew Flatt’s proposal to change Racket’s s-expressions based syntax to infix representation creates a stir in the community

3 min read

RacketCon 2019 happened last month from July 13 to 14 bringing together the Racket community to discuss ideas and future plans for the Racket programming language. Matthew Flatt, one of the core developers, graced the stage to give his talk: State of Racket. In his talk, he spoke about the growing community, performance improvements, and much more. He also touched upon his recommendation to change the surface syntax of Racket2, which has sparked a lot of discussion in the Racket community.

Later in July, Greg Hendershott, who has contributed Racket projects like Rackjure and Travis-Racket and has driven a lot of community participation, expressed his concern about this change in a blog post. “I’m concerned the change won’t help grow the community; instead hurt it,“ he added. He further shared that he will shift his focus towards working on other programming languages, which implies that he is stepping down as a Racket contributor.

Matthew Flatt recommends surface syntax change for removing technical barriers to entry

There is no official proposal about this change yet, but Flatt has discussed it a couple of times. According to Flatt’s recommendation, Racket 2’s ‘lispy’ s-expressions should be changed to something which is not a barrier of entry to new users. He suggests to get rid or reduce the use of parentheses and bring infix operators, which means the operator sign will be written in between the operands, for instance, a + b.  “More significantly, parentheses are certainly an obstacle for some potential users of Racket. Given the fact of that obstacle, it’s my opinion that we should try to remove or reduce the obstacle,“ Flatt writes in a mailing list.

Racket is a general-purpose, multi-paradigm programming language based on the Scheme dialect of Lisp. It is also an ecosystem for language-oriented programming. Flatt further explained his rationale behind suggesting this change that the current syntax is not only a hindrance to potential users of Racket as a programming language but also to those who want to use it as “a programming-language programming language”. He adds, “The idea of language-oriented programming (LOP) doesn’t apply only to languages with parentheses, and we need to demonstrate that.” With this change, he hopes to make Racket2 more familiar and easier-to-accept for users outside the Racket community.

Some Racket developers believe changing s-expressions based syntax is not “desirable”

Many developers in the Racket community share a similar sentiment as Greg Hendershott. A user on Hacker News added, “Getting rid of s expressions without it being part of a more cohesive improvement (like better supporting a new type system or something) just for mainstream appeal seems like an odd choice to me.”

Another user added, “A syntax without s-expressions is not an innovative feature. For me, it’s not even desirable, not at all. When I’m using non-Lispy languages like Rust, Ada, Nim, and currently a lot of Go, that’s despite their annoying syntactic idiosyncrasies. All of those quirky little curly braces and special symbols to save a few keystrokes. I’d much prefer if all of these languages used s-expressions. That syntax is so simple that it makes you focus on the semantics.

While others are more neutral about this suggested change. “To me, Flatt’s proposal for Racket2 smells more like adding tools to better facilitate infix languages than deprecating S-expressions. Given Racket’s pedagogical mission, it looks more like a move toward migrating the HtDP series of languages (Beginning Student, Intermediate Student, Intermediate Student with Lambda, and Advanced Student) to infix syntax than anything else. Not really the end of the world or a big change to the larger Racket community. Just another extension of an ecosystem that remains s-expression based despite Algol and Datalog shipping in the box,” a user expressed his opinion.

To know more about this change, check out the discussion on Racket’s mailing list. Also, you can share your solutions on Racket2 RFCs.

Read Next

Racket 7.3 releases with improved Racket-on-Chez, refactored IO system, and more

Racket 7.2, a descendant of Scheme and Lisp, is now out!

Racket v7.0 is out with overhauled internals, updates to DrRacket, TypedRacket among others