Facebook試圖通過(guò)Reason將OCaml的安全性和運(yùn)行速度帶給JavaScript開發(fā)人員。該語(yǔ)言達(dá)到了3.0版本,引入了新的語(yǔ)法,修復(fù)了許多Bug。
Reason語(yǔ)法其中一個(gè)最顯著的變化是使用JavaScript的application/abstraction語(yǔ)法代替了OCaml的語(yǔ)法。這意味著,在Reason 3中,開發(fā)人員在調(diào)用函數(shù)時(shí)可以像在JavaScript中那樣把兩個(gè)參數(shù)括起來(lái):
myFunction(arg1, arg2) // 類似C語(yǔ)法的新語(yǔ)法myFunction arg1 arg2 // 類似OCaml語(yǔ)法的舊語(yǔ)法其他值得注意的變化有:
使用{.}聲明JavaScript對(duì)象類型的新語(yǔ)法,例如:
type payload = {. // no need to call Js.t here "name": string, "age": int};使用標(biāo)簽參數(shù)擴(kuò)展了對(duì)類型雙關(guān)的支持,新語(yǔ)法使用~代替了::。開發(fā)人員可以像下面這樣聲明并調(diào)用帶有標(biāo)簽參數(shù)的函數(shù):
let addCoordinates = (~x, ~y) => { /* 使用 x 和 y */ };...addCoordinates(~x=5, ~y=6);可以和以前的語(yǔ)法作下比較:
let addCoordinates x::x y::y => {/* 使用 x 和 y */};...addCoordinates x::5 y::6;此外,類型雙關(guān)(如上例所示,允許開發(fā)人員使用~x代替更為繁瑣的~x as x)應(yīng)該和類型注解一起使用,這在以前是不支持的:
let add = (~first: int, ~second: int) : int => first + second;字符串連接現(xiàn)在可以使用++操作符代替^了。
邏輯非使用!代替了not。已經(jīng)有Reason代碼庫(kù)的開發(fā)人員不必?fù)?dān)心這種程度的語(yǔ)法變化,這主要是為了讓JavaScript開發(fā)人員感覺更自然。其實(shí),Reason 3提供了遷移腳本,可以確保過(guò)渡比較容易。
Reason另一個(gè)大有前途的新特性是提供了正式的API,讓開發(fā)人員可以訪問(wèn)Reason解析器refmt。Klipse、reason-tools、Reason文檔站點(diǎn)等工具都是基于該解析器的。
Reason是Facebook試圖將OCaml可靠的類型系統(tǒng)帶到JavaScript開發(fā)環(huán)境的產(chǎn)物。它以BuckleScript為核心,提供了迎合JavaScript編程人員喜好的語(yǔ)法,因?yàn)樗麄兛梢詴?huì)認(rèn)為OCaml的語(yǔ)法有點(diǎn)不太友好。
查看英文原文: Facebook Overhauls ReasonML Syntax in Reason 3