CSSE 板


LINE

※ 引述《ellinas (keep your faith !)》之铭言: : 似乎与我的认知不太一样 : 因为在GoF的书中 在visitor的实作部份有写道 : visitor要达成的效果就是double dispatch GoF 的书中那段就我个人看来有点牵强, 不单是其它书都没有这样说的缘故, 在 syntax 上来看, 最後被呼叫的 method name 并不是一开始被呼叫的, 像是 a.foo(b) 这样 call, 最後实际上被 call 到的并非还是叫做 foo 的 method。 : : singleton 和 factory 简单来说就是防白目用的, : : 或是防止自己耍白痴, : : team work 的时候常常有很多白目讲不听又不看文件和注解, : : 白话来说这两个 patterns 是预防这些状况发生的策略之一, : : 不过考试这样作答零分就是了, : : 因为它们存在的意义不只是这些, : : 我没讲的教科书应该都有讲了。 : 没错 把规则写到CODE里 : 比写到文件里有用得多 : 但是还是有人会"咦 这个class怎麽没ctor 我改一下api喔" Orz 习惯上 Singleton 是把 ctor 放在 private, 并在上面放上一段注解, 这样就只有 class 本身能 new 出自己的 obj, 而不是不写出来, 都做到这样还有人耍白目硬要乱改, 而且大家都纵容这种行为的话, 建议上是换一家公司比较好。 : compiler实作时有时需要爬很多树 : 像AST, IL等 也算是visitor最典型的用法 GoF 在这方面的例子其实举得不好, Visitor 实务上是想对「稳定的 class hierarchy」加入新行为, 但是「不想透过继承的方式扩充 (就是不动 class hierarchy)」时, 才会被拿来使用。 现代的 compiler 不会这样子做, 因为现在流行同一套 compiler 能吃不同 language, 变成统一的 AST 以後再用统一的方法玩东玩西, 所以反而是 class hierarchy 常要更动, 但是对操作行为本身而言却始终是一致的, 结果就是单纯拿 Composite 和 Iterator 做 AST 而已, 最佳化也都是摆上一群 Template Method 和 Strategy 搭上去玩, 这也不单纯是为了方便做论文 (套不同演算法生数据用), 也方便 user 在做 performance tuning 的时候, 可以在 compiler options 上选自己爽选的来 try, 找出最王道的编译参数。 : 不知道大大指的的dirty work是指什麽 可以给个明确的例子吗 : 这方面经验不多 还请大大指教 其实就跟上面讲的一样, 如果原本的 class hierarchy 很成熟完善, 然後上面的人对你做了些奇怪的要求, 希望你不去动到它的结构就能搞定; 另一个奇怪需求是「编译时间」, 有些软体系统很肥大, 你不用 Visitor 直接去改, 重编相关的东西就要等 20 分钟, 这样写程式的人会受不了, 是学校研究生的话八成都跑去打电动打超过 20 分钟的好几倍才会回来看编好了没, 这时候也可能会考虑拿 Visitor 来用。 一般 C++ programmer 还会利用一种叫 compiler firewall (又叫 pimpl) 的技巧, 来缩短更动实作细节时所需的重编译时间, 某些时候利用这种技巧可以省下跟用 Visitor 相同的编译时间, 这时就不需要刻意去使用 Visitor。 : 昨天又想了一下 想到「人月神话」中的no silver bullet : 软体的问题有2种 : 一种是Essential Difficulties 另一种是Accidental Difficulties : 像是design pattern解决的算是因为工具选择所带来的Accidental Difficulties : 还是软体本来就需要套用pattern? pattern 不是没写过程式的人一开始需要学的, 而是要先写过很多结构烂烂的程式, 自己认真思考过怎样改比较好一段时间後, 才适合开始去学来用的东西。 对於撰写需要抽象化的程式部分来说, 比较没经验的,刚下手一定是结构紊乱的程式码, 稍有经验的,刚下手会是比较有规律性,但欠缺抽象化的程式码, 很有经验的,一下手可能就是很抽象化的程式码,但不是任何已知的 pattern, 超有经验的,一下手通常就会是 pattern。 一下手就是 pattern 是长期实务经验累积而来的一种直觉, 而不是出於「一定要把某某 pattern 套某某程式码」的心态, 因为下手的时候会知道以前写过类似的东西, 但是写到後来一定会发生某某问题, 然後哪边要改来改去搞来搞去, 搞到後来一定会乱成一团, 然後曾经 try 过几种方法做抽象化结果都不是很好, 最後发现某某 pattern 刚好很好用, 基於这样的经验才会一下手就是 pattern, 但是这少说也得写过 20 年程式才有可能办到。 所以 pattern 书籍的序言应该补一句类似叔叔是有练过的小孩子不要乱学这类话, 请读者先多练练基本功再来实际用这些东西会比较好。 -- Name: Tseng, Ling-hua E-mail Address: [email protected] School: National Tsing Hua University Department: Computer Science Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design Researching: Software pipelining for VLIW architectures Homepage: https://it.muds.net/~uranus --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.217.38 ※ 编辑: tinlans 来自: 61.230.217.38 (02/09 17:29)
1F:推 deepkh:推一下 :) 05/02 20:06







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灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP