package.json
を修正Error:create
関数でエラー型の値を生成できるようにObj:merge
で2つのオブジェクトの併合を得られるように- Fix: チェイン系(インデックスアクセス
[]
、プロパティアクセス.
、関数呼び出し()
)と括弧を組み合わせた時に不正な挙動をするバグを修正 - 関数
Str#charcode_at
Str#to_arr
Str#to_char_arr
Str#to_charcode_arr
Str#to_utf8_byte_arr
Str#to_unicode_codepoint_arr
Str:from_unicode_codepoints
Str:from_utf8_bytes
を追加 - Fix:
Str#codepoint_at
がサロゲートペアに対応していないのを修正 - 配列の範囲外および非整数のインデックスへの代入でエラーを出すように
バージョン0.16.0に記録漏れがありました。
- 関数
Str:from_codepoint
Str#codepoint_at
を追加
- ネームスペースのトップレベルに
var
は定義できなくなりました。(let
は可能) Core:to_str
,テンプレート文字列
でどの値でも文字列へ変換できるように- 指定時間待機する関数
Core:sleep
を追加 exists 変数名
の構文で変数が存在するか判定できるように- オブジェクトを添字で参照できるように(
object['index']
のように) - 「エラー型(
error
)」を導入 Json:parse
がパース失敗時にエラー型の値を返すようにlet
で定義した変数が上書きできてしまうのを修正- 関数
Str:from_codepoint
Str#codepoint_at
を追加
- Breaking Change AiScriptErrorのサブクラス4種にAiScript-の接頭辞を追加(例:SyntaxError→AiScriptSyntaxError)
- Interpreterのコンストラクタの第2引数の要素に
err
(エラーコールバック)を設定できる。これはInterpreter.exec
が失敗した時に加えて、Async:interval
やAsync:timeout
が失敗した場合にも呼び出される。 なお、これを設定した場合は例外throwは発生しなくなる。 - ネイティブ関数は
opts.call
の代わりにopts.topCall
を用いることで上記2つのようにエラーコールバックが呼び出されるように。必要な場合にのみ使うこと。従来エラーキャッチ出来ていたケースでは引き続きopts.call
を使う。
- Mathを強化
&&
,||
演算子の項が正しく変換されない可能性のあるバグを修正
&&
,||
が短絡評価されないバグを修正+=
,-=
演算子で関係のない変数が上書きされる可能性のあるバグを修正
- オブジェクトの値を配列化する
Obj:vals
を追加 - 文字列が
Json:parse
でパース可能であるかを判定する関数Json:parsable
を追加 - or/andの結果が第一引数で確定する時、第二引数を評価しないように
- Fix immediate value check in Async:interval
- 乱数を生成するとき引数の最大値を戻り値に含むように
Date:year
,Date:month
,Date:day
,Date:hour
,Date:minute
,Date:second
に時間数値の引数を渡して時刻指定可能に- array.sortとString用比較関数Str:lt, Str:gtの追加
- 乱数を生成するとき引数の最大値を戻り値に含むように
- Json:stringifyに関数を渡すと不正な値が生成されるのを修正
- 配列プロパティ
map
,filter
,reduce
,find
に渡すコールバック関数が受け取るインデックスを0始まりに @Math:ceil(x: num): num
を追加- 冪乗の
Core:pow
とその糖衣構文^
- 少数のパースを修正
- block comment
/* ... */
- Math:Infinity
- each文の中でbreakとreturnが動作しない問題を修正
- 配列の境界外にアクセスした際にIndexOutOfRangeエラーを発生させるように
- 否定構文
!
- インタプリタ処理速度の調整
- 文字列をシングルクォートでも定義可能に
- for文、loop文の中でreturnが動作しない問題を修正
- 無限ループ時にランタイムがフリーズしないように
- 変数定義の
#
→let
- 変数定義の
$
→var
- 代入の
<-
→=
- 比較の
=
→==
&
→&&
|
→||
? ~ .? ~ .
→if ~ elif ~ else
? x { 42 => yes }
→match x { 42 => true }
yes
no
→true
false
_
→null
<<
→return
~
→for
~~
→each
+ attributeName attributeValue
→#[attributeName attributeValue]
- 真理値の
+
/-
表記方法を廃止 - for、およびeachは配列を返さなくなりました
- ブロック式は
{ }
→eval { }
に - 配列のインデックスは0始まりになりました
- いくつかのstdに含まれるメソッドは、対象の値のプロパティとして利用するようになりました。例:
Str:to_num("123")
->"123".to_num()
Arr:len([1 2 3])
->[1 2 3].len
- etc
continue
break
loop
- 空の関数を定義できない問題を修正
- 空のスクリプトが許可されていない問題を修正
- ネームスペース付き変数のインクリメント、デクリメントを修正
- ネームスペース付き変数への代入ができない問題を修正