aiscript
aiscript copied to clipboard
仕様書がない
どのあたりを定義/説明する仕様書があるといいですかね? (個人的にはエラーの一覧があるといいなと思っています。)
構文のルールがまとまったドキュメントはほしいですね...
- こういう書き方ができる/できない
- 区切り文字は何が使えるなど
- その他説明が必要な特殊な仕様など
今後設計から改善する時にたたき台となるようなドキュメントはあると便利そうです。
逆にエラーの一覧とかはコードを見ればだいたい予想がつくので、優先度は低いかなと思います..
なるほど、doc/syntax.mdを拡張する感じですかね?
空白周りがだいぶややこしいのでそこを書くか許容するよう変更するかしたいです。
特にif(true) print(0)
で構文エラーになるのはほとんどの人が遭遇してるような気がします。
把握してる限りではこんな感じ
空白仕様
// if
if true print(0)
if (true) print(0) // ()外の空白必須
if (true) {print(0)} // ()外の空白必須
// for 括弧無し
for 10 print(0)
for let i 10 print(i)
for let i=2,10 print(i)
// for ()
for(10) print(0)
for(let i 10) print(i)
for(let i=2,10) print(i)
// for {}
for 10 {print(0)} // {前の空白必須
for let i 10 {print(i)} // {前の空白必須
for let i=2,10 {print(i)} // {前の空白必須
// for (){}
for(10){print(0)}
for(let i 10){print(i)}
for(let i=2,10){print(i)}
// each
each let a [] print(0)
each(let a [])print(i)
each let i [] {print(i)} // {前の空白必須
each(let i []){print(i)}
// match
match 1{1 => print(1) 2 => print(2)} // 改行区切りも可
match(1){1 => print(1) 2 => print(2)} // 改行区切りも可
// arr
[10,20,30]
[10 20 30] // 改行区切り可
// obj
{a: 10,b: 20,c: 30} // :後の空白必須
{a: 10 b: 20 c: 30} // :後の空白必須 改行区切りも可
{a: 10;b: 20;c: 30} // :後の空白必須
// etc.
Math:floor(1.5) // :前後の空白不可
:: A { let a = 1 } // A前後の空白必須
eval{print(0)}
if, for, each, matchあたりの書き方はそのうち統一したいですね…
さておき、↑をそのままドキュメントに載せるだけでもかなりマシになりそうな気がします
for文の初期値設定構文に関してはどこにも載ってないですね
for let i=2, 5 { print(i) } // 2 3 4 5 6
今まで実装依存が多かったと思います。 仕様書にまとめることでそれが必要な挙動なのか、議論しやすくなると思います
https://github.com/syuilo/aiscript/blob/work/improve-syntax-doc/docs/syntax.md
試しに @saki-lere さんの文をsyntax.mdにそのまま組み込んでみたものです。(都合上Math:floor
のみA:a
に変えています)
仕様書にまとめることでそれが必要な挙動なのか、議論しやすくなると思います
まずどこまでが仕様なのかを定める必要がありますが、
- 一旦現状の全てを仕様として定義してしまう。問題点は後々仕様変更として対処
- この場で私たちが新しく仕様を定める。
- 何案か出してしゅいろさんに選んでもらう
- しゅいろさんに全部吐かせる のいずれかを選ぶ必要があるように思います。
コンセプトや考え方の上にAiScriptという言語があると思うので、 その辺をある程度は言語化しておきたいところです
機能追加や変更の指標になると思います。