和弦有什么用?

时间:2009-06-20 16:56:24

标签: c# .net nemerle chord

Nemerle等语言支持和弦的概念。我想知道它们的实际用途是什么。

3 个答案:

答案 0 :(得分:2)

该构造似乎也以语言(以及Polyphonic C#)存在,至少根据[Wikipedia](http://en.wikipedia.org/wiki/Chord_(concurrency)

和弦的主要用法似乎涉及数据库编程(更具体地说,join calculus),鉴于它是一个并发构造,这并不奇怪。不仅如此,我恐怕不知道。

答案 1 :(得分:2)

和弦用于并发。该定义可用here

你要找的那个:

  

在大多数语言中,包括C#,类的签名中的方法与它们的实现的代码是双向对应的 - 对于声明的每个方法,当该方法是什么时,会有一个单独的,明确的定义。调用。然而,在Cω中,主体可以与一组(同步和/或异步)方法相关联。我们将这样的定义称为和弦,并且特定方法可能出现在几个和弦的标题中。和弦的主体只能在调用其标题中的所有方法后才能执行。因此,当调用方法时,可以启用零个,一个或多个和弦:

     

如果没有启用和弦,那么该方法   调用排队。如果方法   是异步的,然后就这么简单   涉及添加参数(   消息的内容)到队列。   如果方法是同步的,那么   调用线程被阻止。如果有   是单个启用的和弦,然后是   涉及的调用的参数   匹配已排队,任何被阻止   参与比赛的线程是   觉醒,身体跑了。当一个   和弦只涉及异步   方法运行,然后它以新的方式运行   线。如果有几个和弦   哪些是启用然后未指定   其中一个被选中运行。   同样,如果有多个电话   对于排队的特定方法,我们   不指定将是哪个电话   有匹配时退出。

答案 2 :(得分: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/