aiscript icon indicating copy to clipboard operation
aiscript copied to clipboard

JSON5のスーパーセットにする

Open takejohn opened this issue 11 months ago • 3 comments

misskey-dev/misskey#6608 AiScriptがJSON5のスーパーセットとなるには以下の言語拡張が必要?

  • オブジェクトリテラル
    • [x] #894
      • #62
    • [ ] #889
      • JSON5IdentifierはECMAScript 5.1のIdentifierNameと同じ
      • 一部の非ASCII文字・$・Unicodeエスケープシーケンス・予約語も使用できるようにする必要がある
  • 文字列
  • 数値
    • [ ] 定数 Infinity, NaN
    • [ ] 整数部分と小数点だけ、小数点と小数部分だけの記法
    • [ ] 指数表記
    • [ ] 16進表記 (JSON5では2進表記や8進表記に対応する必要はない)
  • [ ] コード中のU+2028 (line separator), U+2029 (paragraph separator)を改行として扱う
  • [ ] コード中のU+000B (vertical tab), U+000C (form feed), U+00A0 (non-breaking space), U+FEFF (BOM), その他Unicode Zsカテゴリの文字を空白として扱う
  • [ ] #899

参考

takejohn avatar Dec 25 '24 16:12 takejohn

スーパーセットを目指すのが大変なら、今JSONではなくJSON5にしている理由(例: keyをクォーテーションする必要がないなど?)を満足できる状態にするだけで良い可能性はある

あとはAiSON(仮)を簡単にパースできるユーティリティを作るとか

kakkokari-gtyih avatar Dec 26 '24 05:12 kakkokari-gtyih

スーパーセットを目指すのが大変なら、今JSONではなくJSON5にしている理由(例: keyをクォーテーションする必要がないなど?)を満足できる状態にするだけで良い可能性はある

あとはAiSON(仮)を簡単にパースできるユーティリティを作るとか

メタデータブロックをうまく使えば純粋なAiScript Objectをパースできそう

kakkokari-gtyih avatar Jan 05 '25 02:01 kakkokari-gtyih

パーサを使うならInfinityNaNは定数ではなく、リテラルにするなど特別に扱う必要がありそう

takejohn avatar Jan 05 '25 04:01 takejohn

パーサを使うならInfinityNaNは定数ではなく、リテラルにするなど特別に扱う必要がありそう

リテラルにしたら互換性がしんどすぎるからAiScript自体の仕様には手を付けずにAiSONとして対応したほうがよさそうだな

takejohn avatar Aug 08 '25 06:08 takejohn

  • スーパーセットにすることによるメリットがそこまで大きくなさそう
  • 現状の仕様でも大抵のJSON5データはAiSONとして読み込めそう
  • AiScriptは方向性としては多機能・高機能よりはlight-weightな言語にしたい

という観点から、スーパーセットにしなくても良いのではないかと思ってきています

syuilo avatar Nov 17 '25 23:11 syuilo