===== 概要 ===== * MiniScriptの次期バージョン・MiniScript2の最終候補バージョンが公開されてます。 * https://github.com/JoeStrout/miniscript2/releases/tag/v2.0-fc1 * https://github.com/JoeStrout/miniscript2/blob/main/docs/NewInMS2.pdf * 機能を記載してみるけど、あくまで私見なので参考程度に見てね。 * 試しに動かしてみたレポートも別途書く予定です。 ===== 変更点(主に1から2への変更) ===== * まず資料 * https://github.com/JoeStrout/miniscript2/blob/main/notes/LANGUAGE_CHANGES.md ---- * 1個目:乗算の計算の順番が変更になった。 * MS1は前から乗算していくんだけど、他の言語は後ろから順番に積み上げていく方式とのこと。 * よって、それに合わせる形で後ろから(右側の数値から)乗算していく形式に変更された。 ---- * 2個目:数値リテラルの点構文 * つまり「4.foo」「3.14.foo」みたいな書き方を許すとのこと。 ---- * 3個目:フリーズ構文 * https://github.com/JoeStrout/miniscript2/blob/main/notes/FROZEN_VALUES.md * C言語でいうconstのような値を動的に定義することができる機能のよう。 * 勝手に更新されたくない場合は便利かもしれない。 ---- * 4個目:関数式 * end function outerってキーワードが追加されたみたいだけど、関数への参照を得るみたい。どういう効果かは具体的には不明。 ---- * 5個目:mapの反復順序 * MiniScriptの仕様としてmapは順序が定義されていない。ただ、C#はDictionaryクラスを利用している関係上挿入時にキーを返していたため、C++版も同じようにするとのこと。 ---- * 6番目:文字列のインデックス付け * どうもC#版とC++版ではインデックス付の方法が異なっていた(C++がUTF-8、C#がUTF-16)ため、それが統一されたということみたい。 ---- * 7番目:エラー型の追加 * ランタイムエラーの出力を特定の型で受け取ることができる。これはだいぶ助かるのではと思った。今までは数値型で確認するとかだったし。 ---- * 8番目:プロパティセッター * 主にクラスを使うときに影響するみたいで、変数アクセスの際にアクセスできるメソッドを選定できる感じ、かなあ。 * ちょっと使ってみないとわからない。 * あとパフォーマンスにも影響があるので使い込む場合影響ありそう。 ---- * 最後にキーワード情報 * info(x):フリーズ済みの値を返す(3番目) * funcRef:無名関数lambdaみたいな使い方になりそう(4番目) * listの内部の処理方法が変わったみたい。ちょっと内容わからんので調べてみる * mapにfrozenというプロパティが追加された(3番目) * errorにmessage/inner/stack/isaプロパティが追加された。(7番目) ===== 軽く利用してみた ===== * 超遅いフィボナッチ関数について起動してみたところ・・・まったく返ってこない内容が60秒で返ってきた!w * 今までの文法は基本的に使えるのと、全体的に高速化されているのでかなり快適になっていると思う。 * とはいうもののやはり遅いケースは存在するのでそういうのは避ける必要がある。 * 個人的にはエラー型が存在するのとフリーズ変数の存在が大きいかなあと思った。