ink lang —— 跨平台基于原型的动态语言

hx01em06 9年前

来自: 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时用于输出的原生函数 }

曾经有过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文件