<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>冒号空间 &#187; 高级语言</title>
	<atom:link href="http://blog.zhenghui.org/tag/high-level-language/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zhenghui.org</link>
	<description>自然、人类、机器</description>
	<lastBuildDate>Fri, 16 Jul 2010 18:33:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>冒号课堂§1.3：语言选择</title>
		<link>http://blog.zhenghui.org/2009/08/27/colon-class-1_3/</link>
		<comments>http://blog.zhenghui.org/2009/08/27/colon-class-1_3/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 02:28:50 +0000</pubDate>
		<dc:creator>hui</dc:creator>
				<category><![CDATA[冒号课堂]]></category>
		<category><![CDATA[中级语言]]></category>
		<category><![CDATA[低级语言]]></category>
		<category><![CDATA[计算机语言]]></category>
		<category><![CDATA[高级语言]]></category>

		<guid isPermaLink="false">http://blog.zhenghui.org/?p=78</guid>
		<description><![CDATA[<b>语言选择</b>——合适的就是好的（<em>简要回顾计算机语言</em>）<br/>
•	评判语言优劣，如同争论兵器高下，倘若撇开使用的主体和对象，皆为空泛之谈<br/>
•	高级语言好比长兵器，威力强大却难免滞重，长于大型应用，可谓“一寸长，一寸强”；低级语言好比短兵器，轻便灵活却难免风险，长于底层应用，可谓“一寸短，一寸险”<br/>
•	西门吹雪的西来一剑，那是C语言；李寻欢的小李飞刀，那是汇编语言；陆小凤的灵犀一指，那是机器语言]]></description>
			<content:encoded><![CDATA[<h1 style="text-align: center"><span style="font-family: 宋体">冒号课堂</span></h1>
<strong><span style="font-size: 13pt; font-family: 宋体">第一课 开班导言(3)</span></strong>

<!-- below comes from generated html -->
<head><link rel="stylesheet" href="http://blog.zhenghui.org/css/colonclass.css" type="text/css"></head>
 
<div lang="zh-CN" class="article" title="语言选择"><div class="titlepage"><div><div><h1 class="title"><a name="id638433"></a>1.3 语言选择——合适的就是好的</h1></div><div><div class="author"><h3 class="author">郑晖</h3></div></div><div><div class="abstract" title="摘要"><p class="title"><b>摘要</b></p><p>简要回顾计算机语言</p></div></div></div><hr /></div><div class="toc"><p><b>目录</b></p><dl><dt><span class="section"><a href="#preview">！预览</a></span></dt><dt><span class="section"><a href="#question">？提问</a></span></dt><dt><span class="section"><a href="#explaination">：讲解</a></span></dt><dt><span class="section"><a href="#note">，插语</a></span></dt><dt><span class="section"><a href="#summary">。总结</a></span></dt></dl></div><div class="epigraph"><div class="literallayout"><p>尺有所短，寸有所长</p></div><div class="attribution"><span>—<span class="attribution">《楚辞》</span></span></div></div><div class="section" title="！预览"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="preview"></a>！预览</h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
                    评判语言优劣，如同争论兵器高下，倘若撇开使用的主体和对象，皆为空泛之谈
                </p></li><li class="listitem"><p>
                    高级语言好比长兵器，威力强大却难免滞重，长于大型应用，可谓“一寸长，一寸强”；低级语言好比短兵器，轻便灵活却难免风险，长于底层应用，可谓“一寸短，一寸险”
                </p></li><li class="listitem"><p>
                    西门吹雪的西来一剑，那是C语言；李寻欢的小李飞刀，那是汇编语言；陆小凤的灵犀一指，那是机器语言
                </p></li></ul></div></div><div class="section" title="？提问"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="question"></a>？提问</h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>语言好坏的标准是什么？</p></li><li class="listitem"><p>计算机语言的发展经历了哪几个阶段？</p></li><li class="listitem"><p>第四代语言和第五代语言与前三代语言相比，有什么不同？</p></li><li class="listitem"><p>什么是低级语言和高级语言？各自的特点与应用范围是什么？</p></li><li class="listitem"><p>为什么称C语言为中级语言？</p></li></ul></div></div><div class="section" title="：讲解"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="explaination"></a>：讲解</h2></div></div></div><p>
            问号觉得自己的问题并未解决，追问：“这么多种语言，仅凭流行度就能分出主次优劣吗？”
        </p><p>
            “流行度当然不是唯一的指标。”冒号答道，“语言的主次优劣因人而异，答案在你们自己身上。还是刚才那句话，真正的老师就是你自己。”
        </p><p>
            期待的目光如风中之烛般开始黯淡。
        </p><p>
            冒号又道：“评书里名师授艺时，常常要徒弟自己挑选称手的兵器。威武的刀，灵活的枪，飘逸的剑，浑厚的棍，粗犷的斧，霸道的锤，诡异的鞭，无不谙合武者的个性。评判语言优劣，如同争论兵器高下，倘若撇开使用的主体和对象，皆为空泛之谈。”
        </p><p>
            句号若有所悟：“所以<span class="strong"><strong>好的语言就是适合编程者和解决对象的语言</strong></span>。”
        </p><p>
            “非常正确！”冒号赞许道，“这就是问号同学要的答案。”
        </p><p>
            引号并不满足：“可我记得评书里经常描述高手的一句话¬：十八般兵器样样精通。”
        </p><p>
            冒号一笑：“兵器虽多，其理相通，高手精通多种兵器何足为奇？但如果让赵云使锤，李元霸使枪，武力恐怕还是要大打折扣吧？”
        </p><p>
            逗号依然困惑：“我们如何判断一种语言是否适合自己，是否适合解决对象呢？”
        </p><p>
            冒号看出大家共同的疑惑，不紧不慢地说：“要想从中选择，自然先得了解，不然怎知兵器称不称手、合不合用？现在进入正题，我们先对计算机语言作个简要的回顾。”
        </p><p>
            大伙均想，总算要挠着痒处了。
        </p><p>
            “计算机语言按其发展历程通常分为五代。”冒号说完，在黑板上写下——
        </p><div class="informalexample"><p>第一代语言（1GL）：机器语言</p><p>第二代语言（2GL）：汇编语言——IA-32 Assembly，SPARC Assembly等</p><p>第三代语言（3GL）：高级语言——Fortran，Pascal，C，Java，VB等</p><p>第四代语言（4GL）：面向问题语言¬——SQL，SAS，SPSS等</p><p>第五代语言（5GL）：人工智能语言——Prolog，Mercury，OPS5等</p></div><p>
            “谁能简要地谈谈这段历史？”冒号又开始踢回传球了。
        </p><p>
            “最新的两代语言我不是特别熟悉，就说一下前几代吧。” 一阵沉默后，引号终于毛遂自荐，“计算机语言是人用来指挥计算机的语言，而计算机只懂一种语言——由0和1组成的<span class="term">机器语言</span>（machine language）。最初人们直接用这种语言下达指令，可它们实在太难记忆和阅读了，开发和维护起来既费时又易错，严重桎梏了程序员的生产力。后来人们发明了<span class="term">汇编语言</span>（assembly language），用接近英语单词的<span class="term">助记码</span>（mnemonic code）来代替0、1串，由助手——<span class="term">汇编器</span>（assembler）将其转化为机器语言。这些助手很称职，但有两个缺点：一是毫无主见，基本上只会一一对应地翻译，程序员必须不厌其烦地交代每一个细节；二是不知变通，换种机器就傻眼了。于是人们陆续引进了各种<span class="term">高级语言</span>（high-level programming language），同时启用更得力的助手——<span class="term">编译器</span>（compiler）和<span class="term">解释器</span>（interpreter）。这些助手除了能理解更简洁更抽象的高级语言外，还能因地制宜地对一些指令进行优化处理。程序员的劳动力得以极大的解放，生产效率得以大幅的提升。直到现在，高级语言还是最主要的开发语言，包括前面提到的十二种最流行的语言。”
        </p><p>
            引号发言甫毕，冒号立即献上溢美之词：“精彩！精当！一气呵成！看看，你还怀疑自己不够格作老师吗？”
        </p><p>
            一种晕眩感向引号袭来。
        </p><p>
            冒号继续引号的讲述：“从机器语言到汇编语言、再到高级语言的演变，堪比从徒步行走到乘自行车、再到乘汽车的变革，越来越省时、省力、省心。循此方向，第四代语言更专注业务逻辑和问题领域。程序员主要负责分析和描述问题，不再花大量时间去考虑具体的算法和逻辑。事实上，最初提出第四代语言的概念，就是希望非专业程序员都能做应用开发。”
        </p><p>
            逗号心下一惊：“那我等岂不是要失业了？”
        </p><p>
            冒号宽慰道：“倒不用太担心。正如引号所说的，语言越来越高级，背后靠的是越来越能干的助手。这些助手本身就是软件，还是需要专业程序员开发的。更何况，这种理想的全面实现依然任重而道远。”
        </p><p>
            问号百思莫解：“第四代语言到第五代语言的发展路线似乎不够清晰，在逻辑上如何解释呢？”
        </p><p>
            冒号作出解答：“第四代语言虽然足够强大，但过于局限某些特定领域，基本上属于<span class="term">领域特定语言</span><a class="link" href="#note1"><sup>[1]</sup></a>（Domain Specific Language，简称DSL），而不是我们所熟悉的<span class="term">通用编程语言</span>（General-Purpose Programming Language，简称GPPL）。专门用于数据库操作的SQL、用于统计分析的SAS和SPSS、用于科学计算的Mathematica都是典型的第四代语言。然而一个系统往往横跨多个领域，如果每个领域使用不同的语言，并且不同领域的语言在概念和方法上也不统一，必然会给集成和整合带来的困难。第五代语言在保持第三代语言的通用性的前提下，继承了第四代语言的优点，即重在目标而非过程、重在描述而非实现。如果把这种优点用在汽车上，那么下一代的交通工具也许是无人驾驶的智能汽车。只要输入目的地，它会自动通过GPS寻找最佳路径，自动根据路况变速转向，一直驶到终点。”
        </p><p>
            叹号身形微颤：“坐这种车我可不放心。”
        </p><p>
            冒号一撇嘴：“这当然只是一种假想。同样地，第五代语言号称人工智能语言，虽然雄心勃勃，试图让机器理解人类的自然语言，并且具备人类的思维能力，但目前看来这一目标还显得遥不可及。”
        </p><p>
            句号很赞同：“是啊，超级计算机虽然可以战胜国际象棋的世界冠军，但在围棋上弱智得很。”
        </p><p>
            冒号提纲挈领：“也有人简单地将前两代语言统称为低级语言，其他的统称为高级语言。语言从低级到高级，离机器语言更远，离人类语言更近，因而更易读写、调试和维护，安全性、通用性和可移植性更强，开发效率更高，更加抽象和宏观；但同时运行速度和效率下降，用法和功能上局限性更大。如果拿兵器作比，高级语言好比长兵器，威力强大却难免滞重，长于大型应用，可谓‘一寸长，一寸强’；低级语言好比短兵器，轻便灵活却难免风险，长于底层应用，可谓‘一寸短，一寸险’。”
        </p><p>
            大伙心里话，敢情来这儿不是学编程，是学武术的。
        </p><p>
            叹号说道：“我看还是高级语言好，现在谁还学低级语言啊？”
        </p><p>
            冒号纠正道：“低级语言并不低级，只是随着高级语言的出现，计算机硬件性能的提高，渐渐有些边缘化了。虽然几乎没有人再用机器语言编程了，汇编语言仍有其用武之地。常见的有：包括嵌入式系统在内的系统开发，如操作系统、编译器、驱动程序、无线通讯、DSP、PDA、GPS等；其他对资源、性能、速度和效率极为敏感的软件开发；以信息安全、软件维护与破解等为目的的逆向工程等等。即使你不打算从事系统开发，也不想作红客、黑客或骇客，掌握汇编语言对你深入了解计算机内部运行机制、调试软件和改进程序中某些关键代码的算法也是有帮助的。”
        </p><p>
            引号提出：“好像有些书上把C语言称为中级语言。”
        </p><p>
            冒号答道：“这是因为C兼具高级语言和低级语言的特征。一方面它提供了高层抽象和可移植性，使程序员更多地专注问题逻辑而不是机器逻辑；另一方面它也提供诸如指针、<span class="term">位字段</span>（bitfield）等工具进行底层操作，甚至可直接内嵌汇编代码。C语言既简洁灵活又高效强大，是迄今为止最具影响力的语言。几乎所有的操作系统和大多数高级语言都用它来实现，C家族的语言C、C++、Java、C#、D、Objective C等占据主流语言的半壁江山。如果再拿兵器作比，C语言就是一把剑，轻灵飘逸、锐利快捷。一名武将无论擅用什么兵器，往往都会腰悬宝剑。不会C的程序员正如不会使剑的武将，无论如何都是一种缺憾。相比之下，汇编语言就像小刀匕首，而机器语言则近乎赤手空拳了。”
        </p><p>
            句号灵光一闪：“我明白了——西门吹雪的西来一剑，那是C语言；李寻欢的小李飞刀，那是汇编语言；陆小凤的灵犀一指，那是机器语言。”
        </p><p>
            大家会心地笑了。            
        </p><p>
            逗号冷不防冒出一句：“我会跆拳道哦！”
        </p><p>
            句号一乐：“哈哈，等你打赢了陆小凤，就封你为机器语言。”
        </p><p>
            冒号也笑言：“这位是古龙的粉丝吧？武侠小说里的侠客多轻功高绝且喜单打独斗，故使用轻、短兵器居多；而历史小说里的战将多骑马进行大规模作战，故除了佩剑外，使用重、长兵器居多。这就是前面提到的，中低级语言更适合中小型或底层应用，高级语言更适合大型应用。”
        </p><p>
            众人活跃起来，开始议论纷纷。冒号放耳听去，净是些古龙金庸、三国水浒里的人物情节，暗想：通俗小说到底比计算机编程更吸引人啊。
        </p></div><div class="section" title="，插语"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="note"></a>，插语</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><a name="note1"></a>
                    领域特定语言，简称DSL。它区别于通用语言，一般用于特定的问题领域，多属于第四代语言。比如SQL是专门针对数据库的语言，LaTeX是专门用于排版的语言，正则表达式（regular expression）是专门处理字符匹配的语言。
                </p></li></ol></div></div><div class="section" title="。总结"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="summary"></a>。总结</h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
                    评判语言优劣，不能离开使用语言的主体和对象。好的语言就是适合编程者和解决对象的语言。
                </p></li><li class="listitem"><p>
                    计算机语言按其发展历程分为五代，依次为：机器语言、汇编语言、高级语言、面向问题语言和人工智能语言。通常，前两代统称为低级语言，后面的统称为高级语言。
                </p></li><li class="listitem"><p>
                    第四代语言和第五代语言与前三代语言最大的不同在于：重目标轻过程、重描述轻实现。
                </p></li><li class="listitem"><p>
                    C兼具高级语言和低级语言的特征，因此也被称为中级语言。
                </p></li><li class="listitem"><p>
                    计算机语言从低级发展到高级，渐渐远离机器，靠近人类，以牺牲部分性能和效率为代价，换来更高的开发效率和可维护性。中低级语言更适合中小型或底层应用，高级语言更适合大型应用。
                </p></li></ul></div></div></div><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zhenghui.org%2F2009%2F08%2F27%2Fcolon-class-1_3%2F&amp;linkname=%E5%86%92%E5%8F%B7%E8%AF%BE%E5%A0%82%C2%A71.3%EF%BC%9A%E8%AF%AD%E8%A8%80%E9%80%89%E6%8B%A9">分享/保存</a>]]></content:encoded>
			<wfw:commentRss>http://blog.zhenghui.org/2009/08/27/colon-class-1_3/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
