[译] PureScript: 一门编译到 JavaScript 的 Haskell 方言

原文: http://www.infoq.com/news/2014/09/purescript-haskell-javascript

PureScript 是一门编译到 JavaScript 的强范例静态范例言语.
它的功用遭到 Haskell 的引发, 而且运用 Haskell 编写, 其目的是:
“编译到 JavaScript 同时保持清洁跟可读” 而且依据 PureScript 作者 Phil Freeman 所说,
PureScript 具有跟其他编译到 JavaScript 的言语互相操纵的才能.

PureScript 继续了 Haskell 当中一些凸起的功用, 其中有:

  • 范例揣摸: 许可在任何可以的处所削减范例声明的誊写
  • Higher Kinded Polymorphism: 一种范例组织器之上的笼统机制,
    是 Monads 跟 DSLs 的基本
  • 形式婚配: 这类手艺让开辟者可以经由过程将函数完成拆分红多个 case
    来写简约而庞杂的函数
  • 范例类: 数据范例之上的笼统机制, 许可开辟者在运用时不去思索自身数据结构

依据 Phil 所说, 互操纵性是 PureScript 的另一个上风.
PureScript 供应了援用已有的 JavaScript 代码机制,
经由过程供应其数据和函数的范例, 然后作为一般的 PureScript 代码运用.
如许 PureScript 就有可以在运用的部分运用, 项目自身可以是 JavaScript 或许其方言.

InfoQ 跟 Phil Freeman 做了访谈来深切相识这门言语:

可以解释一下为何你要制造 PureScript 吗? 主要的效果和目的是什么?

我是一年前最先 PureScript 项目的, 当时我在举行一个中等的 JavaScript 运用,
谁人项目后来用 TypeScript 重写了. 用 TypeScript 许多时刻天生力是很高的
只是运用中一小部分我觉得用强范例体系会带来更多的优点.
当时已有许多编程言语供应了很有表达才能的范例体系,
然则, 没有一个同时能连系我想要的其他功用一同运用.
更准确地说, 我想要一门 Haskell 语法的言语, 能天生清洁可读的 JavaScript,
只是不需要 Haskell 那样一个运转环境.
我知到假如我最先本身写编译器的话背面我就是要在 Haskell 设想这门言语,
然则我决议了, 只想要 Haskell 当中简朴的部分来完成 PureScript,
由于我想要吸收更多的编译器开辟者.
斟酌这一点, 这个项目已胜利了, 由于编译器如今有了很棒的开辟者社区.

PureScript 的主要功用是什么?

一套简朴的 FFI, 表达才能强的范例体系, 有规律的天生代码.
简朴说就是 PureScript 供应了”更好的环境的写有划定规矩的 JavaScript”

能不能总结下 PureScript 带来的比原生 JavaScript 好的处所?

一个庞大的优点是因而可以自信地重构庞大的代码库而不损坏已有的功用.
当你决议运用纯函数式编程以后 – 纯函数, 不可变数据范例, 明白的副作用, 这些
你就可以在编译器的辅佐下强力地重构你的代码.
另一个优点是范例体系的表达才能, 能开辟者能更多属性的断言,
这在现在纯真 JavaScript 的东西来说是难以做到的.
比方说组织 DSL 让它的数据范例在结构上就保证准确,
比方: 二叉树被保证是均衡的, HTML 节点保证有准确的属性, 等等
同时这可以是一套渐变的计划, 不需要依靠特定的 IDE.
终究 PureScript 如许的言语完成了壮大的笼统才能, 其他言语没法到达,
包括参数化的多态(?parametric polymorphism), 高阶函数, 范例类等等东西.

PureScript 集成了 Haskell 当中一些功用, 比方范例揣摸, 范例类等等
这两门言语差异最大是在那里?

简朴说 PureScript 选用了 Haskell 的语法, 但在语意方面源自 JavaScript.
比方 PureScript 黑白惰性求值的, 这个就不像 Haskell.
另有 PureScript 只是在单根函数的层面举行了尾递归优化,
就有必要注重 Haskell 经常使用作风在这里会栈溢出(比方 monadic recursion).
范例体系中也有一些主要的去写.
PureScript 受 Haskell 影响有一些不错的功用(比方多参数范例类, rank-N types),
但也有许多 Haskell 功用我们是没有的(type families, polykinds, datakinds 等等).
也有些新颖功用是 PureScript 有但 Haskell 没的(extensible records 和 extensible effects)

你怎样对照 PureScript 和其他 Haskell 编译 JavaScript 方言, 比方 UHC, ghcjs?

许多 Haskell 类的 Altjs 言语, 比方 Fay, Haste, GHCJS,
它们愿望的是编译 Haskell 的子集到 JavaScript, 保存 Haskell 的语义.
这个主意很棒, 由于有大批的 Haskell 代码那样就可以在 JavaScript 代码中重用.
PureScript 不是 Haskell 的子集, 而是采用了 JavaScript 的语义.
不过优点是 PureScript 的 FFI 很好用, 我们很轻易集成已有的 JavaScript 模块.
比方说那些 npm 当中已供应了的模块. 这带来了不一样的开辟形式.
PureScript 内涵当中更靠近 Roy 或许 JMacro 如许的言语.
实际上 Roy 很大地影响了 PureScript 的设想.
Elm 是另一个风趣的 Haskell 方言.
Elm 主如果完成了纯函数编程, 以及 FRP, 用来完成交互式的 Web 运用.

能简短分享一下 PureScript 将来的主意吗? roadmap 上有什么?

我们现在专注于宣布下一版的编译器管东西,
愿望能包括二进制宣布文件, 针对三个主要的平台.
我们也花了不少时候开辟一个自举的 PureScript 编译器.
假如能用 npm install purescript 装置编译器就很赞了.
下一个版本以后, 我们就可以斟酌一下许多有意思的功用, 比方:
type wildcards, 模版元编程, idiom brackets 另有 sourceMaps.
另有一些兴致在于差别的编译器后端, 加上近来的 Lua 后端,
也有一些议论是关于可以会有的 Python 后端的.
固然, 我们也不缺种种风趣的类库跟东西去写. 开辟者社区很热忱,
任何有兴致孝敬的人都可以看我们 Freenode 上的 #purescript 频道.

PureScript 是个开源项目, 预编译的二进制文件也支撑 Linux.
两份合适最先进修这门言语的资本是Phil Freeman 写的Leanpub 的电子书,
另有网页版的 Try PureScript, 不必装置就可以尝试这门言语.

    原文作者:题恭弘=叶 恭弘
    原文地址: https://segmentfault.com/a/1190000002642281
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