Racket (original) (raw)

small logo Racket

Racket, the Programming Language

large logo

#lang racket/gui

(define my-language 'English)

(define translations
#hash([Chinese . "你好 世界"]
[English . "Hello world"]
[French . "Bonjour le monde"]
[German . "Hallo Welt"]
[Greek . "Γειά σου, κόσμε"]
[Portuguese . "Olá mundo"]
[Spanish . "Hola mundo"]
[Thai . "สวัสดีชาวโลก"]
[Turkish . "Merhaba Dünya"]))

(define my-hello-world
(hash-ref translations my-language
"hello world"))

(message-box "" my-hello-world)

Mature

Practical

Extensible

Robust

Polished

Racket, the Language-Oriented Programming Language

#lang datalog

ancestor(A, B) :- parent(A, B).
ancestor(A, B) :-
parent(A, C), ancestor(C, B).
parent(john, douglas).
parent(bob, john).
ancestor(A, B)?

Little Macros

Racket allows programmers to add new syntactic constructs in the same way that other languages permit the formulation of procedures, methods, or classes. All you need to do is formulate a simple rule that rewrites a custom syntax to a Racket expression or definition.

Little macros can particularly help programmers with DRY where other features can’t. The example on the left above shows how to define a new syntax for measuring the time a task takes. The syntax avoids the repeated use of lambda. Note also how the macro is exported from this module as if it were an ordinary function.

General Purpose

Racket comes with a comprehensive suite of libraries: a cross-platform GUI toolbox, a web server, and more. Thousands of additional packages are a single command away: 3D graphics, a bluetooth socket connector, color maps, data structures, educational software, games, a quantum-random number generator, scientific simulations, web script testing, and many more.

Macros work with these tools. The example on the left above shows the implementation of a small number-guessing game. It is implemented in the GUI dialect of Racket, and demonstrates a number of language features.

Big Macros

Big Macros

Getting to know the full Racket macro system will feel liberating, empowering, dazzling—like a whole new level of enlightenment. Developers can easily create a collection of co-operating macros to implement algebraic pattern matching, simple event-handling, or a logic-constraint solver.

While Racket is a functional language, it has offered a sub-language of classes and objects, mixins and traits, from the beginning. The macro-based implementation of a Java-like class system lives in a library and does not need any support from the core language. A Racket programmer can thus combine functional with object-oriented components as needed.

Easy DSLs

#lang video Dependency Graph

Some languages convey ideas more easily than others. And some programming languages convey solutions better than others. Therefore Racket is a language for making languages, so that a programmer can write every module in a well-suited language.

Often an application domain comes with several languages. When you need a new language, you make it—on the fly. Open an IDE window; create a language right there, with just a few keystrokes; and run a module in this new language in a second IDE window. Making new languages really requires no setup, no project files, no external tools, no nothing.

IDE Support

IDE Support

Racket comes with its own IDE, DrRacket (née DrScheme), and it sports some unique features. For example, when a programmer mouses over an identifier, the IDE draws an arrow back to where it was defined.

A programmer immediately benefits from DrRacket while using an alternative language, say Typed Racket. Racket macros, even complex ones and those used to make new languages, record and propagate a sufficient amount of source information for DrRacket to act as if it understood the features of the new language.

Any Syntax

Dots and Colon-Pipes, too!

Racket programmers usually love parentheses, but they have empathy for those who need commas and braces. Hence, building languages with conventional surface syntax, like that of datalog, is almost as easy as building parenthetical languages.

Racket’s ecosystem comes with parsing packages that allow developers to easily map any syntax to a parenthesized language, which is then compiled to ordinary Racket with the help of Racket’s macro system. Such a language can also exploit the hooks of the IDE framework, so that its programmers may take advantage of Racket’s IDE.

Racket, the Ecosystem

eighth RacketCon, 2018

Software

Tutorials & Documentation

Community

Books

Education

EducationThe Racket Summer Schoola summer school for researchers, professionals, and (under)graduate students to the Racket philosophy of programming languagesProgram by Design (aka TeachScheme!)a curriculum and training program for high school teachers and college facultyBootstrapa curriculum and training program for middle-school and high-school teachers The Four Amigos

Swag

SwagRacket T-Shirts — the perfect way to meet friends, influence people, and stay warm.Racket Stickers — the indispensable accessory for laptops and textbooks. gear

Thank you