Elm 最近的 0.11 版本致力于简化 FRP 语言和 Javascript 的组合使用。为实现该目标,Elm 主要添加了两个功能:
- 能够创建组件( Component ),组件是编译后的 Elm 代码,可以嵌入在 div 内。嵌入之后可以作为页面正常的一部分。
- 端口( Port )用于 JavaScript 和 Elm 之间的通信。消息会通过定义好的传入端口(in-port)传到 Elm 组件中,而应答通过订阅了传出端口(out-port)的回调函数来处理。
这两个元素结合在一起,为使用 Elm 的 Haskell 风格语法和库创建可嵌入的UI 组件和处理单元提供了支持。
2013 年 11 月,第一届 Elm 研讨会在布达佩斯举行。Elm 的作者 Evan Czaplicki 在会上谈到了 Elm 的未来。他指出,按照优先顺序,Elm 有四件需要处理的开发任务:
- 以库的方式分享。
- HTML 和 JavaScript 的集成。
- 使其他人可以方便地向 Elm 做出贡献。
- 尾递归优化。
应社区要求,他还演示了 Elm 的一个 REPL (即 Read-Eval-Print Loop)原型。
Elm 的主页有很多Elm 应用示例,我们可以与其互动。有一个很基础的马里奥( Mario )游戏,基本上是在 Strange Loop 2013 会议上,在现场观众面前实现的,突出显示了Elm 的图形功能。如果想看一个更实用的例子,可以看一下 Todo 应用( demo ),它相当于 Web 框架的“Hello World”。如果想深入地了解一下 Elm 的理论基础,可以查看 Evan 的论文,发表在2013 年的“编程语言设计与实现会议”( Programming Language Design and Implementation Conference 2013)上。
InfoQ 就 Evan 在这些优先任务上的开发进度采访了他。
InfoQ:在研讨会上,听上去您可能会集成 Node Package Modules ,以提供 Elm 的库解决方案,但是就能够将 Elm 模块与其余部分分离这点,您有所保留。您是不是设法解决了这个问题,还是说您决定采用不同方案了?
Evan:我决定采用一种不同的方案,而且我很开心自己这么做了。 Elm Public Library 是最近发布的,它使得以库的方式分享程序非常容易。它也是通过 GitHub 提供的,不过对 Elm 用户而言,从头构建也是很愉快的体验。它使我可以自由地提供易于搜索的文档(用 Elm 编写的)。宣告中更深入地谈到了技术决策和路线图,但重点是,我们现在可以分享库了!
InfoQ:2012 年,您希望 Elm得到业界更多支持。您在 Prezi 工作的这种身份为您带来了所追求的东西吗?
Evan:毫无疑问!在 Prezi 的工作对加速 Elm 的开发意义重大,但更重要的是,它使得我可以真正地专注于为业界用户准备好 Elm 的生态系统。这是我很久以来的目标,但是现在我有了一个友好且技术熟练的支撑团队,可以帮助我使目标成为现实。所以当我优先考虑某些特性或调整某个 API 时,总是有工程师乐于探讨并改进这些东西。我直接受到了 Prezi 的语言互操作基础设施的启发,从而有了 Elm 的端口( port ),进而使得 Elm/JS 可以简单无缝地进行互操作了。
InfoQ:Elm 现在的路线图是什么样的?
Evan:0.11 版本中的端口和即将到来的彻底修订的 Graphics.Input,让我感觉 Elm 已经非常接近产品状态了。今年夏天,我们会将精力集中于进一步发掘运行时的性能,支持尾递归优化,以及改进调试与 IDE 支持。致力于优化和工具,表明我们总体上在向支持产品用户转变,而不是继续把精力投在语言本身上。
与此同时,Prezi 内部已经在使用 Elm。这种情况让我非常开心。到目前为止,我主要观察到的是,组件模型在实践中表现非常好。有些组件用 Elm 编写很不错,而且现在我们可以很方便地将其集成到更大的 JS 或 TypeScript 项目中。实际上我们在 Prezi 打算找一位开发者,让他编写更多 Elm 代码,我认为这将是一个可以证明 Elm 已经为业界使用做好准备的一个考验。
评论