今津
今津と言います。 Lisp,Scheme,Haskell,Squeak,etc. 色々とプログラム言語には興味を持っているのですが、 どれも身についていません。
再度Schemeに挑戦しようと思い、物色していて、英語力もないのに http://www.plt-scheme.org/ に興味を持ちました。
当方、仕事がらWindows VC++を使用するのですが、 このMzSchemeは、ソースにVS.NETプロジェクトがあり、 そのままでコンパイルして動いたのと、既に高機能満載っぽいと感じたからです。
この実装系の評価は如何ほどなのでしょうか?
- Shiro (2003/08/28 04:35:12 PDT): 私は使ったことはないのですが、 ライブラリが豊富に揃っていますし、PLT Schemeを使った アプリケーション開発も盛んなようです。 ただ現在のところ、マルチバイト文字のサポートは無いみたいですね (Latin-1文字セット限定)。開発者は長期的にはUnicodeに移行したい というようなことを言っていましたが。
- マルチバイト対応と非対応ではどんな違いがあるのでしょうか?
- 文字数計算が正常
- 誤動作する文字コードがある? (文字化けしそうな文字コードを知りたいです。)
- その他には何があるのでしょうか?
ちなみに MzScheme (Version 205) on WindowsXP で下記簡単な日本語を含んだ物だと正常に表示されています。
C:\Documents and Settings\Imazu>mzscheme Welcome to MzScheme version 205, Copyright (c) 1995-2003 PLT > (define 朝 1) > 朝 1 > (display 朝) 1> (display 昼) reference to undefined identifier: 昼 > (display '昼) 昼> > (define 夜 2) > (+ 朝 夜) 3 >
- MzScheme 作成させてください。メモ程度の内容書いて良いでしょうか? また、既に使用している人がいましたら、記載、編集、etc. して頂けると嬉しいです。
- 誤動作確認
Welcome to MzScheme version 205, Copyright (c) 1995-2003 PLT > (string-ref "Scheme処理系" 8) #\227 cygwin on WindowsXP Gauche-0.7.1もダメでした gosh> (string-ref "Scheme処理系" 8) *** ERROR: unbound variable: |\x1b| Stack Trace: _______________________________________ gosh> メモし忘れましたが #\n (だったかな?)となる場合もありました。 動作が不安定っぽいです。
- Shiro: Gaucheの場合は、端末の文字エンコーディングを コンパイル時に選択した内部エンコーディング(デフォルトではeuc-jp)と 合わせて下さい。エンコーディングが異なれば、全然関係ないバイト列を 渡していることになります。 あるいはソースコードをファイルに書いておいて ロードするか (その場合でも、ファイルの文字エンコーディングは 内部エンコーディングと合わせる必要があります)。
- MzSchemeのように多バイト対応していない処理系で、(define 夜 2)
等がうまく動いているように「見える」のは、MzSchemeが読み込んだ
「夜」を表現するバイト列をそのまま格納していて、そのまま出力している
からです。具体的に問題が現れるのは次のような場合です。
- string-ref, string-set!, substring等、文字列をインデックスでアクセスする場合。 MzSchemeはバイトインデックスでアクセスしてしまうので、多バイト文字を 取り出すことが出来なかったり、(一バイトだけの変更によって)文字が化けたりします。
- ソースをShift JISで書いている場合、漢字の2バイト目が#x5c ('\') に 一致する文字があると誤動作します。例えば "能" とか。 EUC-JPやUTF-8ではこの問題は現れません。
- ソースがShift JISかEUC-JPの場合、 文字列の検索時 (例えばsrfi-13のstring-contains? 等) に、文字の境界が ずれたバイト列にマッチしてしまう場合があります。 UTF-8ではこの問題は現れません。
- 正規表現で日本語の文字が文字レンジ指定の中に使えません (全てのエンコーディングで)。また、ShiftJISやEUC-JPの場合は 文字境界の問題も出ます。
- これらの点に気をつけていれば、 単なるバイト列として扱うことで、多バイト文字を含んだ文字列も 使うことはできるでしょう。
Scheme情報
- Scheme (Christopher Browne's Web Pages) http://cbbrowne.com/info/scheme.html