2

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

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并且在接下来的五秒内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,但有真正的编程。有这样的编程语言吗?或者类似的东西?

4

3 回答 3

3

有点类似的东西:总体上研究函数式反应式编程,特别是Elm

于 2014-09-27T16:47:00.647 回答
0

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

于 2014-09-26T00:40:57.773 回答
0

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

更复杂的情况可以通过使用CEP(复杂事件处理)工具来处理。CEP 允许您定义基本事件并描述这些事件的复杂模式并捕获它们的发生。虽然这个工具还处于起步阶段,可能还不够成熟,但它们的规格符合您提到的要求。

于 2017-11-11T12:51:40.420 回答