Nemerle等语言支持和弦的概念。我想知道它们的实际用途是什么。
答案 0 :(得分:2)
该构造似乎也以Cω语言(以及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/