使用Elm实现生产系统运行零异常

简介:

在QCon伦敦2017大会上,Noredink的软件工程师Richard Feldman介绍了公司转向Elm开发的决策过程,他们实现了一个具有10万行代码的生产系统自2015年以来运行零异常。Feldman也是Manning出版的《Elm in Action》一书的作者。下面,我们将概述Feldman的主要观点。

Elm是一种编译成JavaScript的纯函数式编程语言,它使用不可变数据和静态类型(Static Typing)创建基于浏览器的应用。Feldman回顾了Noredink是如何从在小型非关键业务中采用Elm,直至现在完全采用Elm这一过程。尤其是在完成一个为期数月的React开发项目后,他认识到:

采用Elm会缩短项目的实现时间。它不仅可以让公司减少开发人员上手及在公司技术栈中引入该项新技术的时间,而且最终结果也更易于维护。

Feldman指出,使用Elm可以增加生产率和可靠性。其中的一些关键影响因素包括:

在线编辑器Ellie。Ellie是一种用于Elm的高级REPL环境,为开发人员编写、编译和呈现Elm代码提供了丰富的接口。

Elm禁止null值在系统中自由传播,这避免了“十亿美元错误”(One Billion Dollar Mistake)的发生。null值需要显式地使用Maybe类型值处理。

Elm强制使用单一不可变(Single Immutable)值表示整个UI的状态。和React中一样,虽然模型不必是单一值,但是不存在关联到单个组件的状态。使用该模型,Elm的行为类似于Virtual DOM,这是实际DOM的diff化,因此只应用与应用相关的更改。在React中使用了同样的方法维持性能,同时简化了对不可变值的处理。

将UI表示为一个单一不可变值,这种做法最突出的优点在于,可以通过与UI更改相关联的不可变值集处理UI的一系列更改。在以调试模式编译时,Elm可以通过简单地点击相应的模型值去查看UI的历史状态。此外,还可以导出这一系列值,这使得别的开发人员可快速地重建UI的异常状态和生成方式。

静态类型检查是Elm的一个巨大卖点。据Feldman介绍,Elm几乎完全适用“一旦编译,即可工作”原则。

Elm的可靠性主要原因在于其处理JavaScript互操作性的方式。不同于其它大多数编译成JavaScript的语言,Elm事实上强制使用了一种基于消息的方式,使得JavaScript代码运行于服务内部。这确保了无类型的JavaScript代码不会破坏由静态特性提供的可靠性保证。

最后一点,虽然Elm的软件包管理工具不如npm那样包罗万象,但是它具有自身的强大之处。特别需要指出的是,它仅允许软件包中包含Elm代码,也就是说不允许任何的二进制文件,这使得其相比于npm更为安全。此外,它仅支持被正确编译的软件包,并自动强制使用了语义版本。

Feldman总结为,JavaScript确保了前端能更快地展示在屏幕上,而Elm确保了更快的整体开发速度。

报告最后提及了使用Elm这类语言时常能听到的反对声音,那就是难于找到可用的开发人员。Felman指出,事实上Noredink从使用Elm中取得了两个优势:一方面,这使得公司的求职岗位脱颖而出;另一方面,公司吸引了那些对学习Elm特别感兴趣的开发人员。

本文转自d1net(转载)

相关文章
|
6月前
|
XML JSON 安全
|
1月前
|
Java 应用服务中间件
性能场景之异常场景设计及分析
【2月更文挑战第20天】性能场景之异常场景设计及分析
30 1
性能场景之异常场景设计及分析
|
1月前
|
机器学习/深度学习 数据采集 运维
高效处理异常值的算法:One-class SVM模型的自动化方案
高效处理异常值的算法:One-class SVM模型的自动化方案
28 1
|
7月前
|
JavaScript 前端开发 数据可视化
运行在生产系统中的企业级 JavaScript 应用的性能问题分析指南
运行在生产系统中的企业级 JavaScript 应用的性能问题分析指南
40 0
|
8月前
|
数据采集 缓存 数据挖掘
GATK4标准分析流程 丨如何选择合适的线程和内存大小?数据预处理方法与注意事项
GATK4标准分析流程 丨如何选择合适的线程和内存大小?数据预处理方法与注意事项
|
8月前
|
算法 机器人 数据挖掘
量化合约套利机器人策略开发部署执行逻辑源码实例分析
量化合约套利机器人策略开发部署执行逻辑源码实例分析
|
9月前
|
算法 数据挖掘 新能源
计及源荷不确定性的综合能源生产单元运行调度与容量配置优化研究(Matlab代码实现)
计及源荷不确定性的综合能源生产单元运行调度与容量配置优化研究(Matlab代码实现)
|
11月前
|
监控 数据可视化 Java
JVM运行状态评估及优化
估算系统QPS,每个请求会创建多少对象,占多少内存,机器配置选型,年轻代应该给多少内存,YGC触发频率,对象进入老年代的速率,老年代应该给多少内存,Full GC触发的频率。这些都是根据代码可大概合理预估的。
74 0
|
安全 架构师
TRICONEX 3805E 英维思 如何成为过程自动化安全系统
TRICONEX 3805E 英维思 如何成为过程自动化安全系统
91 0
TRICONEX 3805E  英维思  如何成为过程自动化安全系统
|
机器学习/深度学习 人工智能 运维
评估ML监控解决方案时要避免的常见陷阱(mona)
机器学习运营 (MLOps) 是目前最热门的创业投资领域之一,因为虽然构建机器学习模型的最佳实践相对容易理解,但大量创新正被投入到设计方法以最佳地将它们用于生产环境。 MLOps 类别中最主要的是 ML 监控。 了解 ML 监控工具的前景可能令人懊恼、耗时,而且很容易令人困惑。 我们撰写本文的目的是绘制其制图图,并希望借此阐明选择适当监控解决方案的一些常见陷阱,从而为混乱带来秩序。