diff --git a/CHANGELOG.md b/CHANGELOG.md index faaca517..fd4d22e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,86 @@ [Read translated version (en)](./translations/en/CHANGELOG.md) +# 1.0.0 + +- 新しいAiScriptパーサーを実装 + - スペースの厳密さが緩和 + - **Breaking Change** 改行トークンを導入。改行の扱いが今までより厳密になりました。改行することができる部分以外では文法エラーになります。 +- 文字列リテラルやテンプレートで、`\`とそれに続く1文字は全てエスケープシーケンスとして扱われるように +- 文法エラーの表示を改善。理由を詳細に表示するように。 +- 複数行のコメントがある時に文法エラーの表示行数がずれる問題を解消しました。 +- 実行時エラーの発生位置が表示されるように。 +- **Breaking Change** パースの都合によりmatch文の構文を変更。パターンの前に`case`キーワードが必要となり、`*`は`default`に変更。 +- **Breaking Change** 多くの予約語を追加。これまで変数名等に使えていた名前に影響が出る可能性があります。 +- **Breaking Change** 配列及び関数の引数において、空白区切りが使用できなくなりました。`,`または改行が必要です。 +- **Breaking Change** 関数同士の比較の実装 +- **Breaking Change** `+`や`!`などの演算子の優先順位に変更があります。新しい順序は[syntax.md](docs/syntax.md#%E6%BC%94%E7%AE%97%E5%AD%90)を参照して下さい。 +- **Breaking Change** 組み込み関数`Num:to_hex`は組み込みプロパティ`num#to_hex`に移動しました。 +- **Breaking Change** `arr.sort`を安定ソートに変更 +- while文とdo-while文を追加 +- 省略可能引数と初期値付き引数を追加。引数名に`?`を後置することでその引数は省略可能となります。引数に`=<式>`を後置すると引数に初期値を設定できます。省略可能引数は初期値`null`の引数と同等です。 + - BREAKING: いずれでもない引数が省略されると即時エラーとなるようになりました。 +- `Date:parse`がパース失敗時にエラー型の値を返すように +- AiScriptのスクリプトファイルを表す拡張子が`.is`から`.ais`に変更されました。 +- ファイル実行機能により読み取られるファイルの名前が`test.is`から`main.ais`へ変更されました。 +- 関数`Math:gen_rng`に第二引数`algorithm`をオプション引数として追加。 + - アルゴリズムを`chacha20`、`rc4`、`rc4_legacy`から選べるようになりました。 + - **Breaking Change** `algorithm`を指定しない場合、`chacha20`が選択されます。 +- Fix: **Breaking Change** `Math:rnd`が範囲外の値を返す可能性があるのをアルゴリズムの変更により修正。 +- Breaking For Hosts: 曖昧な型を変更しました。(TypeScriptの型のみの変更であり、JavaScriptの値としては変更はありません) + - `Interpreter`のオプションのlog関数の引数の型 + - `AiScriptError`のinfoの型 + - `Interpreter.collectMetadata`、`valToJs`の戻り値の型 + - `Node`型で存在しないプロパティーの削除 +- 関数`Core:pow`、`Core:div`、`Math:sqrt`が例外を発生する問題を修正。 + - `0 / 0`、`-1 ^ 0.5`、`Math:sqrt(-1)`が`NaN`を返すようになります。 + - `NaN`は`v != v`により検出できます。 +- 変数宣言(each文での宣言を含む)と関数の仮引数で分割代入ができるように(名前空間内では分割代入を使用した宣言はできません。) +- For Hosts: Interpreterのオプションに`irqRate`と`irqSleep`を追加 + - `irqRate`はInterpreterの定期休止が何ステップに一回起こるかを指定する数値 + - `irqSleep`は休止時間をミリ秒で指定する数値、または休止ごとにawaitされるPromiseを返す関数 +- **Breaking Change** match式において、case節とdefault節の間に区切り文字が必須になりました。case節の後にdefault節を区切り文字なしで続けると文法エラーになります。 +- **Breaking Change** if式やmatch式、for文の内容が1つの文である場合にもスコープが生成されるようになりました。これらの構文内で定義された変数は外部から参照できなくなります。 +- ランタイムエラーにコールスタックの情報を追加。 +- For Hosts: いくつかの型で args を params にリネームしました。 +- 複数の改行が1つの改行と同等に扱われるようになりました。次に示す部分で複数の改行を挿入できます。 + - 空のmatch式の波括弧内および、match式の各case節やdefault節の前後 + - 引数のない関数呼び出しの丸括弧内および、関数呼び出しの各引数の前後 + - 引数のない関数定義の丸括弧内および、関数定義の各引数の前後 + - if式において、then節やelif節、else節の間 + - 単項演算や二項演算において、バックスラッシュの後 + - 変数定義において、等号と式の間 + - 属性と文の間 +- テンプレートリテラルに波括弧を含む式を埋め込むことができるようになりました。 +- **Breaking Change** 複合代入文(`+=`, `-=`)の左辺が1回だけ評価されるようになりました。 +- For Hosts: `interpreter.pause()`で実行の一時停止ができるように + - `interpreter.unpause()`で再開 + - 再開後に`Async:`系の待ち時間がリセットされる不具合がありますが、修正の目処は立っていません +- テンプレートリテラル内に埋め込まれた式の先頭および末尾の改行が許容されるようになりました。 +- 単項演算子の正号 `+`・負号 `-`が数値リテラル以外の式にも使用できるようになりました。 +- 以下の型注釈ができるようになりました。 + - 関数宣言および関数型でのジェネリクス + - ユニオン型 + - error型 + - never型 +- 関数`Obj:pick`を追加 +- オブジェクトリテラルのキーに文字列リテラルを記述できるようになりました。 +- return文、break文、continue文の挙動が変更されました。 + - Fix: eval式やif式内でreturn文あるいはbreak文、continue文を使用すると不正な値が取り出せる不具合を修正しました。 + - return文は関数スコープ内でないと文法エラーになります。 + - ラベルが省略されたbreak文およびcontinue文は反復処理文(for, each, while, do-while, loop)のスコープ内でないと文法エラーになります。 + - return文は常に関数から脱出します。 + - ラベルが省略されたbreak文は必ず最も内側の反復処理文の処理を中断し、ループから脱出します。 + - continue文は必ず最も内側の反復処理文の処理を中断し、ループの先頭に戻ります。 + - eval, if, match, loop, while, do-while, for, eachにラベルを付けてbreak文やcontinue文で指定したブロックから脱出できるようになります。eval, if, matchから脱出するbreak文には値を指定することができます。 +- 名前空間下の変数定義に属性を付与できるようになりました。 +- sync版メソッドを使用して同期的に実行できるようになりました。 +- For Hosts: AiScriptのオブジェクトの表記法を利用したデータ交換用フォーマット「AiScript Object Notation (AiSON)」およびそのパーサーを追加しました。 + - 現在、`AiSON.parse()`(パースしてJavaScriptオブジェクトに変換する)が使用できます。 + - 通常のAiScriptと異なるのは以下の点です: + - リテラルはトップレベルにひとつだけしか許可されません。 + - 動的な式(関数・オブジェクトのvalueに対する動的なバインディングなど)は許可されません。 + - 名前空間・メタデータなど、リテラルとコメント以外をトップレベルに書くことは許可されていません。 + # 0.19.0 - `Date:year`系の関数に0を渡すと現在時刻になる問題を修正 diff --git a/unreleased/IEEE 754 compliance around NaN.md b/unreleased/IEEE 754 compliance around NaN.md deleted file mode 100644 index 33aa48c0..00000000 --- a/unreleased/IEEE 754 compliance around NaN.md +++ /dev/null @@ -1,3 +0,0 @@ -- 関数`Core:pow`、`Core:div`、`Math:sqrt`が例外を発生する問題を修正。 - - `0 / 0`、`-1 ^ 0.5`、`Math:sqrt(-1)`が`NaN`を返すようになります。 - - `NaN`は`v != v`により検出できます。 diff --git a/unreleased/accept-multi-new-line.md b/unreleased/accept-multi-new-line.md deleted file mode 100644 index 2a85e353..00000000 --- a/unreleased/accept-multi-new-line.md +++ /dev/null @@ -1,8 +0,0 @@ -- 複数の改行が1つの改行と同等に扱われるようになりました。次に示す部分で複数の改行を挿入できます。 - - 空のmatch式の波括弧内および、match式の各case節やdefault節の前後 - - 引数のない関数呼び出しの丸括弧内および、関数呼び出しの各引数の前後 - - 引数のない関数定義の丸括弧内および、関数定義の各引数の前後 - - if式において、then節やelif節、else節の間 - - 単項演算や二項演算において、バックスラッシュの後 - - 変数定義において、等号と式の間 - - 属性と文の間 diff --git a/unreleased/aison.md b/unreleased/aison.md deleted file mode 100644 index c92f17d3..00000000 --- a/unreleased/aison.md +++ /dev/null @@ -1,6 +0,0 @@ -- For Hosts: AiScriptのオブジェクトの表記法を利用したデータ交換用フォーマット「AiScript Object Notation (AiSON)」およびそのパーサーを追加しました。 - - 現在、`AiSON.parse()`(パースしてJavaScriptオブジェクトに変換する)が使用できます。 - - 通常のAiScriptと異なるのは以下の点です: - - リテラルはトップレベルにひとつだけしか許可されません。 - - 動的な式(関数・オブジェクトのvalueに対する動的なバインディングなど)は許可されません。 - - 名前空間・メタデータなど、リテラルとコメント以外をトップレベルに書くことは許可されていません。 diff --git a/unreleased/assign-left-eval-once.md b/unreleased/assign-left-eval-once.md deleted file mode 100644 index dddb19d2..00000000 --- a/unreleased/assign-left-eval-once.md +++ /dev/null @@ -1 +0,0 @@ -- **Breaking Change** 複合代入文(`+=`, `-=`)の左辺が1回だけ評価されるようになりました。 diff --git a/unreleased/attr-under-ns.md b/unreleased/attr-under-ns.md deleted file mode 100644 index 2cdf909b..00000000 --- a/unreleased/attr-under-ns.md +++ /dev/null @@ -1 +0,0 @@ -- 名前空間下の変数定義に属性を付与できるようになりました。 diff --git a/unreleased/braces-in-template-expression.md b/unreleased/braces-in-template-expression.md deleted file mode 100644 index ed05c887..00000000 --- a/unreleased/braces-in-template-expression.md +++ /dev/null @@ -1 +0,0 @@ -- テンプレートリテラルに波括弧を含む式を埋め込むことができるようになりました。 diff --git a/unreleased/callstack.md b/unreleased/callstack.md deleted file mode 100644 index c7ec3085..00000000 --- a/unreleased/callstack.md +++ /dev/null @@ -1 +0,0 @@ -- ランタイムエラーにコールスタックの情報を追加。 diff --git a/unreleased/date-parse-err.md b/unreleased/date-parse-err.md deleted file mode 100644 index f90abf02..00000000 --- a/unreleased/date-parse-err.md +++ /dev/null @@ -1 +0,0 @@ -- `Date:parse`がパース失敗時にエラー型の値を返すように diff --git a/unreleased/destr-define.md b/unreleased/destr-define.md deleted file mode 100644 index 1ec0c52e..00000000 --- a/unreleased/destr-define.md +++ /dev/null @@ -1 +0,0 @@ -- 変数宣言(each文での宣言を含む)と関数の仮引数で分割代入ができるように(名前空間内では分割代入を使用した宣言はできません。) diff --git a/unreleased/irq-config.md b/unreleased/irq-config.md deleted file mode 100644 index 5e3edf64..00000000 --- a/unreleased/irq-config.md +++ /dev/null @@ -1,3 +0,0 @@ -- For Hosts: Interpreterのオプションに`irqRate`と`irqSleep`を追加 - - `irqRate`はInterpreterの定期休止が何ステップに一回起こるかを指定する数値 - - `irqSleep`は休止時間をミリ秒で指定する数値、または休止ごとにawaitされるPromiseを返す関数 diff --git a/unreleased/jump-statements.md b/unreleased/jump-statements.md deleted file mode 100644 index 6a6fcc37..00000000 --- a/unreleased/jump-statements.md +++ /dev/null @@ -1,8 +0,0 @@ -- return文、break文、continue文の挙動が変更されました。 - - Fix: eval式やif式内でreturn文あるいはbreak文、continue文を使用すると不正な値が取り出せる不具合を修正しました。 - - return文は関数スコープ内でないと文法エラーになります。 - - ラベルが省略されたbreak文およびcontinue文は反復処理文(for, each, while, do-while, loop)のスコープ内でないと文法エラーになります。 - - return文は常に関数から脱出します。 - - ラベルが省略されたbreak文は必ず最も内側の反復処理文の処理を中断し、ループから脱出します。 - - continue文は必ず最も内側の反復処理文の処理を中断し、ループの先頭に戻ります。 - - eval, if, match, loop, while, do-while, for, eachにラベルを付けてbreak文やcontinue文で指定したブロックから脱出できるようになります。eval, if, matchから脱出するbreak文には値を指定することができます。 diff --git a/unreleased/match-sep-before-default.md b/unreleased/match-sep-before-default.md deleted file mode 100644 index 3b87a325..00000000 --- a/unreleased/match-sep-before-default.md +++ /dev/null @@ -1 +0,0 @@ -- **Breaking Change** match式において、case節とdefault節の間に区切り文字が必須になりました。case節の後にdefault節を区切り文字なしで続けると文法エラーになります。 diff --git a/unreleased/new-lines-in-template-expression.md b/unreleased/new-lines-in-template-expression.md deleted file mode 100644 index e74509c0..00000000 --- a/unreleased/new-lines-in-template-expression.md +++ /dev/null @@ -1 +0,0 @@ -- テンプレートリテラル内に埋め込まれた式の先頭および末尾の改行が許容されるようになりました。 diff --git a/unreleased/next-past.md b/unreleased/next-past.md deleted file mode 100644 index 6f2fd89e..00000000 --- a/unreleased/next-past.md +++ /dev/null @@ -1,14 +0,0 @@ -- 新しいAiScriptパーサーを実装 - - スペースの厳密さが緩和 - - **Breaking Change** 改行トークンを導入。改行の扱いが今までより厳密になりました。改行することができる部分以外では文法エラーになります。 -- 文字列リテラルやテンプレートで、`\`とそれに続く1文字は全てエスケープシーケンスとして扱われるように -- 文法エラーの表示を改善。理由を詳細に表示するように。 -- 複数行のコメントがある時に文法エラーの表示行数がずれる問題を解消しました。 -- 実行時エラーの発生位置が表示されるように。 -- **Breaking Change** パースの都合によりmatch文の構文を変更。パターンの前に`case`キーワードが必要となり、`*`は`default`に変更。 -- **Breaking Change** 多くの予約語を追加。これまで変数名等に使えていた名前に影響が出る可能性があります。 -- **Breaking Change** 配列及び関数の引数において、空白区切りが使用できなくなりました。`,`または改行が必要です。 -- **Breaking Change** 関数同士の比較の実装 -- **Breaking Change** `+`や`!`などの演算子の優先順位に変更があります。新しい順序は[syntax.md](docs/syntax.md#%E6%BC%94%E7%AE%97%E5%AD%90)を参照して下さい。 -- **Breaking Change** 組み込み関数`Num:to_hex`は組み込みプロパティ`num#to_hex`に移動しました。 -- **Breaking Change** `arr.sort`を安定ソートに変更 diff --git a/unreleased/obj-extract b/unreleased/obj-extract deleted file mode 100644 index 1d807b8e..00000000 --- a/unreleased/obj-extract +++ /dev/null @@ -1 +0,0 @@ -- 関数`Obj:pick`を追加 diff --git a/unreleased/object-key-string.md b/unreleased/object-key-string.md deleted file mode 100644 index b04b8f29..00000000 --- a/unreleased/object-key-string.md +++ /dev/null @@ -1 +0,0 @@ -- オブジェクトリテラルのキーに文字列リテラルを記述できるようになりました。 diff --git a/unreleased/optional-args.md b/unreleased/optional-args.md deleted file mode 100644 index 99ffc49d..00000000 --- a/unreleased/optional-args.md +++ /dev/null @@ -1,2 +0,0 @@ -- 省略可能引数と初期値付き引数を追加。引数名に`?`を後置することでその引数は省略可能となります。引数に`=<式>`を後置すると引数に初期値を設定できます。省略可能引数は初期値`null`の引数と同等です。 - - BREAKING: いずれでもない引数が省略されると即時エラーとなるようになりました。 diff --git a/unreleased/pause.md b/unreleased/pause.md deleted file mode 100644 index 9693e2c8..00000000 --- a/unreleased/pause.md +++ /dev/null @@ -1,3 +0,0 @@ -- For Hosts: `interpreter.pause()`で実行の一時停止ができるように - - `interpreter.unpause()`で再開 - - 再開後に`Async:`系の待ち時間がリセットされる不具合がありますが、修正の目処は立っていません diff --git a/unreleased/random algorithms.md b/unreleased/random algorithms.md deleted file mode 100644 index 4a922fd1..00000000 --- a/unreleased/random algorithms.md +++ /dev/null @@ -1,4 +0,0 @@ -- 関数`Math:gen_rng`に第二引数`algorithm`をオプション引数として追加。 - - アルゴリズムを`chacha20`、`rc4`、`rc4_legacy`から選べるようになりました。 - - **Breaking Change** `algorithm`を指定しない場合、`chacha20`が選択されます。 -- Fix: **Breaking Change** `Math:rnd`が範囲外の値を返す可能性があるのをアルゴリズムの変更により修正。 diff --git a/unreleased/rename-arg-param.md b/unreleased/rename-arg-param.md deleted file mode 100644 index dfc71e0d..00000000 --- a/unreleased/rename-arg-param.md +++ /dev/null @@ -1 +0,0 @@ -- For Hosts: いくつかの型で args を params にリネームしました。 diff --git a/unreleased/script-file.md b/unreleased/script-file.md deleted file mode 100644 index abe29592..00000000 --- a/unreleased/script-file.md +++ /dev/null @@ -1,2 +0,0 @@ -- AiScriptのスクリプトファイルを表す拡張子が`.is`から`.ais`に変更されました。 -- ファイル実行機能により読み取られるファイルの名前が`test.is`から`main.ais`へ変更されました。 diff --git a/unreleased/single-statement-clause-scope.md b/unreleased/single-statement-clause-scope.md deleted file mode 100644 index a86206a7..00000000 --- a/unreleased/single-statement-clause-scope.md +++ /dev/null @@ -1 +0,0 @@ -- **Breaking Change** if式やmatch式、for文の内容が1つの文である場合にもスコープが生成されるようになりました。これらの構文内で定義された変数は外部から参照できなくなります。 diff --git a/unreleased/strictify-types.md b/unreleased/strictify-types.md deleted file mode 100644 index 7f58fefc..00000000 --- a/unreleased/strictify-types.md +++ /dev/null @@ -1,5 +0,0 @@ -- Breaking For Hosts: 曖昧な型を変更しました。(TypeScriptの型のみの変更であり、JavaScriptの値としては変更はありません) - - `Interpreter`のオプションのlog関数の引数の型 - - `AiScriptError`のinfoの型 - - `Interpreter.collectMetadata`、`valToJs`の戻り値の型 - - `Node`型で存在しないプロパティーの削除 diff --git a/unreleased/sync.md b/unreleased/sync.md deleted file mode 100644 index 53a600bb..00000000 --- a/unreleased/sync.md +++ /dev/null @@ -1 +0,0 @@ -- sync版メソッドを使用して同期的に実行できるようになりました。 diff --git a/unreleased/unary-sign-operators.md b/unreleased/unary-sign-operators.md deleted file mode 100644 index e064b955..00000000 --- a/unreleased/unary-sign-operators.md +++ /dev/null @@ -1 +0,0 @@ -- 単項演算子の正号 `+`・負号 `-`が数値リテラル以外の式にも使用できるようになりました。 diff --git a/unreleased/unified-type-annotation.md b/unreleased/unified-type-annotation.md deleted file mode 100644 index 480891d4..00000000 --- a/unreleased/unified-type-annotation.md +++ /dev/null @@ -1,5 +0,0 @@ -- 以下の型注釈ができるようになりました。 - - 関数宣言および関数型でのジェネリクス - - ユニオン型 - - error型 - - never型 diff --git a/unreleased/while.md b/unreleased/while.md deleted file mode 100644 index c49dc5c1..00000000 --- a/unreleased/while.md +++ /dev/null @@ -1 +0,0 @@ -- while文とdo-while文を追加