2009-06-20 3 views
3

Nemerleなどの言語は、コードの考え方をサポートしています。彼らの実用的な使い方を知りたい。コードの使い方は?

+2

この質問をする理由はわかります。 "c#"、 "chord"などのグーグルリングは本当に役に立ちません! – Noldorin

+0

よくC#はコードをサポートしていません、ポリフォニックバージョンでしたが、言語はもう存在しないと思いますよね? –

答えて

2

構築物はまた、少なくとも[ウィキペディア(http://en.wikipedia.org/wiki/Chord_(concurrency)によれば、言語(ならびにポリフォニックC位)に存在するように思われる。

(複数のデータベース・プログラミングを含むように見えるコードの主な用途具体的には、join calculus)、それは同時実行構築物であることを考えると驚くべきことではない。それよりも、私は知らないと怖い。

2

和音を並行処理するために使用されている。定義がhere可能です。

探しているビット:C位を含むほとんどの言語で

は、クラスのシグネチャのメソッドは、その実装のコードと全単射対応している - 宣言されたメソッドごとに、ありますそのメソッドが呼び出されたときに何が起こるかについての単一で明確な定義。しかし、Cωでは、ボディは、(同期および/または非同期の)メソッドのセットに関連付けることができます。このような定義をコードと呼び、特定の方法が複数のコードのヘッダーに表示されることがあります。コードの本体は、ヘッダ内のすべてのメソッドが呼び出された後にのみ実行できます。したがって、メソッドが呼び出されると、0、1、またはそれ以上のコードが有効になります。

コードが有効になっていない場合、メソッド の呼び出しがキューに入れられます。メソッド が非同期の場合、この単純に には、引数(メッセージの内容 )をキューに追加する必要があります。 メソッドが同期の場合は、 呼び出しスレッドがブロックされます。 が単一の有効化されたコードの場合、 の一致に含まれる呼び出しの 引数は待ち行列から取り除かれ、ブロックされた スレッドは起動され、 が呼び出され、本体が実行されます。非同期の メソッドだけを含む コードが実行されると、新しい スレッドでコードが実行されます。複数のコード が有効になっている場合、不特定の が選択されて実行されます。 同様に、特定のメソッドに対して複数のコール がキューに登録されている場合、 は、一致するものがある場合に がコールされないように指定しません。

2

てみNemerle計算式:

https://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/ComputationExpressions/

いくつかの例:

def upTo (n : int) 
    { 
    comp enumerable 
    { 
     mutable i = 0; 
     while (i < n) 
     { 
     i ++; 
     yield i 
     } 
    } 
    } 

    def manyTimes : IEnumerable [int] = 
    comp enumerable 
    { 
     yieldcomp upTo(2); // 1 2 
     yield 100;   // 100 
     yieldcomp upTo(3); // 1 2 3 
     yield 100;   // 100 
     yieldcomp upTo(10); // 1 2 3 .. 10 
    } 

def fn(n) 
    { 
    comp async 
    { 
     if (n < 20) 
     returncomp fn(n + 1); 
     else 
     return n; 
    } 
    } 
    def f(n1, n2) 
    { 
    comp async 
    { 
     defcomp n1 = fn(n1); 
     defcomp n2 = fn(n2); 
     return $"$n1 $n2"; 
    } 
    } 

private HttpGet(url : string) : Async[string] 
{ 
    comp async 
    { 
    def req = WebRequest.Create(url); 
    using (defcomp resp = req.AsyncGetResponse()) 
    using (stream = resp.GetResponseStream()) 
    using (reader = StreamReader(stream)) 
     return reader.ReadToEnd(); 
    } 
} 

ここにいくつかの例があります。(ロシア語の記事ですが、英語のコードもありますが)http://habrahabr.ru/blogs/programming/108184/

関連する問題