ink lang —— 跨平臺基于原型的動態語言
來自: 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>