PLT 板


LINE

看板 PLT  RSS
趁 noctem 老师还没上线来献个丑 :p 这个议题的两种做法分别叫 static scoping 和 dynamic scoping static 就是 C/C++ 以及目前几乎所有主流语言处理 local variable 的方式 dynamic scoping 我只知道早年的 lisp 有在用 godfat 大已经提过两者在实用上的差异 基本上 dynamic scoping 会造成「关注点」分散, 一个 function 的 local variable 会被此 function 以外的程式所更改 比起来 pass by reference 至少会把 reference 传进去, 是看得到某个变数有机会被改到的 这造成 dynamic scoping 的程式在设计与除错上非常困难 我再补充两个这两种 scoping 的差异 首先, dynamic scoping programming language 的 typing 会变得很复杂 compile 成 machine code 更难: int main(){ a(); b(); return 0; } void a(){ int x = 1; // A dynamic_scoping(); printf("%d\n", x); } void b(){ double x = 1.0; // B dynamic_scoping(); printf("%f\n", x); } void dynamic_scoping(){ x += 2; // C } 在 C 的地方, 请问 x 的型态是什麽? 如果是在 main() -> a() -> dynamic_scoping() 的情况下, 因为 A, x 是 int 可是在 main() -> b() -> dynamic_scoping() 的设定下就变成 B 处的 double 第二, C 这一行要如何 compile 成 machine code? 如果 x 是 int, 那就用普通的整数加法就可以了, 但是如果是 double 就要用 floating point add 去加 floating point 型式的 2.0 甚至如果 x 是 class, 有 overload += operator, 或根本不支援.. 但是, 如果今天上面那个程式不是 compiling language, 而是用 interpreter 去执行的话, 事实上这样的 interpreter 是比较好实作的! 因为 1. interpreter 本来就会记得每个变数的型态, 所以上第一点就不重要了 2. 既然有 1. 只要根据变数型态很容易判断 += 该怎麽执行, 所第二点就绕过了 3. 不用 maintain stack, 只要一个 flat namespace, 或一个 hash 就够了 (虽然这样 JIT 同样变得遥不可及...) (但是这解释了为什麽早年的 lisp 是 dynamic scoping -- interpreter 好写) 最後, 类似 interpreter, dynamic scoping language 的 semantics 比较好定义.. 不论是 denotational semantics 还是 operational semantics.. (我没试过 axiomatic semantics, 所以不确定..) -- A man may die, countries may rise and fall, but an idea lives on. - John F. Kennedy --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.54 ※ 编辑: scwg 来自: 140.112.30.54 (03/06 20:47)
1F:推 godfat:晚点我在讲讲一些 dynamic scoping 的经验... 现在在忙别的 03/06 22:49







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP