语言花絮:类型关系和事件驱动(EDA)

159 阅读4分钟
在经典的三层应用程序中,我们系统的核心是 data(base)。

在事件驱动(EDA) 中,焦点转移到事件以及它们如何在系统中流动。

这种转变使我们能够彻底改变设计应用程序的方式来解决上述问题。

事件驱动的编程侧重于事件。最终,程序的流程取决于事件。

1 类型和事件本质

类型 T 中的真和假事件定义。T 本身是 T 中的真事件。

如果 T1→T2 是真事件(分别为假事件),则 T1 是假事件(返回真事件),而 T2 是真事件(假事件)。 如果 ∀X<:T1.T2 是真(分别为假)出现,则 T1 是假(分别为真)出现T2 为真(假)事件。

子类型语句 Γ |- S <: T中的肯定和否定出现的定义如下:类型SΓ中类型变量的边界是假。 类型 T 是一个真的事件。 “真”和“假”这两个词来自逻辑。

1.1 CH(库里·霍华德)对应关系

CH(库里·霍华德)对应关系,Curry-Howard对应关系是直觉命题逻辑与简单类型的lambda演算之间的同构,它将本来没有关系的学科联系在了一起。

类型理论与程序和计算相关,逻辑学与证明(论)相关,范畴论与模型(论)和代数学相关。

逻辑命题和类型对应关系

    命题 对应 类型
    逻辑中的命题,对应了lambda运算中的简单类型化 演算中的类型.
    
    证明 对应 程序实现
    逻辑中命题的证明,对应了lambda运算中的简单类型化 演算中的项(的类型断言)

    命题为真 对应 类型居留(即该类型存在合法的实现)

    命题的蕴含关系 对应 函数 (两者都可以记作 a -> b)

根据著名的命题和类型之间的 Curry-Howard 对应关系,类型 S→T 对应于逻辑命题 S ⇒ T,由逻辑蕴涵的定义,等价于 ¬S ∨ T。

子命题这里的 S 显然处于“否”位置——即在奇数内部否定的——当且仅当整个蕴涵出现在偶数内否定的数量。

请注意,T 中出现的正数对应于¬T 中出现否命题。

2 事件驱动简介

事件驱动架构 (EDA) 是一种软件架构范式,用于促进事件的产生、检测、消费和反应。

现代 Web 应用问题,过去从服务器提供静态HTML内容以来,基于Web的应用程序已经走了很长一段路。如今,应用程序变得更加复杂,并且使用多个框架、数据中心和技术。在过去的几年里,我们看到两个概念主导了IT市场:

	将我们的应用迁移到云;
	实施微服务架构;

这些想法塑造了我们设计和构建软件的方式.

到目前为止,我们处理的是顺序或并行执行模型,但具有事件驱动编程概念的模型称为异步模型。事件驱动的编程依赖于始终侦听新传入事件的事件循环。

事件驱动编程的工作取决于事件。一旦事件循环,事件就会决定要执行的内容和顺序。下图将帮助您了解其工作原理 -

事件处理流.png

小结

本文介绍汇总了事件的本质含义和CH类型逻辑对应关系,这有助于理解。

从应用上看,事件是触发通知或应用程序状态的某种更改的操作。

灯已打开(通知),恒温器已关闭加热系统(通知),用户更改其地址(状态更改)或您的某个朋友更改了他的电话号码(状态更改)。

所有这些都是事件,但这并不意味着我们应该将它们添加到事件驱动的解决方案中。

要添加事件,该事件必须与业务相关。

例如python的Asyncio 模块是在 Python 3.4 中添加的,它提供了使用协程编写单线程并发代码的基础设施。

有兴趣了解更多的内容,请参考异步库函数汇总

    https://juejin.cn/post/7191805074606129209