Isaac Schlueter 8月14 最近有关node.js核心API有很多的争论,观点和请求;我这里基于以下几点,对这个项目的技术做一下澄清:
回调依然是实现异步的默认方式;Generators 和 Promises 的模式非常有意义,但不会设成默认;
Streams流会更持久,更快,和完全向下兼容。兼容模式(或老模式)的API更干净,你可以“暂停”流,然后再次安全地读取;我们会不断公布对流扩展的细节;
Domains会被重构以便支持更通用的持续追踪系统,或者由用户启动可选的错误处理机制;虽然他可以由用户来定制,但会一直放在Node的默认安装包里;
一个稳定的C API slime已经被添加, 以便用户编写出稳定的扩展插件;因为V8的API在0.12有重大改变,因此所以的可执行插件都不能工作了,而且绑定合适版本的openssl/zlib/c-ares/等等非常困难,我们正在处理
module(模块)系统不会被改变,所以功能已经完成一年,以后只会修改那些肯定会重现的BUG;
TypeScript和CoffeeScript不会被加入核心库,但因为模块系统已经不会变更,现在支持的以后也会一直支持;
因为一些新语言特性已经加入V8,在Node中他们会按自己的方式工作,我们没有关闭、开启的标志;请自己尝试你的代码,如果不支持会弹出错误信任;
VM模块已经被重写,以便将"contextify"模块放入核心库;这样"上下文"将会向大家希望的那样工作,VM模块已经添加了多文档的支持;
同步子线程机制最终被添加;
v0.12版本已经基本完成;一旦我们开发完了,我们会发布;v0.12版本之后,我们会不会添加新的API,我们将会关注性能提升,修BUG还有提高稳定性;
我们在node.js上做了重大改动。如果你的程序现在可以工作,我们将尽一切可能确保它能继续工作,而且最快,最靠谱;
这并不民主,但是这里有足够的空间去容纳不同意见,如果你有另人惊喜的,对node核心库的重大改进,并且你发现你的意见并不会被采纳,那么就请Fork joyent/node 项目,创建一个新的分支和图标,做你任何你想做的事情吧。
你應該誤會Isaac了 並不是討厭coffee,而是指這類的模組並不適合放進node.js的核心模組之中 他在不少研討會的場子上都有提到node.js的設計理念 核心維持精簡、只專注在最重要的需求,而不是一窩蜂的加功能,然後搭配npm蓬勃的生態圈
像TypeScript or CoffeeScript都只是JS Transcompiles 現階段並沒有重要的一定得放到核心不可 愛用者也可以透過npm install就裝來用,也不會有什麼不方便吧 ;p
all : function(next){
db.cookie.all(function(err,users){
var pos = 0;
function nextCommand(){
function next2(){
pos += 1;
if (pos < users.length)
process.nextTick(nextCommand);
else
next();
};
controller.test(users[pos].username,next2);
} nextCommand();
});
}
最后我还是喜欢写这种代码,coffee如果能完全兼容js的话大概还可以,毕竟窝不喜欢coffee的所有特性。为了把function(xxx,xxx)写成(xxx,xxx)->而带上一大堆不喜欢的特性实在不划算。 PS:类挺棒的,但是恶心的地方也很多。
一个星期以前看这个帖子的时候,我和楼上很多人一样不喜欢coffee script。
不过现在,呵呵。我恨不得把我之前写过的代码全部采用coffee script重写一次。
至于为什么,晚上写一篇文章来谈谈最近使用coffee-script的感受。
PS:@yangff ,把你的代码用coffee写是这样的,不知道你觉得怎么样:
all = ->
db.cookie.all (err, users)->
pos = 0
nextCommand = do ->
next2 ->
pos += 1
if pos<users.length then process.nextTick nextCommand else next()
controller.test users[pos].username, next2
漏了,sorry。编辑器拷过来一行行按空格效率低啊 all = (next)-> db.cookie.all (err, users)-> pos = 0 nextCommand = do -> next2 -> pos += 1 if pos<users.length then process.nextTick nextCommand else next() controller.test users[pos].username, next2
@jiyinyiyong 我也不算太喜欢coffeescript,可能是自身本来对这个就不熟悉吧。但是他们说coffeescript编译出的代码,可能比自己写的javascript效率还要高一些,不知道真假。。如果真是这样的话,那coffeescript就非常值得用了。