Racket

Racket (旧称 PLT Scheme) は、Schemeから派生したプログラミング言語である。Racket プロジェクトは以下の４つから構成されている。 スクリプト処理系、Racket (リッチなランタイムシステム, 豊富なライブラリ, JITコンパイラ などが含まれる） Racketプログラムの開発環境、DrRacket (旧称 DrScheme) コンピューティングとプログラミングを"教養教育カリキュラムの必須分野にする"試み ProgramByDesignアウトリーチ・プログラム。 Racketのユーザ作成パッケージの配布システム PLaneT。 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 では関数型のコア言語,に加え、以下のような幅広い種類の構造を自由に統合させている。 mixin クラスシステム。 Standard MLのように洗練されて表現力豊かなコンポーネント（モジュール）システム。 高階言語用としては初めてのコントラクトシステム。 メタプログラミングのためのパワフルなマクロシステムをもつ。 実用的なシステムとして、最初に部分継続を実装した。 もっとも注目すべき特徴は、マクロシステムにある。Racketのマクロシステムは、伝統的なLispのS式操作マクロシステムや、Scheme 84のハイジーンなextend-syntaxマクロ、R5RSのsyntax-rules構文と比べても強力な表現力を有する。実際に、マクロは注意深く調整されたコンパイラ拡張 API といっても差し支えがないものである。このコンパイラAPIを使うことで, プログラマーは機能の追加と、ドメイン固有言語そのものの追加をすることができる。そのような機能はビルトインになっている言語要素と完全に区別できないほど、環境に統合される。例えば、Racketのライブラリではクラスオブジェクトシステムとコンポーネントシステムはマクロとして実装されている。 また、Racketはプログラミング言語に関する実験だけでなく, プログラミングのパターン、インタラクティブなWebプログラミング、リファクタリング、などのトピックを調査するための基盤環境として使われた。 時間が経つとともに、Racketはスクリプティングのツールとして有用なものとなっていった。Racket は、現在以下のようなツールをもっている。 Unix シェルのスクリプティング ウェブサーバ プレゼンテーションツール グラフィカルなツールキット Racket は標準的なスクリプト言語に備わっているようなライブラリを備えている。2004年以降, PLTは標準のモジュールシステムと連携した、WebベースのコードレポジトリPLaneTを運営している。 Racketでの "hello world" は以下のようになる。 #lang racket "Hello, World!" 出力は以下のとおり。 "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 (beside t t)))))) このプログラムはRacketのwebページで紹介されているものである。 出力は、以下のような8回の繰り返しまで描画した、シェルピンスキーの三角形である。 ^ Racketブログ Racket v8.11.1 ^ Program by Design: Overview ^ PLaneT: Racket's centralized package distribution system ^ From PLT Scheme to Racket ^ Findler, Felleisen Contracts for Higher-Order Functions ^ Matthew Flatt Composable and Compilable Macros, You Want it When? ^ Flatt, Culpepper, Darais, Findle r, Macros that Work Together; Compile-Time Bindings, Partial Expansion, and Deﬁnition Contexts Felleisen et al, 2004 The TeachScheme! Project. Journal of Computer Science Education. Findler et al, 2001. DrScheme: A Programming Environment for Scheme. Journal of Functional Programming. Flatt et al, 1999. Programming Languages as Operating Systems. International Conference on Functional Programming. Jacob Matthews, 2006. You want it where? Component Development with PLT Scheme. Workshop on Scheme and Functional Programming. Racket 公式サイトホームページ Blog Code Repository PLaneT Quick: An Introduction to Racket with Pictures Guide: Racket