成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[譯] PureScript: 一門編譯到 JavaScript 的 Haskell 方言

陳江龍 / 2062人閱讀

摘要:原文是一門編譯到的強(qiáng)類型靜態(tài)類型語(yǔ)言它的功能受到的激發(fā)并且使用編寫其目標(biāo)是編譯到同時(shí)保持清潔跟可讀而且根據(jù)作者所說(shuō)具備跟其他編譯到的語(yǔ)言相互操作的能力繼承了當(dāng)中一些突出的功能其中有類型推斷允許在任何可能的地方減少類型聲明的書寫一種類型構(gòu)

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

PureScript 是一門編譯到 JavaScript 的強(qiáng)類型靜態(tài)類型語(yǔ)言.
它的功能受到 Haskell 的激發(fā), 并且使用 Haskell 編寫, 其目標(biāo)是:
"編譯到 JavaScript 同時(shí)保持清潔跟可讀" 而且根據(jù) PureScript 作者 Phil Freeman 所說(shuō),
PureScript 具備跟其他編譯到 JavaScript 的語(yǔ)言相互操作的能力.

PureScript 繼承了 Haskell 當(dāng)中一些突出的功能, 其中有:

類型推斷: 允許在任何可能的地方減少類型聲明的書寫

Higher Kinded Polymorphism: 一種類型構(gòu)造器之上的抽象機(jī)制,
是 Monads 跟 DSLs 的基礎(chǔ)

模式匹配: 這種技術(shù)讓開發(fā)者可以通過(guò)將函數(shù)實(shí)現(xiàn)拆分成多個(gè) case
來(lái)寫簡(jiǎn)潔而復(fù)雜的函數(shù)

類型類: 數(shù)據(jù)類型之上的抽象機(jī)制, 允許開發(fā)者在使用時(shí)不去思考本身數(shù)據(jù)結(jié)構(gòu)

根據(jù) Phil 所說(shuō), 互操作性是 PureScript 的另一個(gè)優(yōu)勢(shì).
PureScript 提供了引用已有的 JavaScript 代碼機(jī)制,
通過(guò)提供其數(shù)據(jù)和函數(shù)的類型, 然后作為正常的 PureScript 代碼使用.
這樣 PureScript 就有可能在應(yīng)用的局部使用, 項(xiàng)目本身可以是 JavaScript 或者其方言.

InfoQ 跟 Phil Freeman 做了訪談來(lái)深入了解這門語(yǔ)言:

可以解釋一下為什么你要?jiǎng)?chuàng)造 PureScript 嗎? 主要的動(dòng)機(jī)和目標(biāo)是什么?

  

我是一年前開始 PureScript 項(xiàng)目的, 那時(shí)我在進(jìn)行一個(gè)中等的 JavaScript 應(yīng)用,
那個(gè)項(xiàng)目后來(lái)用 TypeScript 重寫了. 用 TypeScript 很多時(shí)候生成力是很高的
只是應(yīng)用中一小部分我覺(jué)得用強(qiáng)類型系統(tǒng)會(huì)帶來(lái)更多的好處.
那時(shí)已經(jīng)有很多編程語(yǔ)言提供了很有表達(dá)能力的類型系統(tǒng),
可是, 沒(méi)有一個(gè)同時(shí)能結(jié)合我想要的其他功能一起使用.
更準(zhǔn)確地說(shuō), 我想要一門 Haskell 語(yǔ)法的語(yǔ)言, 能生成干凈可讀的 JavaScript,
只是不需要 Haskell 那樣一個(gè)運(yùn)行環(huán)境.
我知到如果我開始自己寫編譯器的話后面我就是要在 Haskell 設(shè)計(jì)這門語(yǔ)言,
但是我決定了, 只想要 Haskell 當(dāng)中簡(jiǎn)單的部分來(lái)實(shí)現(xiàn) PureScript,
因?yàn)槲蚁胍嗟木幾g器開發(fā)者.
考慮這一點(diǎn), 這個(gè)項(xiàng)目已經(jīng)成功了, 因?yàn)榫幾g器現(xiàn)在有了很棒的開發(fā)者社區(qū).

PureScript 的主要功能是什么?

  

一套簡(jiǎn)單的 FFI, 表達(dá)能力強(qiáng)的類型系統(tǒng), 有規(guī)律的生成代碼.
簡(jiǎn)單說(shuō)就是 PureScript 提供了"更好的環(huán)境的寫有規(guī)則的 JavaScript"

