6

私はこのビデオ (下の画像を参照) を見ていて、Elm の Signal が Conal のBehaviorと同じかどうか疑問に思いました。

それらは同じだと思いますが、100%確信はありません。彼らは同じですか?

関連するいくつかの質問を次に示します。

1) RX の Elm's Signal (Conal's Behaviour) とは何ですか? RXにそのような概念はありますか?もしかしてリプレイサブジェクト?

2) RX Observable を RX のシグナル (動作) に変換するにはどうすればよいですか? Sodiumには、この目的のためのホールド機能があります。

3) Elm の RX の Observable (AFAIK RX の Observable は Conal のイベントに対応) とは何ですか? エルムでそんなことある?

読んでくれてありがとう。

以下は、表に表された質問です。

ここに画像の説明を入力

Elm トークのスナップショット:

ここに画像の説明を入力

4

2 に答える 2

2

ここに部分的な答えがあります:

ナトリウムの著者であるスティーブン・ブラックヒースは次のように書いています。

Elm は、Stream と Cell を組み合わせた 1 つのタイプの Signal を持つシステムの例です。

ソース: https://forums.manning.com/posts/list/35274.page

Sodium の命名規則に関する注意:

Sodium's Stream は Conal の Event であり、Sodium's Cell は Conal の Behaviour です。

編集:

RX BehaviorSubject = コナルの行動。

RX Observable = Conal のイベント。

于 2015-01-31T03:27:13.320 に答える
1

上記の質問に対する答えは、最初の仮定が間違っている可能性があるということだと思います。観測可能なシーケンスは、(より)動作とシグナルに類似していると思います(連続時間で変化し、無限になる可能性があり、デフォルトで同期します)。Conal は、イベントが特定の時点での特定の状態であることを示しているようです。たとえば、「時間 t0 の後に最初に左ボタンが押されたことを示すイベント」などの「ハプニング」です [*1]。

|Rx            |Conal   |ELM   |
|--------------|--------|------|
|T             |Event   | ?    |
|IObservable<T>|Behavior|Signal|

Conal の説明にあるイベントは、ある時点での実際の値だと思います。より具体的に言えば、これはさらに正確だと思います

|Rx                         |Conal   |ELM   |
|---------------------------|--------|------|
|TimeStamp<T>               |Event   | ?    |
|ReplaySubject<TimeStamp<T>>|Behavior|Signal|

ここでは、ReplaySubject<TimeStamp<T>>私が理解しているように、動作をより密接に表していると思います (状態と時間を含み、ある時点で値を取得できます)。ただし、ReplaySubject特定の時点から状態をプルすることは実際には許可されていないため、同じものではありません。私の意見では、EventStore の方がより適しています。

明確にするために、私の理解では、Observable Sequence (Rx IObservable<T>) と Conal の動作は、ある程度までは同様の定義を共有しています。どちらも、時間の経過とともに順序付けられた一連の値を表します。ただし、Rx では、これが観測可能なシーケンスのすべてです。Rx は純粋に、イベントのストリームを照会できるようにするためのライブラリであることを思い出してください。Replayデータをキャッシュしたり ( / Buffer)、データのウィンドウを操作したり ( Window/ GroupJoin)、タイムスタンプ ( TimeStamp/ ) を使用してデータを強化したりできる機能がいくつかありますTimeInterval

ただし、Conal のビヘイビアが Observable Sequences と異なる点は、永続性と履歴クエリの機能にあります。私が理解しているように、Rx の機能に加えて Conal の動作は、任意の時点でシーケンスの値を取得できることも指定しています。たとえば、時間 00:00:01 に $1.23 の価格ティックがあり、時間 00:00:05 に $2.34 の別の価格ティックがあった場合、消費者は時間 00:00:02 に値を要求でき、与えられます。 $1.23 の値 (その時点での最新の値) を戻します。

time         [t1   ]  [t2]  [t3]  [t4]  [t5   ]
prices   ----[$1.23]--------------------[$2.34]--->

price@t2 -------------[$1.23]|

Rx はこれをサポートしていませんが、これをサポートするためにカスタム オペレータを作成するために多大な努力を払うことができます。

//A forced example of querying historical data.
// Be carefull as Replay() uses an unbounded buffer!
var source = Observable.Interval(TimeSpan.FromMilliseconds(250))
        .Timestamp()
        .Replay();
var connection = source.Connect();

var time2 = DateTimeOffset.Now+TimeSpan.FromSeconds(2);
var valueAtTime2 = source.TakeWhile(ts=>ts.Timestamp <= time2)
                         .LastAsync();

valueAtTime2.Dump();    //LinqPad feature to output the result

この種のレトロスペクティブ クエリをサポートできる (できる?) システムは、CEP (Complex Event Processing) エンジンや EventStore スタイルのデータベースなどのシステムです。

[*1]。http://conal.net/papers/icfp97/icfp97.pdf

于 2015-02-26T15:44:45.097 に答える