109: [里々]特殊変数「$SAORI引数の計算」について

ばぐとら研究所統合ToDo管理システムへようこそ!バグ報告に限らず様々な要望を扱うシステムです。
まずは同じような内容がないか [検索] した後、無ければ [新規レポート] で作ってみましょう。
Windows 8以降、高速スタートアップが実装された関係で、SSP以外の部分に起因する不具合発生が出てきました。
何か挙動がおかしいかな、と思ったら、一度再起動(シャットダウン->起動ではなく)してみてから再度確かめてみてください。

最新状況

名前 Wiz★
概要 [里々]特殊変数「$SAORI引数の計算」について
状態 [−]新規
作成日時 2014-12-31 18:47:19
最終更新日時 2015-01-18 03:00:02

履歴

1 | 2014-12-31 18:47:19 | [−]新規
ななっち
■概要
特殊変数「$SAORI引数の計算」について、SAORI以外の内部関数呼び出
しについてもこの変数が影響し、また内部関数のうち一部(whenなど)
は全く影響を受けないという、あやふやさと矛盾について指摘がありま
したので、解決についてどうするか意見を伺いたいスレッドです。

現状、里々の関数呼び出しは大きく分けて3種類あります。
それぞれ、便宜上名前をつけて分類してみています。

■現在の状況
・SAORI呼び出し
calc、split関数など、ssu.dllをはじめとするSAORIを呼び出す場合で
す。
「$SAORI引数の計算」の影響を受けます。

・即時型関数呼び出し
set、call関数など、里々にもともと入っている関数のうち、
引数の展開などがすべて呼び出し時に実行される関数です。
SAORIを呼び出しませんが、「$SAORI引数の計算」の影響を受けます。


・遅延型関数呼び出し
when、times、while、for関数。
条件式を評価してから実行するなど、引数の展開などが実行されるタイ
ミングが同じではないものです。
内部関数の呼び出しですが、「$SAORI引数の計算」の影響を受けず、常
に引数の計算を行いません。(条件式を除く)

■問題点
・「即時型関数呼び出し」について、SAORIと関係がないのに「$
SAORI引数の計算」の影響を受けるという矛盾
・「即時型関数呼び出し」と「遅延型関数呼び出し」について、一方が
「$SAORI引数の計算」の影響を受け、もう一方が全く無視しているとい
うあやふやな点
・以上2点を解決した時に生じる後方互換についての問題

■提案
・3つの呼び出しそれぞれに対応する「$SAORI引数の計算」の役割を果
たす変数を用意する
・簡易化のために、3つもしくは2つずつをいっぺんに扱う変数を用意
する


このスレッドを、相談・議論の場として使いたいので、
提案や意見などをお寄せください。よろしくお願いします。

2 | 2015-01-04 12:27:25 | [−]新規
ぽな@ばぐとら
先に、現時点でなぜこのようなあやふやな状況になっているのか説明し
ます。

SAORI引数と即時型関数呼出は、どちらも括弧展開用関数内で処理されて
おり、
この中で同じフラグで条件分岐して計算するか否かを決めています。

こちらは、何らかの手段で先に呼出タイプを区別する処理を持ってくれ
ば
区別・改善可能と考えます。

遅延型関数呼出は、まったく別の箇所で処理されている後付機能のた
め、
引数計算処理を忘れていただけです。

というわけで、これまでの互換性の問題を除けば、この3者で矛盾のある
挙動を
しているのは、単なる実装漏れと考慮不足でしかなく、技術的に何らか
の意図が
あるものではないので、方針は単に「どうしたら使いやすいか」「どう
したら
互換を崩さないか」だけになると思います。

3 | 2015-01-16 23:32:25 | [−]新規
あーるでぃー
現状、「$SAORI引数の計算」で一括りになっている変数を、以下の2つ
分けてそれぞれ変数を用意するというのが自分の意見です。

1.SAORIを呼び出す場合
  ssu.dllなど、SAORIを呼ぶ場合
2.SAORIを呼び出さず、satori.dllで完結する場合
  satori内部の関数(call、when)を呼ぶ場合

1は現状の「$SAORI引数の計算」を流用、2は「$内部引数の計算」など
新規作成が望ましいかと思います。
また、互換を保つ方法ですが、「$内部引数の計算」のデフォルト値
は、「$SAORI引数の計算」を動的に参照するということでどうでしょう
か。
これならば、単純なsatori.dllの書き換えでも記述済みのスクリプトの
互換は保たれると思います。

4 | 2015-01-17 02:41:13 | [−]新規
中山蓮
「SAORI及び即時型関数」と「遅延型関数」はそれぞれ構文としての特徴
が違うので、変数を振り分ける際は以下のように振り分ける方がいいと
考えます。

・SAORI及び即時型関数
 ・名称は「SAORI引数の計算」から「関数の引数の計算」などに変更す
る。
 ・SAORIはbasicにせよ何にせよ、外部から何らかの方法で里々に関数
を追加できる手段であると考えられるためです。
・遅延型関数
 ・名称は「遅延関数の引数の計算」かなにかで。
 ・これら遅延関数は、関数と銘打たれていますが、実際のところは他
の言語におけるforやifといった制御構文に等しいものではないでしょう
か。これらを即時型関数と一緒くたにすることには疑問を覚えます。

また、ソースコードに追記する上で、SAORIと即時型関数の処理を分離す
るならば、過去の互換性に対する配慮を考えた上で、load関数辺りにあ
ーるでぃーさんがおっしゃるような機能を追加しなければならないこと
にも注意が必要であると思います。遅延型関数のみ別個の変数での処理
とするならば、そのような処理を書く必要はないのではないでしょう
か。

5 | 2015-01-18 03:00:02 | [−]新規
Wiz★
【提案】
・「SAORI引数の計算」の名前を適切なものに変更
・遅延関数の制御に関する変数を用意する

【理由】
・互換性のため
・引数の評価のタイミングが違う場合、処理方法を分けて適用できた方
が便利です。
─────────────────────

即時関数の引数の計算、遅延関数の引数の計算、で名前はよいかと思い
ます。
説明もしやすいですし。初級者の方に絶対聞かれることになるでしょう
から。

内部関数とSAORIのそれぞれに対応する変数を作るかどうかについては、

あえて分けるほどの理由は僕には見つけられませんでした。

[リプライをつける]
Bug Tracking System 影舞 0.8.8
Powered by Ruby 1.8.7