リリース 0.9.6
Major feature upgrade
主要な機能強化:
- スタティックリンクとスタンドアロン実行可能ファイルの生成が正式にサポートされました。
Gaucheプログラムを単独で実行可能なバイナリにできます。
blogエントリ
およびマニュアルの"スタンドアロン実行可能ファイルの作成"セクション参照。
- シェルスクリプトによるインストーラ (blogエントリ)。
- REPLの拡張: プリティプリント(blog entry)、
オンラインドキュメント (blog entry) とその検索 (blog entry).
- メソッドディスパッチの最適化 (1, 2).
- 手続きのインライン化の最適化 (1, 2)
- Windowsコンソールでの日本語の処理の改善: @hamayama
さんにより、Windowsコマンドプロンプトでの日本語の扱いについて多くのfixが入りました。
- Boehm gc 7.6.6にアップデート。@qykth-gitさんに感謝。
- TLS層にmbedTLSのサポートが@qykth-gitさんにより追加されました。詳しくはrfc.tls参照。
- formatがついに、浮動小数点数のフォーマット指示子
~f
をサポート。また、二進→十進変換の微妙な丸めモードについてのサポートが入っています(blog post)。
- 複数のGaucheバージョンを使い分けるサポートが入りました。0.9.6以降、
gosh -vVERSION
とすると、VERSION
のGaucheがインストールされていれば
それが起動されます。VERSION
は0.9.6以降でないとならないので今はあまり有用ではありませんが、
今後新たなバージョンがリリースされれば便利になってゆくでしょう。
- Saito Atsushiさんおよび@hamayamaさんにより、
サンプリングプロファイラがWindowsで動くようになりました(但し、ひとつのスレッドの中だけです)。
新たなモジュールや手続き
全17ライブラリのうち12をサポートしています。
これらのモジュールはsrfi-*
でもアクセス可能ですが、
新しいコードはscheme.*
の名前で使うことを推奨します。
新たなsrfiのサポート:
他の新たなモジュールや手続き
- pprint - プリティプリンタ
- assume-typeマクロとtype-error手続き
- define-inlineがオフィシャルに
- hash-table-compare-as-sets,
tree-map-compare-as-sets - これらのマッピングを集合として比較
- let-values, let*-values: 組み込みに。
- gauche.process:
do-process!, do-pipeline,
run-pipeline!を追加
- gauche.unicode:
char-east-asian-widthを追加
- gauche.uvector:
uvector-binary-search,
u8vector=? ..., u8vector-compare ...を追加
- In gauche.charconv: 変換ルーチンが文字列だけでなくu8vectorを取れるように
- gauche.sequence:
delete-neighbor-dups,
delete-neighbor-dups!,
delete-neighbor-dups-squeeze!,
group-contiguous-sequenceを追加
- In gauche.threads:
atomicとatomic-update!がタイムアウト時の値として多値を返せるように
- text.template: 組み込みの文字列補間機能を使った簡単なテンプレート
- 変更不可な文字セットのサポート。 char-set-freezeと
char-set-freeze!で変更不可な文字セットを作れます。
リテラル文字セットは(他のリテラルと同様)変更不可になります。
- rfc.http: httpsコネクションに、
rfc.tls
モジュール
のかわりにstunnel
プログラムを使うことが可能になりました。
ただ、コマンドモードのstunnel
が必要です(Windowsでは提供されていません)。
- rfc.tls: axTLSに加えmbedTLSもサポートされ、
証明書チェックも入ったので、いくつか最低限のドキュメントを足してあります。
- binary.io: get-uint,
get-sint, put-uint!,
put-sint!を追加
- gauche.generator:
generator->uvector,
generator->uvector!,
generator->bytevector,
generator->bytevector!を追加
- data.random: regular-string$ - 与えた正規表現にマッチするランダムな文字列を生成するジェネレータを作ります
- string-incomplete->complete:
不正なバイトをロスレスな方法でエンコーディングする
:escape
モードを追加
互換性の無い変更
いくつかの変更はこれまでドキュメントされていなかった振る舞いを変えています。
また、バグフィクスの結果振る舞いが替わったものがあります。
- リテラル文字セット(
#[chars]
)は変更不可になりました。それを変更している
コードはエラーになります。(エラーになるならないにかかわらず、リテラルは変更してはいけません)
- getter-with-setterが返す手続きにはsetterがロックされます。
つまりそのsetterを後から置き換えようとするとエラーになります。
組み込みでsetterが定義されてる手続きのほとんどはロックされるようになったので、
そういった手続きのsetterを置き換えようとしているコードはエラーになります。
- list*, cons* - srfi-1に示されるように、
最低1つの引数を要求するようになりました。無引数はこれまでサポートしていましたが
意味的におかしいです。
- append, append! - 最後の引数以外に
ドットリストが渡されるとエラーになります。これまで許容していましたが、
エラーを見逃してしまう弊害の方が多いとわかりました。
- util.match: 継承のあるレコードインスタンスのスロットを
位置でマッチさせるやり方を、より筋の通った方法に変えました。以前の仕様はおかしかったので、
それを利用しているコードが無いことを期待しています。
詳しくはこのblogエントリを参照してください。
- twos-complement-factor: 引数に0が渡された時、0を返していたのを-1に修正。srfi-60との一貫性のための変更です。以前の仕様はドキュメントされていたのでこれは非互換な変更になってしまいます。
- string-split: srfi-152に合わせ、空文字列をsplitしようとした場合は
("")でなく空リストを返すように変更。
他のバグフィクス
非常にたくさんあるので、重要なものを挙げます。
Last modified : 2018/07/03 18:36:57 UTC