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 项目,创建一个新的分支和图标,做你任何你想做的事情吧。
回复 (34)
Isaac是有多恨coffee啊
coffee 不行 , JS才是王道,这里有很多原因存在。
谁能解释一下啊?各种看不懂。
你應該誤會Isaac了 並不是討厭coffee,而是指這類的模組並不適合放進node.js的核心模組之中 他在不少研討會的場子上都有提到node.js的設計理念 核心維持精簡、只專注在最重要的需求,而不是一窩蜂的加功能,然後搭配npm蓬勃的生態圈
像TypeScript or CoffeeScript都只是JS Transcompiles 現階段並沒有重要的一定得放到核心不可 愛用者也可以透過npm install就裝來用,也不會有什麼不方便吧 ;p
js本身是很优雅很性感的,用了coffee,感觉戴套一样
Isaac不是node的创始人, 是npm的开发者, nodejs现在的维护者.
@robertlyc 的确, 现在是iSaac在维护node
@robertlyc
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:类挺棒的,但是恶心的地方也很多。
缩进的写小段程序好看,程序逻辑多了,业务复杂了,有更新的时候就麻烦了
@jiyinyiyong 汇编不行,二进制才是王道,同样有很多原因在..
@yuyue007 呃, 我看微博上说, 那位谁为了调试 LuaJIT, 写 Lua 时候一般脑海里, 或者干脆敲命令生成一遍 LuaJIT 的汇编指令代码, 以此来调试和优化代码性能. 出于性能等等苛刻的原因, 我觉得切换到机器原生跑的代码很值得. CoffeeScript 并不是适用所有场景的, 浏览器不进行原生支持, 这没办法
一个星期以前看这个帖子的时候,我和楼上很多人一样不喜欢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
@brighthas 这个是,虽然大家都会,用得少,看着自然也不怎么习惯。
next2 ->应该写成next2 = ->
next() 中的 next在哪声明的?
漏了,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就非常值得用了。
@yuyue007 不会, 少写不少字符, 写代码会快很多, 运行速度基本一样, 除非说新手的话, 写代码质量不太高, 那用 CoffeeScript 会快一点点. CoffeeScript 减少的是写代码的门槛了难度, 如果已经精通 JS, 没必要转 Coffee.
我也喜欢Coffee
我决定就像Quora上说的,为什么有的人不喜欢Coffee?因为它很新
所以我想写惯了JS的可能会不喜欢,但像我这样的新码农对Coffee是爱不释手啊
实际控制人 ryan基本甩手掌柜了
同步子线程是啥?
coffee 的弱点让 TJ 大神已经阐述过了,是个SEX戴套的感觉。
还有个原因是交流费劲,JS作者也倡议共同JS编码,便于交流。
可以自己 fork 一个,然后增加内置coffee的node版本,让大家用,我相信你。
coffee就是个语法糖,其实学习成本还是不算高的,而且代码也不见得易读。。网上看源码,只要看到coffee的就直接x了··
C 不行, 汇编才是王道, 同样有很多原因在..
应该是child_process 支持Sync方式了吧……
@robertlyc 你踩到坑了,避免就好了不是么。。再说最佳实践不是挺多的么。js确实太过于灵活,爽也头疼有时候,但coffee写起来就不是很爽。。。