首页   注册   登录
 ethego 最近的时间轴更新
ethego

ethego

V2EX 第 122257 号会员,加入于 2015-06-14 15:51:44 +08:00
今日活跃度排名 16576
ethego 最近回复了
总有人觉得技术是割裂的,新的就是和旧的有决定性的不同,然而技术是渐进进步的,同类型的技术就有同样的框架和体系,实际没在工作中使用过当然也能从整体上去把握。
在完全并行化的 V8 里,曾经有很长一段时间回调是唯一控制两个函数顺序执行的方法,然后后来我们有了 future promise,以及 async await 这样更好的并发语义。
38 天前
回复了 pin621 创建的主题 程序员 英语好,对编码真的很重要吗?
英语好对做任何事情都很重要,整个现代文明的科技和艺术都在欧洲发端
@FrankHB 我想的没有你这么复杂。。不过如你所说,显式区分声明与赋值的语言不需要考虑问题。后面的语言也很少采用这种设计了。
BTW,刚试了下 Julia 和 Ruby 的实现一样:
@FrankHB Python 的正式文档只是从语义上对 reference 做出了解释。如果观察一下所有引用类型( Python 文档里显然没有什么引用类型和值类型),Object list dict 啥的,对属于这些类型的 captured variable 的属性或者成员直接声明赋值都是可以的,但是无法直接写变量本身。所以切片语义( cnt[1])啥的不是根本原因,只是因为 Python 只允许读,切片语义对原变量来说是一个读操作而已。
而 Guido 在后来他自己对闭包的理解错了,而 Scheme 那种才是对的,而如果希望在这里不破坏兼容或者不增加额外性能开销的前提下,只能加入一个新的语法用于表示 “nonlocal” 的变量。
@FrankHB 不区分声明与赋值并不是在闭包中无法写被闭包捕获变量的理由,你看上面 Ruby 和我的解释就知道了,Python 这么做纯粹就是因为 Guido **希望** 对被捕获变量只读。这点在邮件里被 Guido 很明白地表达了。
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2490 人在线   最高记录 5168   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.3 · 12ms · UTC 14:28 · PVG 22:28 · LAX 06:28 · JFK 09:28
♥ Do have faith in what you're doing.