Racket
Channel: 宇宙のすべての知識 プリンシピア
Date: 2022-01-21

Racket, by Wikipedia https://ja.wikipedia.org/wiki?curid=2380301 / CC BY SA 3.0

#LISP
#Scheme
#Schemeインタプリタ
Racket (旧称 PLT Scheme) は、Schemeから派生したプログラミング言語である。
Racket プロジェクトは以下の４つから構成されている。
Racket を開発したPLT project は、1990年代中ごろに, Matthias Felleisenによってまず研究グループとして立ち上げられ、その後すぐに、プロジェクトは初心者プログラマ向けの教育用マテリアル（レクチャー、演習課題や自由課題、ソフトウェア）を製作するのに注力した。
1995年１月, グループは教育用途のプログラム環境を開発することにした。
Matthew Flatt はlibschemeのMrEdと、wxWidgets、およびいくつかのフリーなシステムをバンドルした。
開発の決定から何年かかけて、Flatt, Robby Findler, Shriram Krishnamurthi, Cormac Flanaganら数多くの人々によるチームによって、 Scheme の初心者向けプログラミング環境・ソフトタイピングの実験環境DrSchemeが作られた。
同時に, PLTのチームは高校教師向けのワークショップを行い、プログラムデザインと関数プログラミングを指導した。
. この場での教師や生徒とのやりとりは、 開発の方向付けについて重要な手がかりを与えた。
数年に渡って、教育用言語, algebraic stepper, 透過的なREPL, constructor-based printer, など多くの改善点が DrSchemeに加わり、アプリケーションとして十分な質を備えた教育的プログラミング開発環境が完成した。
2001年には, 中心的なチーム (Felleisen, Findler, Flatt, Krishnamurthi) により、プログラミング教育の思想に基づいて、彼らの初めて教科書How to Design Programsを出版した。
2010年6月7日、PLT Scheme から Racket に改名した。
Racket (and DrRacket) は現在、モジュールブラウザによるモジュール指向プログラミングと, contour view, 統合されたテスト環境とカバレッジ計測、リファクタリングをサポートしている。
Racket では関数型のコア言語,に加え、以下のような幅広い種類の構造を自由に統合させている。
もっとも注目すべき特徴は、マクロシステムにある。
Racketのマクロシステムは、伝統的なLispのS式操作マクロシステムや、Scheme 84のハイジーンなextend-syntaxマクロ、R5RSのsyntax-rules構文と比べても強力な表現力を有する。
実際に、マクロは注意深く調整されたコンパイラ拡張 API といっても差し支えがないものである。
このコンパイラAPIを使うことで, プログラマーは機能の追加と、ドメイン固有言語そのものの追加をすることができる。
そのような機能はビルトインになっている言語要素と完全に区別できないほど、環境に統合される。
例えば、Racketのライブラリではクラスオブジェクトシステムとコンポーネントシステムはマクロとして実装されている。
また、Racketはプログラミング言語に関する実験だけでなく, プログラミングのパターン、インタラクティブなWebプログラミング、リファクタリング、などのトピックを調査するための基盤環境として使われた。
時間が経つとともに、Racketはスクリプティングのツールとして有用なものとなっていった。
Racket は、現在以下のようなツールをもっている。
Racket は標準的なスクリプト言語に備わっているようなライブラリを備えている。
2004年以降, PLTは標準のモジュールシステムと連携した、WebベースのコードレポジトリPLaneTを運営している。
Racketでの "hello world" は以下のようになる。
#lang racket
"Hello, World!"
出力は以下のとおり。
以下はもう少し意味のあるプログラムである。
#lang racket
(require 2htdp/image)
(let sierpinski ([n 8])
(if (zero? n)
(triangle 2 'solid 'red)
(let ([t (sierpinski (- n 1))])
(freeze (above t ...