- 原文地址:100,000+ Lines of Elm Code in Production: Rakuten Shares Lessons Learnt
- 原文作者: Bruno Couriol
- 译文出自:掘金翻译计划
日本电子商务公司乐天(Rakuten)最近[分享了在生产中使用Elm的经验](engineering.rakuten.today/post/elm-at…](www.infoq.com/articles/fu…
乐天工程团队将促使他们开始使用Elm进行应用程序开发的原因描述如下:
2017年夏天,一切都在乐天的柏林分公司开始。当事情开始失控时,我们正在维护一个用普通JavaScript编写的中型单页应用程序。[…]
我们决定强加一些规则,并开始以纯风格重写函数2重新控制我们的应用程序。[…]
我们在想:“,如果我们能找到一个工具来执行这些规则,这样我们就不必依赖于自律……”然后我们看到了一篇文章“Elm体系结构简介和如何构建我们的第一个应用程序” […]. 这是一见钟情。
该公司逐渐采用Elm,首先从原型开始试用该技术。虽然最初试验的结果令人鼓舞,但乐天报告称,由于服务器端PHP代码库严重不足,Elm的采用有些停滞。后来,堆栈的改变使该公司有机会扩大对Elm的使用:
一些工程师已经在推动一种更具功能性的代码编写方式,而在一个严重依赖后端API的部门,非常需要一种解耦的方式来编写用户界面。
快进到2021年,乐天目前在多个应用程序中拥有大约100000行Elm代码。
乐天列举了Elm作为一种纯粹的函数式、静态类型、领域特定的、专门为初学者设计的语言所带来的好处。
与TypeScript不同,由于Elm的强类型推断,类型注释基本上是不必要的(注释被认为是防止[无限类型]的良好实践)(github.com/elm/compile…)). Elm的强类型系统使Elm软件包管理器能够强制执行语义版本控制:自动检测到破坏API的更改并导致重大版本更新。一名Elm开发商注:
与您不知道是否会出现故障的任意版本控制系统相比,您对升级的性质有了更多的了解。您仍然需要运行测试并获得回归资格,但总体而言,我在数百次升级中遇到了3次小规模/补丁回归,但没有一次成功投入生产。
Elm专门用于单页web应用程序开发。虽然这可能会阻碍在某些体系结构上下文中的采用,但它也允许Elm调整其输出以获得性能(快速高效的JavaScript编译,[小资产大小](elm-lang.org/news/small-… RealWorld应用程序,应用程序没有那么大。),等等)用户只需使用“---optimize”标志,就可以进行最少的干预。这与在典型的JavaScript前端代码库(bundler、plugins、.rc文件)中处理的一长串不断发展的技术、工具和配置形成对比。Elm在某些基准上的表现是编译为JavaScript语言中最好的,也是纯函数编译为JavaScript语言中最好的。
Elm体系结构是功能性UI技术的核心,这些技术已经过渡到非功能性语言。Elm体系结构已被转换为Rust/Wasm(例如,yew)、JavaScript(例如,1KB 1KB ferp, AppRun)、TypeScript(例如,elm-ts),并启发了许多其他语言和库(例如,Redux, SwitfUI, Dark)。乐天文章提供了Elm架构的以下说明:
(来源: Elm at Rakuten)
乐天还提到了Elm不是主流语言的缺点。尽管乐天拥有上述优势,但与打字稿相比,Elm在创立近十年后仍未进入主流。一些开发人员认为这是Elm的设计没有考虑到快速采用. 具体后果包括不能像主流语言那样依赖谷歌搜索和堆栈溢出。这意味着如果自定义Elm库不存在或不再维护,则必须编写自定义Elm库。乐天提到必须编写一个受react jsonschema form启发的库来创建HTML表单。
一些开发人员还提醒说,Elm端口允许与JavaScript进行互操作,对于Elm 0.19及更高版本,非核心团队Elm代码不再能够直接(同步)从Elm调用JavaScript函数。虽然通过将Elm运行时与JavaScript运行时隔离,该限制有助于保证语言无运行时异常,但它也导致[一些开发人员放弃该语言](lukeplant.me.uk/blog/posts/…](discourse.elm-lang.org/t/afterthou…
对于需要大量与第三方JavaScript库集成的短期项目,Elm可能不太适合。
完整的博客文章包含了与乐天使用Elm相关的利弊的完整列表。感兴趣的读者可以在线查看全文.