MzScheme
Windows版有り srcにVC6,VS2002のプロジェクト有り
[2003/09/06 04:58:33 PDT] Ver205、VSプロジェクト、Relese版ビル後のDebug版のビルドはOKだが、 何か設定の問題があるのか不明だが、Debug版だけのビルドだとエラー発生、ビルド成功せず。
Linux、Mac、Sparc版もあり、ソースコードも公開している。取っ掛かりとして、WindowsでSchemeやる人に、如何と
http://www.plt-scheme.org/ http://www.ccs.neu.edu/scheme/ DrScheme http://www.drscheme.org/ DrEd http://www.plt-scheme.org/software/mred/ MzScheme http://www.plt-scheme.org/software/mzscheme/ Other PLT Software http://www.plt-scheme.org/software/
誰かに訳してもらいたい How to Design Programs http://www.htdp.org/2002-09-22/Book/ Schemeを普及させよう(そして Gauche を(すみません後回しで))
私(今津)の語学(英語&Scheme)では不正確な所があるかも知れません。修正、加筆ご自由に願います。
性能
基本的にバイトコードにコンパイルされてから実行されるが、x86、x64 (AMD64/EM64T)、32-bit PowerPCではバイトコードがJITコンパイルされて、ネイティブコードとして実行される。
他の処理系との比較
- The Computer Language Benchmarks Game
- Fake R6RS Benchmarks
- Gambit-C vs. Bigloo vs. Chicken vs. MzScheme vs. Scheme48
日本語の取り扱いについて
MzSchemeでは、文字型の内部表現としてUCS-4を使い、入出力の外部表現としてUTF-8を仮定している。文字列型とUTF-8、UTF-16との変換処理は標準で装備していて、CP932などのUTF-8以外のエンコーディングにも、iconv経由で対応。
基本的に、UTF-8以外のエンコーディングはByte Stringという型を経由して扱う。入出力の際に、Byte Stringと文字列型との間で変換を行い、内部では一貫してUCS-4として処理する。UTF-8の場合は、この変換が自動化される。また、エンコーディング変換ポートを使って、自動的に変換処理を行うこともできる。
;; Shift_JISでエンコーディングされたファイルを読み込む例 (4.1.4) (require scheme/port) (read-line (reencode-input-port (open-input-file "test.sjis") ; 元になる入力ポート "sjis" ; 入力ポートのデータのエンコーディング #f ; 変換にエラーが発生したときに代用されるByte String #t)) ; 変換ポートが閉じるとき、元のポートも閉じる
この例では、内部表現のUCS-4に変換された文字列が返る。前述の通り、iconvを利用できる環境であれば、"cp932"、"iso-2022-jp"、"eucjp"、"utf8"なども指定可能。reencode-output-portで出力ポートを作ることもできる。
REPL
標準ではUTF-8で入出力されるので、Windowsのコマンドプロンプトを使っている場合など、他のエンコーディングで入出力したい場合、
(require scheme/port) (current-output-port (reencode-output-port (current-output-port) "cp932" #f #t)) (current-input-port (reencode-input-port (current-input-port) "cp932" #f #t))
のように、標準入出力にエンコーディング変換ポートを挟む。
インストール方法
Windows、Mac OS X、Linux、Solarisにはバイナリがあるので、それを使えば簡単にインストールできる。それ以外の環境では、ソースコードからビルド。
Emacsから使う場合は、こんな感じで適当に設定。
(autoload 'run-scheme "cmuscheme" "Run an inferior Scheme process." t) (setq scheme-program-name "C:/PLT/MzScheme.exe") (setq process-coding-system-alist (cons '("[Mm]z[Ss]cheme" utf-8 . utf-8) process-coding-system-alist))
Windows
PLT SchemeのダウンロードページからWindows用のインストーラをダウンロードして実行するだけ。
実行と終了
- MzScheme の実行 コマンドプロンプトからmzschemeを実行する(Pathが通っていること)か、エクスプローラでmzschemeをダブルクリック
C:\Documents and Settings\imazu>mzscheme Welcome to MzScheme version 205, Copyright (c) 1995-2003 PLT >
- 終了
> (exit) C:\Documents and Settings\imazu>
- Scheme初心者にはこの(exit)終了さえ分からなかった
Ctr-C でも終了します。
- 初期設定ファイル mzschemerc.ss (HOMEDRIVE,HOMEPATH)
初期化時、mzschemerc.ssがHOMEPATHの所にあればそれが読まれる
入力方法
- 私は、MzSchemeへのテスト入力は、
C:\Documents and Settings\Imazu>mzscheme Welcome to MzScheme version 205, Copyright (c) 1995-2003 PLT >
を立ち上げといて、ファイル等からコピーしたのを右マウスクリックでペーストして入力しています。
- エディタでプログラムを作成し
>(load "ファイル名(拡張子込み)") C:\Documents and Settings\Imazu\MzScheme>type こんにちは.ss (begin (display "こんにちは、世界!") (newline)) C:\Documents and Settings\Imazu\MzScheme>mzscheme Welcome to MzScheme version 205, Copyright (c) 1995-2003 PLT > (load "こんにちは.ss") こんにちは、世界! >
- 一度入力したのは↑、↓のディレクションキーで呼び出せます。 (Windows XP コンソール)
MzSchemeの動作
- 内部パラメータ
http://download.plt-scheme.org/doc/mzscheme/mzscheme-Z-H-7.html#node_sec_7.7
> (current-directory) "C:\\Documents and Settings\\Imazu"
http://download.plt-scheme.org/doc/mzscheme/mzscheme-Z-H-7.html#node_idx_1020
を基準に
> (current-library-collection-paths) ("C:\\Documents and Settings\\Imazu\\Application Data\\PLT Scheme\\205\\collects" "C:\\Program Files\\plt\\collects")
http://download.plt-scheme.org/doc/mzscheme/mzscheme-Z-H-7.html#node_idx_1182
等でライブラリを検索しているよう
MrEd
- 付属の GUI は MrEd が管理し、これ自体は wxWindows1.6 独自改造版を利用してマルチプラットフォームを実現している。
- 4.1.4 現在、Windows では日本語文字は重なって表示されてしまい、また直接入力は別のところに変換窓が開く。Linux では表示は正しくできるが日本語の直接入力ができない (日本語入力のオンオフが認識されていないっぽい)。また、Mac でも直接入力がうまく動かない模様。
- FFI 機能により、共有ライブラリ (.so、.DLL) をロードしてその中の C 言語用関数を呼び出せるので、これを利用してほかの GUI なども使える。
Windows の COM
- MzCOM.exe を使って、PLT Scheme を COM としてほかの Windows アプリに公開可能。
- MysterX ライブラリを使って、ほかの COM や ActiveX を利用した Scheme による DHTML な Windows アプリを作れる。
Ver4
- Ver4 になっていろいろ変更があった。
- バージョン表記が、数字 3 桁からほかのソフトと同様のドット分けになった。
- 全体に R6RS とも ERR5RS とも微妙に異なる方言化 (というか、Scheme を主とするマルチ言語プラットフォーム化か) を目指しているのか、デフォルト状態でのほかの処理系との互換性がやや落ちている (#lang scheme という記述を冒頭に要する、else 部のない if をエラーとする、など)。また、mzscheme のコマンドラインオプションも大きな変更があり、外部による既存の mzscheme 対応ツールがそのままではうまく動かないケースもかなり見られる。
- とりあえず既存の R5RS スクリプトを無変更で走らせるには mzscheme -r スクリプト名、上記の if エラーにひっかかる場合は plt-r5rs スクリプト名、デフォルトの名前は変更できない旨のエラーが出る場合 (スクリプト側で R5RS 仕様中の名前を再定義しているなど) は plt-r5rs --no-prim スクリプト名、とすればよいらしい。なお、plt-r5rs の初期設定ファイルは ~/.pltr5rsrc と独自名になる。
- Ver4 より前の MzScheme 用スクリプトも mzscheme -l mzscheme スクリプト名 で無変更でもあらかた走らせられる模様。なお、スクリプト冒頭に (require mzscheme) だと、デフォルトの #lang scheme を旧 MzScheme 用名前束縛で上書きする形になるが、上書きされない部分によって、旧 MzScheme とは一部挙動が変わる恐れがある。-l mzscheme の場合は #lang scheme の代わりに #lang mzscheme としたに等しいが、Ver4 以降追加の名前を参照するにはあらためて (require scheme mzscheme) の指定が必要となる。
ドキュメント
- PLT Documentation http://download.plt-scheme.org/doc/
- How to Design Programs (HtDP) http://www.htdp.org/、http://www.htdp.org/2002-09-22/Book/
- How to Use Scheme (HtUS) http://www.htus.org/
PLT Scheme Libraries and Extensions
MzScheme Topics
- MzScheme:Library_Collections
- MzScheme:MzLib
- MzScheme:Scheme入門
- MzScheme:TeX2page
- MzScheme:mzc
- MzScheme:src解析