Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AiScript Nextに盛り込む変更点を考える #396

Open
5 of 8 tasks
marihachi opened this issue Oct 9, 2023 · 28 comments
Open
5 of 8 tasks

AiScript Nextに盛り込む変更点を考える #396

marihachi opened this issue Oct 9, 2023 · 28 comments

Comments

@marihachi
Copy link
Contributor

marihachi commented Oct 9, 2023

AiScript Nextをリリースする時に破壊的変更をまとめてしちゃおうプロジェクト。

専用ブランチを用意してそこに追加していく方が良いかも
ブランチ作りました → aiscript-next

これも含めたほうが良いという変更点があれば教えてください
このissueは目次として使うので各問題に対するディスカッションは個別のissueを立てて行ってください

解決方法が定まらない問題や時間のかかる問題は今後の課題とし、このリストからは除外することがあります

やること?

@FineArchs
Copy link
Member

空白・改行による区切りの再検討もそうですかね?

@marihachi
Copy link
Contributor Author

個別にissue立てます

@FineArchs
Copy link
Member

Json:parseがエラー型を返すようになったのでいつかJson:parsableを廃止しようと思っていたのですが、このタイミングでいいですかね?

@salano-ym
Copy link
Member

残すと問題ありますか?

@FineArchs
Copy link
Member

Json:parsableでチェックしてからJson:parseすると単純に考えて倍の時間がかかるので非推奨にしたいんですよね
非推奨にしても残すと使い続ける人がいると思うので出来れば消したいです。

@salano-ym
Copy link
Member

salano-ym commented Oct 11, 2023

廃止するならチェックにif Core:type(v)!='error' ...と書くのは少しくどいのでエラー用の構文/演算子/関数等あると便利だと思います。

@FineArchs
Copy link
Member

構文案

catch(v) {...}
// if Core:type(v)=='error' {...}に同等

@salano-ym
Copy link
Member

投げてないものをcatchするのは少し変な気がします。
成功と失敗で別々に処理できる方がいいのと成功時が先に来る方が分かりやすいかとif Core:is_ok(v) {} else {}
???.等もあると良い?

ついでに標準ライブラリ等でnullを返している所を全部errorにしてしまうのもいいかもしれません

@FineArchs
Copy link
Member

if Core:type(v)!='error' ...if Core:is_ok(v) ...だと書きやすさがあまり変わらないような…?
???.は私も欲しいですね

ついでに標準ライブラリ等でnullを返している所を全部errorにしてしまうのもいいかもしれません

これをやる前にnullとerrorの使い分けを考えておきたいです。やろうと思えばnullをerrorに統合出来るくらいには境目が曖昧なので

@salano-ym
Copy link
Member

大雑把に考えると値の存在を期待しているかどうかで分けられると思います。
Json:parseが返すnullは正常値なのでResult型で言うところのOk(null)Error()のような。

let a = {v: 1}
<: a.w

と書いたとして、wにデフォルト値としてnullが設定されてると考えるならnull、そもそも存在しないwにアクセスすべきでないならerror

@FineArchs
Copy link
Member

#403 #404
個別issue立てました。

@FineArchs
Copy link
Member

名前空間名の再考もしたほうがいいかもしれません。
主にCore:Util:の違いがわかりにくいという問題があります。

@marihachi

This comment was marked as off-topic.

@marihachi marihachi added this to the AiScript Next milestone Oct 12, 2023
@marihachi marihachi pinned this issue Oct 12, 2023
@marihachi
Copy link
Contributor Author

marihachi commented Oct 15, 2023

ブランチ作ったので、ここにマージしていこう
aiscript-next

@marihachi
Copy link
Contributor Author

#403 #404 ってNextじゃないといけないですか。破壊的変更ありますかね

@FineArchs
Copy link
Member

#403 #404 ってNextじゃないといけないですか。破壊的変更ありますかね

(isが用語化する点を除き)ほぼ無いと思います。Nextじゃなくても良さそう

@FineArchs
Copy link
Member

@marihachi とりあえずここに書きますが、新パーサーのバグ報告です。
//のコメントがある行の末尾の改行が無視されてしまうようです。
例えば

<: 'hoge' // comment
<: 'huga'

のようなスクリプトで

Multiple statements cannot be placed on a single line. (Line 2, Column 1)

のようなエラーが出ます。

@marihachi
Copy link
Contributor Author

ありがとうございます
修正しますね

@ikasoba
Copy link
Collaborator

ikasoba commented Jan 16, 2024

関数同士の比較を行えると便利そう? #527

結構あとから提案しちゃったけどどうかしら

@marihachi marihachi unpinned this issue Feb 27, 2024
@FineArchs
Copy link
Member

FineArchs commented Mar 9, 2024

@marihachi 新パーサーのバグ報告です。

[hoge//
//
]

のように配列リテラル内で//が改行を挟んで2つ続くとunexpected token: NewLine (Line 2, Column 3)のエラーになるようです。

@FineArchs
Copy link
Member

改行トークンが2つ並んでしまっている可能性?

@marihachi
Copy link
Contributor Author

marihachi commented Mar 10, 2024

配列リテラル内で改行って2つ並べられましたっけ

@marihachi
Copy link
Contributor Author

marihachi commented Mar 10, 2024

コメント行のコメント部分はスペースと同じ扱いで、最後の改行はそのまま改行として解釈されます

つまり、
a//abc[改行]

a[スペース][改行]
と同じ扱いです。

この仕様を変えると他で不都合がありそうなので、
変えるなら配列リテラル側ですかね

@FineArchs
Copy link
Member

配列リテラル内で改行って2つ並べられましたっけ

あー本当だ

[

]

単に2連改行しただけでもエラー出ますね

@FineArchs
Copy link
Member

配列以外にもオブジェクトや括弧でもなるみたいですね
改行をセパレータ代わりに使ったり、長いコメントを書く場合にまる1行以上使いたい場合があるので2連(以上)改行は許容したいです

@marihachi
Copy link
Contributor Author

marihachi commented Mar 10, 2024

  • 配列リテラルの[の後および]の前には0個以上の改行を配置する
  • オブジェクトリテラルの{の後および}の前には0個以上の改行を配置する
  • グループ式の(の後および)の前には0個以上の改行を配置する
  • 配列リテラルで1つ以上の連続した改行をセパレータとして使用できる
  • オブジェクトリテラルで1つ以上の連続した改行をセパレータとして使用できる

この感じで変更してみます

@marihachi
Copy link
Contributor Author

やっぱり、グループ式内の改行は式内でバックスラッシュを使うと改行できる仕様とぶつかるのでやめておきます

@marihachi
Copy link
Contributor Author

バックスラッシュの処理も今うまく機能していないので、改善が必要そうです

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants