我也瞎谈编程高手箴言

zhenming_liu(原作)  
关键字     编程高手箴言

今天看到一篇关于”编程高手箴言”([梁03])的评论, 亦有所感, 以下为其中一二.

梁先生确是自负, P11中”正确的入门方法”便能窥一二, 大有舍我取谁的气概. 可惜我百思不得其解, 梁先生是以BASIC入门还是以C入门的(”入门的最基本方法是从C入手, 如果以前学过BASIC, 那么从C入手是非常容易的, 我就经历了一个过程”)J

暂不谈梁先生指点江山之气度, 有几处技术方面的问题也让我难以明白:

P14 “当你用到一个内存(“个”?), 写一个分配函数分配一块内存, 马上就要释放这块内存的代码, 然后你在中间插上你要用这个内存做什么”. (此处语法问题暂忽略) 感觉那么多人搞OOP, 想减低Memory Leak的可能(如Constructor, Destructor的出现[Stroustrup 98], Handler的运用[Andrew 97]), 都不如先生一句话来得有效

P15 “插曲: 这点绝对不会有人告诉你, 现在没有人去讲这一方面的技巧, 着也是我写了那么多程序, 才总结出来的, 一开始的时候, 我也象那些教科书所教导那样写, 后面放个大括号, 前面放个大括号……”

我怎么都看不懂这段…..

P25 “这套笨拙的系统(复杂的内存机制)一直延续到IA64为止”

I) 说INTEL内存机制复杂, 真怀疑作者对”计算机底层”的理解是不是仅限 于”与非门”或API. 希望他能花点时间看些好的教科书, 不仅仅教人打括号(如[Hennessy 98], [Silberschiaz 03]) II) IA64在用” 笨拙的系统”吗, 语法上好象是被包含的, 但是梁先生怎么会知道下一代系统的架构呢(恕我寡闻)

同页”RISC现在已经黯然失色了”.

龙芯是RISC, SONY的PS2, NITENDO的N64都是RISC, 什么是”黯然失色” 呢? 超级解霸?

同页 “段寄存器都是16位的, 分别代码段(Code Segment), …, 数据段(Data Segment),…, 堆栈段(Stack Segment)…

Segment是memory, 寄存器是"register", 为什么能"包括"?

P27

物理地址 = 段值 * 16 +偏移

仅乘16(= 2^4)那么少? 如果80x86以byte address 寻址,那么一个segmentation(pages)才16Bytes? 正常情况下, 应该是”ranging between 512Bytes and 16M”[Silberschiaz 03].

同页

“(中断)可以是外设的输入输出请求, 也可以是计算机的一些异常时间或其他内部原因, 在8086/8088中, 支持256种中断….”

梁先生应该是搞混了一些概念, Interrupt是指只要不执行code segment时的一切事情(trap, numerical error, context switch, system call…), 他所说的256种中断应该是指OS中的System Call所涉及到的”address vector”的长度, 也就是说”256种”仅是”中断”的一部分…[Silberschiaz 03].

梁先生不断的提起”底层”一词, 并强调其重要性. 但是, 他却不断得犯如此的错误. 实在让人琢磨不透.

以上仅是鄙人一家之眼, 献丑了.

Reference(因很多材料都是凭记忆的, 仅在次处列出书名):

[Stroustrup 98]”The C++ Programming Language”
[Andrew 97]”C++沉思录”
[Hennessy 98]”Computer Organization and Design”
[Silberschiaz 03] “Applied Operating System Concept”


对该文的评论 人气:376

Kean_Liu(2004-1-8 12:35:44)

支持辩论!

人们到这里来,缺省是认为这里说的是对的。对于某些有争议的也就罢了,对于清清楚楚有定论的东西,我们一定要弄清楚,以免误人。

Contributors: FHL