事件驱动编程语言:JavaScript, Go, Erlang, Elixir

计算管道是处理数据转换和分析问题的一种很好的方法,不过很多问题需要程序以持久的方式运行,等待事件发生,然后处理这些事件。对这类服务,通常可以并发的处理多个事件,来实现同时为多个用户或者至少多个行为)提供服务。

JavaScript 最初是为浏览器开发的事件处理编程语言,可以让 web 开发人员处理客户端本地的用户行为例如鼠标移动和按键)和事件例如页面渲染结束)。所有现代的浏览器都支持 JavaScript,与 HTML5 的 DOM 一起,已经成为用户界面的外观和行为事实上的标准。

Go 是Google设计出来的,设计这个语言的目的是为了创建高度可扩展的网络服务,Go语言非常适合开发命令行程序。从设计编程语言的角度看, 最引人注目的是Go语言在它的核心并发模型中使用了“顺序通信过程Communicating Sequential Processes)”这一概念。

Erlang 是爱立信设计出来的,设计这个语言的目的是为了制造高度可靠的电话交换机以及类似的设备,著名的开源框架RabbitMQ的消息服务器就是用Erlang 实现的。Erlang使用Actor模型实现了核心并发原语,不允许不同线程直接共享数据,线程间的通信只能靠传递消息。尽管我自己从来没有使用过 Erlang语言, 但我的第一份工作涉及到了一个基于Actor模型开发的并发框架,它是一个前爱立信工程师用C++开发的,我自己也基于TSK任务)和MBX邮箱)原 语开发过这样的框架,是在德州仪器的轻量级DSP/BIOS运行时现在叫TI-TROS)中实现的。

Elixir 能够出现在这个名单中的理由是,虽然它运行在Erlang虚拟机中,与编程语言Erlang具有相同的并发语义,但它也包含了一系列 额外的语言级特征,提供了更全面的开发环境,更容易吸引从其他编程语言比如Python、Java或Ruby)转过来的开发者。

学习一种这样的语言有助于深入理解Python本身是如何支持并发和并行的,包括原生协程、基于生成器的协程、 concurrent.futures和asyncio标准库模块、第三方网络服务开发框架比如Twisted和Tornado)、Django中新引 入的channels概念和GUI 框架中的事件处理循环。

动静混合类型: TypeScript

Python 3.5 引入的特性里,最有争议的一项是新的类型模块,为 Python 体系加上了混合类型的支持。

对于那些接触过的静态类型编程语言主要是 C, C++ 和 Java 的开发者来说,这简直就是一个及其可怕的想法。

Microsoft 的 TypeScript 为 JavaScript 应用提供动静混合类型支持,让你对这个概念会有好一些的看法。TypeScript 代码会编译成 JavaScript 代码(编译后不包含任何运行时类型检查),主流的JavaScript 库的 TypeScript 注释annotations)在DefinitelyTyped代码库里可以找到。

正如 Chris Neugebauer 在澳大利亚 PyCon 大会的报告上指出的那样,这很像是 Python 与类型提示库 typeshed 以及类似 mypy 那样的类型推导和分析工具之间的关系。

本质上,TypeScript 和 Python 的类型提示都是实现特定测试程序的方式,不管是独立文件常规的测试程序),还是内嵌在主代码里类似静态编程语言的类型声明)。不管哪种情况,你都可以 运行单独的命令检查剩余的代码是否符合已知的类型约束对于 JavaScript 和 TypeScript,在编译阶段会隐式的去完成,对于 Python 的类型提示,则是可选的静态分析任务)。

动态元程序设计: Hy,Ruby

像 C、C++、C#、Java 这样的编程语言给 Python 带来的一个有点让人不安特性是“代码即数据”:类似函数和类都是运行时对象,可以被其他对象操作。

Hy 是一个 Lisp 的变种,可以在 CPython 虚拟机和 PyPy 虚拟机上运行。Lisp 在“代码即数据”上做到了极致,Lisp 代码本身就是由描述需要实现的操作的嵌套的列表组成的这门语言的名字就源自”LISt Processor”)。Lisp 风格的语言,最强大的一点是它们可以很轻松的实现自己的领域特定语言DSL),不过这有时候也为阅读其他人的代码带来困难。

Ruby 在很多方面都与 Python 很类似,但是作为更为开放的社区,Ruby 更接受动态元程序设计,而对于 Python,这方面只是“支持,但不鼓励”。这方面的功能包括重定义类加入一些方法,用闭包实现语言核心结构如迭代器。

学习这些语言可以帮助深入了解 Python 自身的动态元程序设计的支持,包括函数和类装饰、monkeypatching动态修改代码)、unittest.mock 标准库模块以及第三方对象代理模块入如wrapt我还没找到什么编程语言有助于了解 Python 的元类metaclass),如果有人有好的建议,可以在评论里告诉我。元类的高级特性包括核心类型、抽象基类、枚举类型和混合类型动态类型和静态类 型混合)表达式的运行时执行)。




评论关闭