6.8

1 Why Racket?

RacketはLISPの一種であるSchemeの一種です。

SchemeはCommon Lispの仕様標準を取りまとめたGuy Steeleが考えたLISPの小さなサブセットです。しかし、Racketは膨大な独自のライブラリと先進的な機能を備えた巨大な現代的LISPシステムに進化しており、マルチプラットフォームで動作する高品質な統合開発環境DrRacketを持っています。

私がRacketを使い始めたのも、まさにマルチプラットフォームが行き届いているからでした。

Common LispはQuicklispの登場によりインターネットに接続されたLinux環境では非常に手軽に開発環境を構築できますし、Emacsともより良く統合されています。しかし、Windowsの環境には十分にマッチしているとは言い難く、Linuxではとても使いやすいEmacsもWindowsではぎこちないように感じます。

仕事のマシンは大規模なデータセットの解析のためにメモリが山ほど積んであったので、最初はLinuxを仮想環境(VirtualBox)で使用していましたが、仮想環境では最大でもメモリが半分しか使えず、かなりもったいないと感じていました。

そこで、Windowsで最も優れた開発環境を構築できるLISPとして、Racketに行き着いたのです。

実際に使ってみると、Racketには以下のメリットがあることが分かりました。

数値計算の速度に関しては、最適化を施したシンプルなCommon Lispよりは遅いですが、ライブラリを組み合わせて使う場合のCommon Lispはロードに時間がかかり、モジュールが細かく別れているRacketよりも遅いような印象を受けました。また、型の宣言については、Common Lispが関数の中に書くのに対して、Racketが関数の外に書くため、型の宣言の有無でソースコードの可読性が変わることがないというメリットもあります。

一方で、以下のデメリットもあります。

これらのデメリットを考慮しても、Racketは現代版LISPのスーパーセットと呼ぶにふさわしいと考えます。

私の使い方では日本語を入力する場面は非常に少なく、普通のテキストエディタで入力したソースコードは問題なく実行できるため、対処が可能です。DrRacketがメモリを食う点は少し心配ですが、メモリは仕事のWindowsも自宅のMacも十分に積んであるので、実際上はそれほど問題になりません。コンパイルが遅い点は改善が望まれますが、Pythonのように実行が遅いよりはいいと思うのでよしとしましょう。マクロについては少し使いにくいところはありますが、代わりに高階関数が使いやすいため、高階関数を用いるスタイルで書けば実務上の不便はありません。

以上の点から、Racketは学習のために十分価値のある言語と判断し、ここにその過程を記していきます。このサイトでは、従来語られてきた小さなLISPとしてのScheme論ではなく、現代的な機能を備えたLISPとしてRacketの使い方を紹介します。

なお、LISPの基本については独学Common Lispに記述しましたので、Common LispかSchemeかのどちらかについて相応の理解がある方を主な対象とします。いずれは丁寧な入門ドキュメントも書くかもしれませんが、現状は「独学Common Lisp」がありますので、そちらで基本を学んでから閲覧してください。

また、Racketは公式ドキュメントが非常に充実しているため、一部では公式ドキュメントの翻訳を用いるかもしれません。公式ドキュメントはGNU Lesser General Public License (LGPL)で公開されているため、このサイトのライセンスもLGPLに準拠するものとします。

Copyright(C) 2017- satoshiweb.net, All rights reserved.

This documentation is distributed under the GNU Lesser General Public License (LGPL).