PLT DesignがRacket バージョン6.1をリリースした。Lisp/Schemeファミリーに属する,マルチパラダイムな多目的プログラミング言語だ。 バージョン6.1では,再帰的なローカル変数の定義と,他言語の機能を扱うための新しい方法がいくつか導入されている。
racket-lang.orgでRyan Culpepper氏が述べるところによると,Racket V6.1に追加された最も重要なイノベーションは,再帰的なローカル変数定義を扱う方法だ。 これまでのバージョンでは,変数は#undefined
値によって初期化されていた。今回の変更で,変数は初期化されないようになった。定義よりも前に変数にアクセスしようとすると,Racketが例外を発生させる。この変更は開発者に対して,変数の不適切な使用を早期かつ改善された方法でフィードバックすることを目的としたものだ。#undefined
で変数が初期化されることを意識したプログラムはほとんどないので,この変更によってプログラムのセマンティクスが変更されることはないはずだ,と氏は述べている。さらにこの新しい動作は,変数が定義前に使用された場合に例外が発生するという意味で,モジュールレベルの変数に関する既存の動作とも一致している。
この新しいローカル変数定義の動作には下位互換性がないため,誤って未定義の変数にアクセスしているプログラムは動作しなくなる。次のように,
(define undefined (letrec ([x x]) x))
#undefined
値を取得するパターンも動作しない。今後#undefined
値を取得するには ,racket/undefined
を使用するのが正しい方法になる。
Racketの新バージョンで導入された他の変更点は以下のとおりだ。
- Plumbersでは,
current-plumber, plumber-add-flush!, plumber-flush-all
などの新しい関数セットでフラッシュ動作を行うことによって,フラッシュのタイミングのより細かい制御を可能にする。 - Contractsは,制約付きのデータ構造の実装に関する(ヒープ不変チェックの条件節を逆にしてしまった,などの)ミスを,容易に見つけられるようにする。
- WindowsとMac OS X用のグラフィックライブラリと関連リソース (Pango, Cairo, GLibなど)がアップグレードされた。
- OpenSSLライブラリが,DHEとECDHE暗号スイートによる前方秘匿性(Forward Secrecy)とサーバ名表示をサポートするようになった。
mzlib/class100
ライブラリがracket/class
にリプレースされた。
Racket(旧名称はPLT Scheme)はLGPLライセンス下でリリースされた,フリーで汎用的なマルチパラダイムプログラミング言語である。その設計目標の1つは,言語の作成,設計,実装のためのプラットフォームとして機能することにあり,スクリプティング,汎用プログラミング,コンピュータサイエンス教育,研究などのさまざまなコンテキストで使用されている。