ink lang —— 跨平臺基于原型的動態語言

hx01em06 8年前發布 | 8K 次閱讀 JavaScript

來自: http://www.oschina.net/p/ink-lang?fromerr=vxMdp97c

ink是一種跨平臺的(目前支持Linux和Windows),基于原型的動態語言,專注于語法層面上的靈活性,給予開發者近乎無限制的拓展空間。

ink的許多思想借鑒于Ruby,Io和Javascript,包括槽,原型鏈等等。

ink有十分豐富的語法糖,再結合幾個基本的原生函數,甚至可以通過ink本身實現for foreach 等語句

例如for流程語句的實現(核心使用了原生函數while)

for = inl (init, &cond, &iterate, block) {
  // 定義block函數運行時continue中斷信號的事件
  block.'continue' = inl (arg) { iterate() }
  while (cond()) {
    block();
    iterate();
  }
}

for (let i = 0, i < 10, i++) { if (i % 2) { continue } p(i.to_str()) // p時用于輸出的原生函數 }</pre>

曾經有過C/C++等語言編程經驗的朋友可能會認為這段代碼中while,if,let等都是關鍵字,但其實他們都只是普通的標識符(identifier),或者可以看作是上下文對象(ink中幾乎所有東西都是對象)中的槽(類似于Javascript中的屬性,每個對象都有槽)。而槽中儲存的對象則是普通的函數(和許多語言類似,函數在ink中也是一等對象)。

而通過一種在ink中被稱為附加參數(argument attachment)的語法糖,上文代碼中for(...)函數調用后面的代碼塊{...}被轉化成了一個內聯的匿名函數來傳遞到for的第四個參數block中

所以for(...){...}與for(..., inl () {...})等效(inl是ink中為數不多的關鍵字之一,表示該函數為內聯函數(inline),同樣可以放在這里的關鍵字還有fn(function), actor)

從這個小例子中可以看出ink語法的靈活性。除此之外,ink還支持偏應用函數,自省等特性,極大地提高了ink的靈活性

同時,ink還支持一些如協程,actor模型等并發特性,可以一定程度上改善由于一些動態特性帶來的效率上的缺失

ink目前還處于開發階段,源碼托管在github上:https://github.com/Rod-Lin/ink,編譯和安裝細節可參考項目的readme文件

</div>

 本文由用戶 hx01em06 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!