バグフィクスと拡張
Nd
一般カテゴリに属する
文字を全て含みます。ASCIIの範囲だけに限定したい場合用に、それぞれの文字セットと
ASCII文字セットの共通部分を取った文字セット(char-set:ascii-digit等)
も用意してあります。
L
で始まるカテゴリ (Lu
, Ll
等) 全てを含む集合です。
\p{category}
と \P{category}
の表記が使えるようになりました。
ここで category はUnicode一般カテゴリです。
\d
、 \w
、 \s
は
これまでどおりASCIIの範囲内を対象にします。これを変えるとこれまでのコードが壊れる
可能性が高いからです。
[:alpha:]
等)もASCII範囲に限定していますが、
Unicode全域を対象とする[:ALPHA:]
等を新たにサポートしました。
#<undef>
を返すことが多いです。ところで#<undef>
は真偽値判断の文脈では真になります。コードレビュー中に、意図せずに手続きが#<undef>
を返すこと、それが真と判定されることに依存したコードが多くあることに気づきました。
手続き側は、「この戻り値は使われていないはずだ」との仮定の元に、将来戻り値を変更する
可能性がありますが、そうなると戻り値を使っているコードは壊れてしまいます。
そこで、環境変数 GAUCHE_CHECK_UNDEFINED_TEST
がセットされていると、
#<undef>
が条件判断のテストに使われた時に警告を出す機能をつけました。
詳しくはblogのポスト
及び未定義値を参照してください。
c32
、c64
、c128
)を追加しました。
compile-only
オプションを追加しました。これはスクリプトの構文チェックだけを
行い、実行はしません。main
関数ではなくトップレベルに実行式を書いている
スクリプトで便利です。
gosh -h
はヘルプメッセージを(標準エラー出力ではなく)標準出力に出して
ステータス0で終了するようになりました。
backward-word
と forward-word
が追加されました (@pclouds氏による。 https://github.com/shirok/Gauche/pull/524 )
Scm_CharSetAdd
に、大きな文字セットにASCII文字を追加した場合に
おかしくなるバグがありました。( Patch by @pclouds
https://github.com/shirok/Gauche/pull/500 )
~vr
フォーマット指示子が動いていませんでしあ。https://github.com/shirok/Gauche/issues/509
Scm_RegExec
の引数が二つ追加されています。サーチする入力文字列のstartとend
を指定する引数です。うっかりしていて移行を支援するマクロを用意していませんでした。
#ifdef SCM_REGEXP_MULTI_LINE
で新しいインタフェース用のコードと
古いインタフェース用のコードを切り替えられます。
define
は、コンパイル時にダミーの束縛を作るようになりました
( https://github.com/shirok/Gauche/issues/549 対応の結果です)。
この変更は規格にも合致していますが、これまで未定義の振る舞いに依存していたコードが
影響を受ける可能性があります。
詳しくは
このblogエントリを見てください。
(scheme base)
ライブラリが、R7RSのdefine
ではなく、
うっかりGaucheの拡張define
をexportしていました。
Gaucheのdefine
は拡張されたlambda引数を認識します。これはバグで、
現在は直っていますが、これまでR7RSコード内でうっかりGaucheの拡張引数による定義を
使っていたコードは動かなくなります。
macroexpand
の結果を
プログラム的に処理していた場合、この変更で衛生性が失われる可能性があります。
省略可能引数を与えることで従来の構文情報を残した戻り値を得ることができます。
parser.peg
: このモジュールはまだアンオフィシャルですが、それでも使っている
人へ: $do
は廃止され、かわりに$let
と$let*
が導入されました。
また@SaitoAtsushi氏により$parameterize
が追加されました。