看板Programming
标 题Re: 结构化指令的底层塑造法
发信站枫桥驿站 (Wed Dec 15 01:14:21 2010)
转信站ptt!news.ntu!ctu-gate!ctu-peer!news.nctu!news.csie.ncyu!news.cs.nthu!M
※ 引述《[email protected] (㊣遂去,不复与言)》之铭言:
> 底层只有gogo好用,我还是第一次听说这种事情要在研究compiler之後才能「体会」
> 所有结构化语言的重覆架构当然都可以用goto变出来
> 结构化语言的repetition structure不过是包装基本流程控制
> (flow control,好久没用到这个词儿了)的wrapper
> 这种事有一点组合语言观念就知道了,甚至不用真的学过
> 也不用有组合语言观念,写过有行号的BASIC
> 或真正的FORTRAN 66/77 (without compiler-specific extensions)就知道
>
「我还是第一次听说这种事情要在研究compiler之後才能『体会』」
这个原因是因为波湾战争、非洲饥民都是很遥远的事, 只有它发生在你身上,
你才能体会「切身之痛」.
编译器写作是一种精神科上的双重人格世界. 在它之上, 你有新的语法好用.
在它之下, 你只能拼凑旧语法, 以便完成新的任务.
编译器设计师必须要同时具有双重人格. 并且在两个世界中来回摆荡.
当你要创造新的语法时, 你必须使用新的语法, 来写应用程式, 测试看看好不
好用. 然而当你要编译出执行码时, 你立刻回到原始世界, 只能使用繁琐的指令,
透过「人格不同」的指令特性来塑造出「未来的天堂」.
只有同时存活在两个世界边缘, 你才能有深刻的体会.
波湾战争是否愚蠢, 美国人是否要自大涉入. 这对我们来说只能是表面「知道
」的事. 但是当军人人命是丧失在你家, 你的亲朋好友是其中的牺牲者, 这时你才
会痛切的抗议到底美国人要不要涉入「不干美国事」的它国战争.
「知道」是一回事, 「体会」又是另一回事. 通常有99% 的人会将「知道」当
成「体会」. 这是我现在没办法在这主题解释的事.
想想一墙之隔的世界. 你家的厨房拥有最现代的电器化家具. 微波炉、烤箱,
前卫的现代化精美家俱等等.
然後墙後隔壁却是原始的浴室世界. 你会在黄土当墙, 漏风看月亮的地方洗澡.
到处污七抹黑, 偶而蜈蚣还是蚱蜢飞蛾还会进来与你相伴!
没有电灯与热水, 连毛巾肥皂都没有. 只有杂草棕榈刷.
你看不见东西在哪, 只能点点油灯看看会不会比月亮强一点.
这样的世界当你又回到光亮的现代化厨房时. 你就会出现心境上的差异. 到底
为什麽你要忍受这种「非人」的待遇?
只有你同时身处在两个世界中做比较. 你才能实际确定你的选择. 否则其它都
是讲讲而已.
编译器之所以困难. 不只是因为技术演算法上的难度. 更在於你必须具有双重
人格, 同时自由切换, 你才能在「旧」基础上设计出新的「天堂」.
Tommy 99/12/15
附注:
要体会新的结构化指令有多方便. 你可以在新式的编译器上用「旧」语法来写
应用程式. 全部用Goto指令配上注标来完成所有的If/For/Select 结构.
很快的你就会发现「不堪其扰」! 不只程式变得复杂, 不易看懂. 连指令都会
不小心写错Goto到不知名的地方去. 这就是当初为何会产生结构化演进的原因之一.
新语法节省设计师去浪费生命. 你自己试试看就会清楚. 然而任何新的世界,
还是会有旧的基础来支持的. 这是我写这个主题的基本意义.
注二:
「教育」本来就只能教旧的东西. 而且, 现在的学生, 没有多少是有这种背景的耶!
「写过有行号的BASIC..」
「或真正的FORTRAN 66/77..」
谢谢您的指教.
--
※ Origin: 枫桥驿站<bbs.cs.nthu.edu.tw>
◆ From: tommy @ 125-232-132-134.dynamic.hinet.net
1F:推 Huangs:那学过组合语言应该也能体会吧? 59.115.136.82 12/15 02:32
2F:→ Huangs:现在的资工系应该还有在教组合语言 59.115.136.82 12/15 02:32