能不能總結(jié)下 PureScript 帶來(lái)的比原生 JavaScript 好的地方?

  

一個(gè)巨大的好處是因此能夠自信地重構(gòu)巨大的代碼庫(kù)而不破壞已有的功能.
當(dāng)你決定使用純函數(shù)式編程之后 - 純函數(shù), 不可變數(shù)據(jù)類型, 明確的副作用, 這些
你就可以在編譯器的協(xié)助下強(qiáng)力地重構(gòu)你的代碼.
另一個(gè)好處是類型系統(tǒng)的表達(dá)能力, 能開發(fā)者能更多屬性的斷言,
這在目前單純 JavaScript 的工具來(lái)說(shuō)是難以做到的.
比如說(shuō)構(gòu)造 DSL 讓它的數(shù)據(jù)類型在結(jié)構(gòu)上就保證正確,
比如: 二叉樹被保證是平衡的, HTML 節(jié)點(diǎn)保證有正確的屬性, 等等
同時(shí)這可以是一套漸變的方案, 不需要依賴特定的 IDE.
最終 PureScript 這樣的語(yǔ)言實(shí)現(xiàn)了強(qiáng)大的抽象能力, 其他語(yǔ)言無(wú)法達(dá)到,
包括參數(shù)化的多態(tài)(?parametric polymorphism), 高階函數(shù), 類型類等等工具.

PureScript 集成了 Haskell 當(dāng)中一些功能, 比如類型推斷, 類型類等等
這兩門語(yǔ)言差別最大是在哪里?

  

簡(jiǎn)單說(shuō) PureScript 選用了 Haskell 的語(yǔ)法, 但在語(yǔ)意方面源自 JavaScript.
比如 PureScript 是非惰性求值的, 這個(gè)就不像 Haskell.
還有 PureScript 只是在單根函數(shù)的層面進(jìn)行了尾遞歸優(yōu)化,
就有必要注意 Haskell 常用風(fēng)格在這里會(huì)棧溢出(比如 monadic recursion).
類型系統(tǒng)中也有一些重要的去寫.
PureScript 受 Haskell 影響有一些不錯(cuò)的功能(比如多參數(shù)類型類, rank-N types),
但也有很多 Haskell 功能我們是沒(méi)有的(type families, polykinds, datakinds 等等).
也有些新奇功能是 PureScript 有但 Haskell 沒(méi)的(extensible records 和 extensible effects)

你怎么對(duì)比 PureScript 和其他 Haskell 編譯 JavaScript 方言, 比如 UHC, ghcjs?

  

很多 Haskell 類的 Altjs 語(yǔ)言, 比如 Fay, Haste, GHCJS,
它們希望的是編譯 Haskell 的子集到 JavaScript, 保留 Haskell 的語(yǔ)義.
這個(gè)想法很棒, 因?yàn)橛写罅康?Haskell 代碼那樣就能在 JavaScript 代碼中重用.
PureScript 不是 Haskell 的子集, 而是采用了 JavaScript 的語(yǔ)義.
不過(guò)好處是 PureScript 的 FFI 很好用, 我們很容易集成已有的 JavaScript 模塊.
比如說(shuō)那些 npm 當(dāng)中已經(jīng)提供了的模塊. 這帶來(lái)了不一樣的開發(fā)模式.
PureScript 內(nèi)在當(dāng)中更接近 Roy 或者 JMacro 這樣的語(yǔ)言.
實(shí)際上 Roy 很大地影響了 PureScript 的設(shè)計(jì).
Elm 是另一個(gè)有趣的 Haskell 方言.
Elm 主要是實(shí)現(xiàn)了純函數(shù)編程, 以及 FRP, 用來(lái)實(shí)現(xiàn)交互式的 Web 應(yīng)用.

能簡(jiǎn)短分享一下 PureScript 未來(lái)的想法嗎? roadmap 上有什么?

  

我們目前專注于發(fā)布下一版的編譯器管工具,
希望能包含二進(jìn)制發(fā)布文件, 針對(duì)三個(gè)主要的平臺(tái).
我們也花了不少時(shí)間開發(fā)一個(gè)自舉的 PureScript 編譯器.
如果能用 npm install purescript 安裝編譯器就很贊了.
下一個(gè)版本之后, 我們就能考慮一下很多有意思的功能, 比如:
type wildcards, 模版元編程, idiom brackets 還有 sourceMaps.
還有一些興趣在于不同的編譯器后端, 加上最近的 Lua 后端,
也有一些討論是關(guān)于可能會(huì)有的 Python 后端的.
當(dāng)然, 我們也不缺各種有趣的類庫(kù)跟工具去寫. 開發(fā)者社區(qū)很熱情,
任何有興趣貢獻(xiàn)的人都可以看我們 Freenode 上的 #purescript 頻道.

