Clean2.3 Release!
Clean2.3 Releaseされました!
最近Wikiの変更とか活発だったから期待せずに見守っていたわけですが, まさかのリリース来ましたね.
当然ですがCHANGELOGとかNEWFEATUREとかBUGFIXみたいな軟弱な記述はどこにも*1有りません.
…と思ったけど翌日にメーリングリストで解説があったので紹介します.
イカの内容はClean2.2とClean2.3の64bitWindows版で確認しています.
明示的な Unboxed or 正格 配列の構築
Clean2.2(イカ2.2)までは, Unboxed配列({#})はアノテーションを書くことでしか構築出来ませんでしたが,
インラインで構築出来るようになりました.
// 2.2まで xs :: {#Int} xs = {1,2,3} // 2.3 xs = {#1,2,3} // いきなり構築
同じく, 正格配列({!})もその場で構築出来るようになっています.
一意な配列とレコードの更新をするsyntax sugar
Cleanでは配列とレコードが一意である時に限り, 特定の要素を変更した新しい配列(orレコード)の構築を,
値を直に書き換えて, そのまま結果とすることが出来ますが,
この書き換えを行う式の略記が新しく追加されました.
// TestRレコードのyフィールドのみ書き換える :: TestR = { x :: Int , y :: String , z :: (Real, Real) } // 2.2まで # testr = {testr & y = "foobar"} // 2.3 # testr & y = "foobar"
(一意でない値を勝手に書き換えると, 他の名前が参照している値も書き換わってしまうので,
値をコピーしてから一部を変更する必要があります)
さらに, 複数のフィールドを一度に書き換える構文も追加されています.
// yフィールドとxフィールドを書き換える // 2.2まで # testr = {{testr & y = "foobar"} & x = 555} // 2.3 # testr & y = "foobar", x = 555
モジュール
(最後の二つは告知をそのまま書いただけです. 自分で確認してません.)
- ArgEnvWindowsモジュールがArgEnvに改名されました
- TcpモジュールがTcpとTCPIPモジュールに分割されました. ObjectIOモジュールへの依存の有無でモジュールを切り分けたようですが, 相変わらずの命名規則ですね….
- GECとHildeライブラリが削除されてしまいました. どっちも野心的なプロジェクトだったので残念です….
- メルセンヌツイスタが64bit Windowsで動くようになりました
- Gast(自動テストシステム) のDynamicsが64bit Windowsで動くようになりました.ただし, (without dynamic linking)と書いてあるので, コンパイルだけ通る感じかも知れません.
まとめ
あんまり派手な変更が無くてしょんぼり.
LauguageReportにはDynamicで持ち出せる型の制約についてfuture work的なことが書かれたりしていたんですが, それは実装されてないのかな
*1:パッケージと公式サイト内には