Open DIYJii opened 1 month ago
Case2は明確にバグっぽい (変数がない扱いなのはヤバい)
parserによるHoge
の存在確認はパスしてるのでEvaluatorがなんかやらかしてる?
その他は要検討、実装変更に危険がなさそうならやっても良いか?
個人的にはEMPTYは明示してもらうほうが言語としては健全に思う UWSCには
print 1+++++2 // 3
みたいなのがあったはずで、それと同じ不健全さを感じる
UWSCRでもこの形での関数の引数省略は仕様として取り込んでいるけど、あれはあるとわかっているものを省略するものなのでこのケースとは話がやや異なる
なんにしてもリスト化処理の実装次第ですね
配列定義について、デフォルトはEmptyと明記しておけば、 下のような関数の引数の例とも整合性が出来、 「,,」表記も真っ当な表現に見えてきませんか?
Hoge() // A : B : C Hoge(,,3) // A : B : 3 Hoge(1,2,) // 1 : 2 : C Hoge(empty,empty,3) // : : 3
Procedure Hoge(a = "A", b = "B", c = "C") Print a + " : " + b + " : "+ c FEND
なお、UWSCでは (デフォルトパラメータ以降に通常引数を書く事はNG) との制約の為、上記2行目はSyntaxErrorとなります。 その点、 UWSCRの方が使い易いです。
On Thu, Jun 6, 2024 at 4:27 PM Joey Takahashi @.***> wrote:
Case2は明確にバグっぽい (変数がない扱いなのはヤバい) parserによるHogeの存在確認はパスしてるのでEvaluatorがなんかやらかしてる?
その他は要検討、実装変更に危険がなさそうならやっても良いか?
個人的にはEMPTYは明示してもらうほうが言語としては健全に思う UWSCには
print 1+++++2 // 3
みたいなのがあったはずで、それと同じ不健全さを感じる
UWSCRでもこの形での関数の引数省略は仕様として取り込んでいるけど、あれはあるとわかっているものを省略するものなのでこのケースとは話がやや異なる
なんにしてもリスト化処理の実装次第ですね
— Reply to this email directly, view it on GitHub https://github.com/stuncloud/UWSCR/issues/182#issuecomment-2151587387, or unsubscribe https://github.com/notifications/unsubscribe-auth/BH6AXYRSNKL4CEWUH22Y443ZGAFOLAVCNFSM6AAAAABI4B5YBCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNJRGU4DOMZYG4 . You are receiving this because you authored the thread.Message ID: @.***>
@DIYJii
関数の引数も同じ','区切りのように見えますが、その性質も解析・評価の方法もまるで異なるものなので今回の件とは分けて考えてください
UWSCでも引数の省略はEMPTYPARAM
という特殊な状態であり、配列とは異なります
今回の件で焦点となるのは主に以下の2点 (最初の例だとCase 2と4) となります
dim a[] = 1,2,3,
dim b = [1,2,3,]
これらを許容することした場合、評価結果は
[1, 2, 3, EMPTY]
[1, 2, 3]
のいずれかにすることが考えられます 前者はUWSCと同等です 後者は意外に思われるかもしれませんが、このような実装の言語が実際にあります そして、僕としては後者のほうが受け入れやすいんですよね、なぜかと言うと
dim b = [
1,
2,
3,
]
このような書き方を許容できるからです
(現状UWSCRではこのように複数行で配列リテラルを書けますが、最後の要素のあとの,
はエラーとなります)
この書き方は変更に強く、利点となります
デフォルトはEmptyと明記しておけば
については,,
を,EMPTY,
と見なす実装をすると決定した場合の話なので、そういう問題では(まだ)ないです
「,,」表記も真っ当な表現に見えてきませんか?
末尾,
については先に述べた通りです
1,,3,4
といった途中を省略する書き方については多くの言語で許容されないですし、正直なところUWSCRでもこれをやる気はありません
なぜならこの手の無の記述がEMPTYになるという現象がUWSCでは色々なところで起きていて、どちらかと言うとバグっぽい動作だという認識だからです
なので、おかしな仕様は再現しないというポリシーに基づくとこれもやらん、という判断になります
途中省略の実装自体はおそらく容易なのでやろうと思えばできます
,
については配列リテラルのみ許容する方針で修正
概要
配列定義又は配列リテラルに於いて要素Emptyを表すのに、「1,2,Empty,8,16」 とせず 「1,2,,8,16」 とすると、下記のようなエラーになります。Case 2以外は構文エラーで定義時に引っ掛かりますが、Case 2は実行時エラーになります。
ちなみに、UWSCでは、配列定義に於いて「,,」を使ってもエラーは起きず、Empty要素として扱われます。
再現スクリプト
再現手順
No response
バージョン
1.0.1
不具合発生環境
Windows 10