写点什么

Elm 0.11 改进与 JavaScript 的互操作

  • 2014-03-11
  • 本文字数:1483 字

    阅读完需:约 5 分钟

Elm 最近的 0.11 版本致力于简化 FRP 语言和 Javascript 的组合使用。为实现该目标,Elm 主要添加了两个功能:

  1. 能够创建组件( Component ),组件是编译后的 Elm 代码,可以嵌入在 div 内。嵌入之后可以作为页面正常的一部分。
  2. 端口( Port )用于 JavaScript 和 Elm 之间的通信。消息会通过定义好的传入端口(in-port)传到 Elm 组件中,而应答通过订阅了传出端口(out-port)的回调函数来处理。

这两个元素结合在一起,为使用 Elm 的 Haskell 风格语法和创建可嵌入的UI 组件和处理单元提供了支持。

2013 年 11 月,第一届 Elm 研讨会在布达佩斯举行。Elm 的作者 Evan Czaplicki 在会上谈到了 Elm 的未来。他指出,按照优先顺序,Elm 有四件需要处理的开发任务:

  1. 以库的方式分享。
  2. HTML 和 JavaScript 的集成。
  3. 使其他人可以方便地向 Elm 做出贡献。
  4. 尾递归优化。

应社区要求,他还演示了 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 编写的)。宣告中更深入地谈到了技术决策和路线图,但重点是,我们现在可以分享库了!

InfoQ2012 年,您希望 Elm得到业界更多支持。您在 Prezi 工作的这种身份为您带来了所追求的东西吗?

Evan毫无疑问!在 Prezi 的工作对加速 Elm 的开发意义重大,但更重要的是,它使得我可以真正地专注于为业界用户准备好 Elm 的生态系统。这是我很久以来的目标,但是现在我有了一个友好且技术熟练的支撑团队,可以帮助我使目标成为现实。所以当我优先考虑某些特性或调整某个 API 时,总是有工程师乐于探讨并改进这些东西。我直接受到了 Prezi 的语言互操作基础设施的启发,从而有了 Elm 的端口( port ),进而使得 Elm/JS 可以简单无缝地进行互操作了。

InfoQElm 现在的路线图是什么样的?

Evan0.11 版本中的端口和即将到来的彻底修订的 Graphics.Input,让我感觉 Elm 已经非常接近产品状态了。今年夏天,我们会将精力集中于进一步发掘运行时的性能,支持尾递归优化,以及改进调试与 IDE 支持。致力于优化和工具,表明我们总体上在向支持产品用户转变,而不是继续把精力投在语言本身上。

与此同时,Prezi 内部已经在使用 Elm。这种情况让我非常开心。到目前为止,我主要观察到的是,组件模型在实践中表现非常好。有些组件用 Elm 编写很不错,而且现在我们可以很方便地将其集成到更大的 JS 或 TypeScript 项目中。实际上我们在 Prezi 打算找一位开发者,让他编写更多 Elm 代码,我认为这将是一个可以证明 Elm 已经为业界使用做好准备的一个考验。

查看英文原文: Elm 0.11 Improves JavaScript Interop

2014-03-11 05:391475
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 125.7 次阅读, 收获喜欢 33 次。

关注

评论

发布
暂无评论
发现更多内容

vue+webpack+vue-cli

Vue js 打包 webpack vuecli

Faiss源码剖析:类结构分析

华为云开发者联盟

机器学习 KNN Faiss 类结构 Quantizer

飞桨中国行落地合肥,与当地企业共话产业智能化升级

百度大脑

智能化 飞桨中国行

yarn的applicationMaster介绍

五分钟学大数据

YARN

让电影票房飞一会儿,五一换个姿势重温经典

华为云开发者联盟

音视频 电影修复 视频超分 媒体处理 混合失真

Kubernetes 上如何控制容器的启动顺序?

张晓辉

Kubernetes istio

中国区块链产业全景图

CECBC

技术应用

抵制羊毛党,图计算“加持”互联网电商风控

华为云开发者联盟

风控 图计算 互联网电商 羊毛党

SpringSecurity+JWT认证流程解析

学Java关注我

Java 编程 程序人生 计算机 架构】

ceph-csi源码分析(4)-rbd driver-controllerserver分析

良凯尔

Kubernetes 源码分析 Ceph CSI

Python3 print变量打印输出功能后面隐含的几个知识点

老猿Python

Python print str repr

一文带你了解华为云GaussDB的五大黑科技

华为云开发者联盟

数据库 华为云 GaussDB(for Influx) 时间线 tpmC

uni-app rtm插件集成指南及常见问题--iOS

anyRTC开发者

uni-app ios 音视频 WebRTC sdk

浙江宁波市区块链研究机构发布首个全国性公证联盟运营链

CECBC

区块链

GitHub开源的中国亲戚关系计算器

不脱发的程序猿

GitHub 开源 程序员 4月日更 中国亲戚关系

云图说|ModelArts Pro,为企业级AI应用打造的专业开发套件

华为云开发者联盟

AI 企业应用 ModelArts Pro 开发套件

流水线成功涨薪到年薪30W 只有努力才能成功

学Java关注我

Java 架构 程序人生 编程语言

一房地产数据服务初创公司的面经

HoneyMoose

图的学习总结

Nick

数据结构 数据结构与算法

ceph-csi源码分析(3)-rbd driver-服务入口分析

良凯尔

Kubernetes 源码分析 Ceph CSI

软件 IT 专业大学生职业方向情况调查

李孟

大学生日常 IT 大学生

让宝妈宝爸告别安全顾虑,区块链构建母婴行业新生态

CECBC

母婴

量化策略倍投系统搭建,马丁策略交易

阿里码农肝了2晚,整理的Java语法总结,网友:考试复习全靠它了

飞飞JAva

LeetCode题解:191. 位1的个数,位运算,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

耗时5小时,用低代码搭了2套应用,我才明白它为什么能火了

优秀

低代码 低代码开发 低代码开发平台 低代码平台

人类视觉神经科学助力音视频产业革命-弱网下的极限实时通信

张音乐

音视频 笔记 弱网下的极限实时视频通信

迪安精选:那些好用的浏览器扩展

迪安

浏览器 插件 扩展

Boss直聘转发超100W次Java面试突击手册 火遍全网

比伯

Java 编程 程序员 架构 计算机

CloudQuery v1.3.7版本更新,新增「导出限制」

BinTools图尔兹

数据库 sql 数据安全 数据库管理

NumPy之:数据类型对象dtype

程序那些事

Python 数据分析 Numpy 程序那些事

Elm 0.11改进与JavaScript的互操作_函数式编程_Tom Coupland_InfoQ精选文章