是否存在基于异步事件的编程语言?

时间:2014-09-25 22:53:41

标签: functional-programming programming-languages event-based-programming

我有一些时间和思考基于事件的编程语言。我指的是当你更改一个因变量时,每个变量都被更新的语言。例如,考虑终端应用程序的以下伪代码:

int a = 5
int b = a + 5

// event which is called every 5 seconds
every 5 seconds =>
{
     // update a by adding 5
     a << a + 5
}

// event which is called when the user presses enter
on enter =>
{
    println("b = " + b)
}

按Enter键将打印 b 的值。但结果将仅在前五秒 10 ,因为之后 a 将更新为 10 并在接下来的五秒内< strong> b 等于 15 ,因为 b 取决于 a

这个概念当然会带来一些问题,但它也会带来一些好处。想象一下,例如一个GUI应用程序(通常用事件编程),它显示两个输入框和添加两个数字的结果:

-------------     -------------
| 5         |  +  | 6         | = 11
-------------     -------------

可以按以下方式编程:

// two inputboxes and a label
Textbox tb1 = new TextBox() { format = "numeric", value = 5 }
Label lbl1_plus = new Label() { value = "+" }
Textbox tb2 = new TextBox() { format = "numeric", value = 6 }

// and the result
Label lbl1_plus = new Label() { value = "= " + (tb1.value + tb2.value) }

多数民众赞成。它有点像excel,但有真正的编程。 有这样的编程语言吗?或类似的东西?

3 个答案:

答案 0 :(得分:3)

模糊相似的东西:一般来看功能性反应式编程,尤其是Elm

答案 1 :(得分:0)

我没有看到这种确切的语言,但它似乎有点像Prolog和Inform的各个方面的组合。即功能和基于约束的编程。

答案 2 :(得分:0)

简单的选择是使用反应式编程。反应式编程是功能编程和基于事件的编程的组合。有很多实用功能可以让你根据较小的事件定义事件或动作。例如,在您的情况下,您可以在每次变量AE更改时定义事件A。基于此,你可以触发一个序列,将A添加到B并打印出来。您可以在http://reactivex.io/languages.html查看不同语言的实施列表。

可以通过使用CEP(复杂事件处理)工具来处理更复杂的情况。 CEP允许您定义基本事件并描述这些事件的复杂模式并捕获它们的出现。虽然这些工具正处于生命的开始阶段,也许还没有足够成熟的工具,但它们的规格符合您提到的要求。