Facebook在Reason 3中對(duì)ReasonML的語(yǔ)法做了重大修改

責(zé)任編輯:editor004

作者:Sergio De Simone

2017-11-14 11:32:34

摘自:INFOQ

Facebook試圖通過(guò)Reason將OCaml的安全性和運(yùn)行速度帶給JavaScript開發(fā)人員。開發(fā)人員可以像下面這樣聲明并調(diào)用帶有標(biāo)簽參數(shù)的函數(shù)

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

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)