PureScript 是個(gè)開源項(xiàng)目, 預(yù)編譯的二進(jìn)制文件也支持 Linux.
兩份適合開始學(xué)習(xí)這門語(yǔ)言的資源是Phil Freeman 寫的Leanpub 的電子書,
還有網(wǎng)頁(yè)版的 Try PureScript, 不用安裝就可以嘗試這門語(yǔ)言.

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85599.html

相關(guān)文章

  • gitbook: 前端好書推薦

    摘要:它大致概述并討論了前端工程的實(shí)踐如何學(xué)習(xí)它,以及在年實(shí)踐時(shí)使用什么工具。目的是每年發(fā)布一次內(nèi)容更新。前端實(shí)踐第一部分廣泛描述了前端工程的實(shí)踐。對(duì)大多數(shù)人來(lái)說(shuō),函數(shù)式編程看起來(lái)更加自然。 1 Front-End Developer Handbook 2017 地址:https://frontendmasters.com/b... 這是任何人都可以用來(lái)了解前端開發(fā)實(shí)踐的指南。它大致概述并...

    Ali_ 評(píng)論0 收藏0
  • gitbook: 前端好書推薦

    摘要:它大致概述并討論了前端工程的實(shí)踐如何學(xué)習(xí)它,以及在年實(shí)踐時(shí)使用什么工具。目的是每年發(fā)布一次內(nèi)容更新。前端實(shí)踐第一部分廣泛描述了前端工程的實(shí)踐。對(duì)大多數(shù)人來(lái)說(shuō),函數(shù)式編程看起來(lái)更加自然。 1 Front-End Developer Handbook 2017 地址:https://frontendmasters.com/b... 這是任何人都可以用來(lái)了解前端開發(fā)實(shí)踐的指南。它大致概述并...

    CocoaChina 評(píng)論0 收藏0
  • gitbook: 前端好書推薦

    摘要:它大致概述并討論了前端工程的實(shí)踐如何學(xué)習(xí)它,以及在年實(shí)踐時(shí)使用什么工具。目的是每年發(fā)布一次內(nèi)容更新。前端實(shí)踐第一部分廣泛描述了前端工程的實(shí)踐。對(duì)大多數(shù)人來(lái)說(shuō),函數(shù)式編程看起來(lái)更加自然。 1 Front-End Developer Handbook 2017 地址:https://frontendmasters.com/b... 這是任何人都可以用來(lái)了解前端開發(fā)實(shí)踐的指南。它大致概述并...

    Warren 評(píng)論0 收藏0
  • 2017值得一瞥JavaScript相關(guān)技術(shù)趨勢(shì)

    摘要:值得一瞥的相關(guān)技術(shù)趨勢(shì)從屬于筆者的前端入門與工程實(shí)踐,推薦閱讀我的前端之路工具化與工程化獲得更多關(guān)于年前端總結(jié)。的不少開發(fā)者都是的粉絲,他們的以及都是基于構(gòu)建的。 2017值得一瞥的JavaScript相關(guān)技術(shù)趨勢(shì)從屬于筆者的Web 前端入門與工程實(shí)踐,推薦閱讀2016-我的前端之路:工具化與工程化獲得更多關(guān)于2016年前端總結(jié)。本文主要內(nèi)容翻譯自,筆者對(duì)于每個(gè)條目進(jìn)行了些許完善。本文...

    davidac 評(píng)論0 收藏0
  • [] Focal:類型安全、表達(dá)力強(qiáng)、可組合狀態(tài)管理方案

    摘要:致力于為應(yīng)用提供一個(gè)類型安全表達(dá)力強(qiáng)可組合的狀態(tài)管理方案。是一組的命名空間。是內(nèi)置組件的鏡像,但允許組件的額外接受類型的數(shù)據(jù)。這次內(nèi)容更新,是由組件處理的。這些小的組件不必知道所有的應(yīng)用狀態(tài)數(shù)據(jù)。這是因?yàn)榇蟛糠謱?duì)的研究來(lái)自于。 Focal Focal 致力于為 React 應(yīng)用提供一個(gè)類型安全、表達(dá)力強(qiáng)、可組合的狀態(tài)管理方案。 用一個(gè)不可變的 (immutable) 、響應(yīng)式的 (o...

    suemi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<