|
1 | 1 | [Read translated version (en)](./translations/en/CHANGELOG.md) |
2 | 2 |
|
| 3 | +# 1.0.0 |
| 4 | + |
| 5 | +- 新しいAiScriptパーサーを実装 |
| 6 | + - スペースの厳密さが緩和 |
| 7 | + - **Breaking Change** 改行トークンを導入。改行の扱いが今までより厳密になりました。改行することができる部分以外では文法エラーになります。 |
| 8 | +- 文字列リテラルやテンプレートで、`\`とそれに続く1文字は全てエスケープシーケンスとして扱われるように |
| 9 | +- 文法エラーの表示を改善。理由を詳細に表示するように。 |
| 10 | +- 複数行のコメントがある時に文法エラーの表示行数がずれる問題を解消しました。 |
| 11 | +- 実行時エラーの発生位置が表示されるように。 |
| 12 | +- **Breaking Change** パースの都合によりmatch文の構文を変更。パターンの前に`case`キーワードが必要となり、`*`は`default`に変更。 |
| 13 | +- **Breaking Change** 多くの予約語を追加。これまで変数名等に使えていた名前に影響が出る可能性があります。 |
| 14 | +- **Breaking Change** 配列及び関数の引数において、空白区切りが使用できなくなりました。`,`または改行が必要です。 |
| 15 | +- **Breaking Change** 関数同士の比較の実装 |
| 16 | +- **Breaking Change** `+`や`!`などの演算子の優先順位に変更があります。新しい順序は[syntax.md](docs/syntax.md#%E6%BC%94%E7%AE%97%E5%AD%90)を参照して下さい。 |
| 17 | +- **Breaking Change** 組み込み関数`Num:to_hex`は組み込みプロパティ`num#to_hex`に移動しました。 |
| 18 | +- **Breaking Change** `arr.sort`を安定ソートに変更 |
| 19 | +- while文とdo-while文を追加 |
| 20 | +- 省略可能引数と初期値付き引数を追加。引数名に`?`を後置することでその引数は省略可能となります。引数に`=<式>`を後置すると引数に初期値を設定できます。省略可能引数は初期値`null`の引数と同等です。 |
| 21 | + - BREAKING: いずれでもない引数が省略されると即時エラーとなるようになりました。 |
| 22 | +- `Date:parse`がパース失敗時にエラー型の値を返すように |
| 23 | +- AiScriptのスクリプトファイルを表す拡張子が`.is`から`.ais`に変更されました。 |
| 24 | +- ファイル実行機能により読み取られるファイルの名前が`test.is`から`main.ais`へ変更されました。 |
| 25 | +- 関数`Math:gen_rng`に第二引数`algorithm`をオプション引数として追加。 |
| 26 | + - アルゴリズムを`chacha20`、`rc4`、`rc4_legacy`から選べるようになりました。 |
| 27 | + - **Breaking Change** `algorithm`を指定しない場合、`chacha20`が選択されます。 |
| 28 | +- Fix: **Breaking Change** `Math:rnd`が範囲外の値を返す可能性があるのをアルゴリズムの変更により修正。 |
| 29 | +- Breaking For Hosts: 曖昧な型を変更しました。(TypeScriptの型のみの変更であり、JavaScriptの値としては変更はありません) |
| 30 | + - `Interpreter`のオプションのlog関数の引数の型 |
| 31 | + - `AiScriptError`のinfoの型 |
| 32 | + - `Interpreter.collectMetadata`、`valToJs`の戻り値の型 |
| 33 | + - `Node`型で存在しないプロパティーの削除 |
| 34 | +- 関数`Core:pow`、`Core:div`、`Math:sqrt`が例外を発生する問題を修正。 |
| 35 | + - `0 / 0`、`-1 ^ 0.5`、`Math:sqrt(-1)`が`NaN`を返すようになります。 |
| 36 | + - `NaN`は`v != v`により検出できます。 |
| 37 | +- 変数宣言(each文での宣言を含む)と関数の仮引数で分割代入ができるように(名前空間内では分割代入を使用した宣言はできません。) |
| 38 | +- For Hosts: Interpreterのオプションに`irqRate`と`irqSleep`を追加 |
| 39 | + - `irqRate`はInterpreterの定期休止が何ステップに一回起こるかを指定する数値 |
| 40 | + - `irqSleep`は休止時間をミリ秒で指定する数値、または休止ごとにawaitされるPromiseを返す関数 |
| 41 | +- **Breaking Change** match式において、case節とdefault節の間に区切り文字が必須になりました。case節の後にdefault節を区切り文字なしで続けると文法エラーになります。 |
| 42 | +- **Breaking Change** if式やmatch式、for文の内容が1つの文である場合にもスコープが生成されるようになりました。これらの構文内で定義された変数は外部から参照できなくなります。 |
| 43 | +- ランタイムエラーにコールスタックの情報を追加。 |
| 44 | +- For Hosts: いくつかの型で args を params にリネームしました。 |
| 45 | +- 複数の改行が1つの改行と同等に扱われるようになりました。次に示す部分で複数の改行を挿入できます。 |
| 46 | + - 空のmatch式の波括弧内および、match式の各case節やdefault節の前後 |
| 47 | + - 引数のない関数呼び出しの丸括弧内および、関数呼び出しの各引数の前後 |
| 48 | + - 引数のない関数定義の丸括弧内および、関数定義の各引数の前後 |
| 49 | + - if式において、then節やelif節、else節の間 |
| 50 | + - 単項演算や二項演算において、バックスラッシュの後 |
| 51 | + - 変数定義において、等号と式の間 |
| 52 | + - 属性と文の間 |
| 53 | +- テンプレートリテラルに波括弧を含む式を埋め込むことができるようになりました。 |
| 54 | +- **Breaking Change** 複合代入文(`+=`, `-=`)の左辺が1回だけ評価されるようになりました。 |
| 55 | +- For Hosts: `interpreter.pause()`で実行の一時停止ができるように |
| 56 | + - `interpreter.unpause()`で再開 |
| 57 | + - 再開後に`Async:`系の待ち時間がリセットされる不具合がありますが、修正の目処は立っていません |
| 58 | +- テンプレートリテラル内に埋め込まれた式の先頭および末尾の改行が許容されるようになりました。 |
| 59 | +- 単項演算子の正号 `+`・負号 `-`が数値リテラル以外の式にも使用できるようになりました。 |
| 60 | +- 以下の型注釈ができるようになりました。 |
| 61 | + - 関数宣言および関数型でのジェネリクス |
| 62 | + - ユニオン型 |
| 63 | + - error型 |
| 64 | + - never型 |
| 65 | +- 関数`Obj:pick`を追加 |
| 66 | +- オブジェクトリテラルのキーに文字列リテラルを記述できるようになりました。 |
| 67 | +- return文、break文、continue文の挙動が変更されました。 |
| 68 | + - Fix: eval式やif式内でreturn文あるいはbreak文、continue文を使用すると不正な値が取り出せる不具合を修正しました。 |
| 69 | + - return文は関数スコープ内でないと文法エラーになります。 |
| 70 | + - ラベルが省略されたbreak文およびcontinue文は反復処理文(for, each, while, do-while, loop)のスコープ内でないと文法エラーになります。 |
| 71 | + - return文は常に関数から脱出します。 |
| 72 | + - ラベルが省略されたbreak文は必ず最も内側の反復処理文の処理を中断し、ループから脱出します。 |
| 73 | + - continue文は必ず最も内側の反復処理文の処理を中断し、ループの先頭に戻ります。 |
| 74 | + - eval, if, match, loop, while, do-while, for, eachにラベルを付けてbreak文やcontinue文で指定したブロックから脱出できるようになります。eval, if, matchから脱出するbreak文には値を指定することができます。 |
| 75 | +- 名前空間下の変数定義に属性を付与できるようになりました。 |
| 76 | +- sync版メソッドを使用して同期的に実行できるようになりました。 |
| 77 | +- For Hosts: AiScriptのオブジェクトの表記法を利用したデータ交換用フォーマット「AiScript Object Notation (AiSON)」およびそのパーサーを追加しました。 |
| 78 | + - 現在、`AiSON.parse()`(パースしてJavaScriptオブジェクトに変換する)が使用できます。 |
| 79 | + - 通常のAiScriptと異なるのは以下の点です: |
| 80 | + - リテラルはトップレベルにひとつだけしか許可されません。 |
| 81 | + - 動的な式(関数・オブジェクトのvalueに対する動的なバインディングなど)は許可されません。 |
| 82 | + - 名前空間・メタデータなど、リテラルとコメント以外をトップレベルに書くことは許可されていません。 |
| 83 | + |
3 | 84 | # 0.19.0 |
4 | 85 |
|
5 | 86 | - `Date:year`系の関数に0を渡すと現在時刻になる問題を修正 |
|
0 commit comments