js-cspは試し始めることができます

4349 ワード

CSPの使用例
CSPの使い方は最初はGo言語から伝わったので、私がネットから盗んだコードを見てみましょう.
package main

import "fmt"

func ping(pings chan

そのうち channel .
goroutine ,
channel , .
"go channel" .
Goのほか、ClojureはCSPのサポート、つまりcore.asyncというライブラリを し、Clojureでは を し、>! , ,
, >! , channel :になりました
(let [c1 (chan)
      c2 (chan)]
  (go (while true
        (let [[v ch] (alts! [c1 c2])]
          (println "Read" v "from" ch))))
  (go (>! c1 "hi"))
  (go (>! c2 "there")))

この では(chan)がchannelを し、goで3つの がかりを します...while trueを いるが、alts!を しても が する. 「core.async」を すると つかります.
なぜCSPを うのか
Wikiを るhttps://en.wikipedia.org/wiki...
In computer science, communicating sequential processes (CSP) is a formal language for describing patterns of interaction in concurrent systems.[1] It is a member of the family of mathematical theories of concurrency known as process algebras, or process calculi, based on message passing via channels. CSP was highly influential in the design of the occam programming language,1 and also influenced the design of programming languages such as Limbo[3] and Go.[4]
CSPは 、 のシステム でどのように するか、すなわちGoにおける を するために いられる.コンカレントの は であるため、CSPは の にも する. も な はChannelで、“パイプ”とも ばれて、Channelはデータを するために いることができて、そのためパイプの み きに する があって、それぞれtake!put!で、Clojureの の び です. のように、パイプはコードの をブロックするように える、すなわち、 み りと き みを つことができる.これにより、ネットワークデータをキャプチャして するなど、いくつかのシーンをシミュレートすることができ、 に くことができます.
な はalts!で、Goに するselectは、 のチャネルが に されたデータを り、またmergeがはっきり えていないので、 のチャネルが されたデータをまとめたようで、1つになりますか? のfilter,mapなどのシーケンスの は,チャネル でも に する ,CSPは されているはずであり, の はそれだけではない. えば、(timeout 1000)のようなチャネルが1 って ってくるデータを やしたり、チャネルに してBufferを う や、 のプッシュデータなどがある.
に こえますが、アニメが されていればよくわかりますが、まだ つかっていません... な え から えば、これは に する であり、 くの を するために することができる.もう し しく しましょう.JavaScriptの を します.
js-cspの
Node 6にはyieldがあり、 コードで で くことが になったため、js-cspというモジュールがあり、yieldでCSPの を した.asyncを ったものも たが、 えないと うが、 に する.
https://github.com/ubolonton/...https://github.com/dvlsg/asyn...
は READMEの の を って、 で できるかどうかを ます.
function* player(name, table) {
  while (true) {
    var ball = yield csp.take(table); //       
    if (ball === csp.CLOSED) { //         
      console.log(name + ": table's gone");
      return;
    }
    ball.hits += 1;
    console.log(name + " " + ball.hits);
    yield csp.timeout(100); //       
    yield csp.put(table, ball); //          
  }
}

csp.go(function* () {
  var table = csp.chan(); //    Channel

  csp.go(player, ["ping", table]); //       goroutine
  csp.go(player, ["pong", table]); //       goroutine

  yield csp.put(table, {hits: 0}); //         
  yield csp.timeout(1000); //       
  table.close();
});

の は のとおりです.
=>> node go.js
ping 1
pong 2
ping 3
pong 4
ping 5
pong 6
ping 7
pong 8
ping 9
pong 10
ping: table's gone
pong: table's gone

このようなシミュレーションは、2つのプロセス で いにデータを シーンである.
しかし、 にCSPはイベントフローを することができ、より な を ることができる.これが が にお めしたこの の です.http://jlongster.com/Taming-t...
ブラウザとノードのyieldサポートが するにつれて、js-cspを することはすでにできる. の を えると、 く る があると います.
Rxとの
イベントフローのもう つの なスキームはRxであり、jsバージョンのRxjsがある. 、RxはOOP でカプセル されたFPスタイルの プログラミング で、 が いが、CSPはパイプラインを じて だが すぎる を している.コミュニティの を ると、 には きな がある. はまだ しいが... はいくつかの を めました.
https://medium.com/@puppybits...
GitHubの もあります
https://github.com/ubolonton/...https://github.com/cyclejs/cy...
また、ある がRxでCSP を たブログもあります.
http://swannodette.github.io/...http://swannodette.github.io/...http://potetm.github.io/2014/...http://potetm.github.io/2014/...

そういえば はまだこれをあまり していません.しかし、 の のDemoを たことがあるならば、あなたはきっと で、ストリームはデータと が られて された で、 のプログラミング は しにくいが、CSPの はChannelで されたデータを するのに に なことになった. のコミュニティのコメントを にして、これはかなりの を つ なので、フォローし けています.