作者reader (读者)
看板PLT
标题Re: 何谓「好的」程式语言
时间Fri Feb 23 17:23:53 2007
※ 引述《PsMonkey (痞子军团团长)》之铭言:
: 这个问题其实困扰我很久...
: 反正这个版开了,就先站上来当标靶
: 各位请随意炮轰... [茶]
那我就随便说说,充当贺板。
其实一般的程式语言论战,往往都是在说,某某状况时 a 比 b 更好用,
另一方就反击说这个状况可以避免、不常见、不好学、不够快、不自由、
不怎样怎样... 等等。
这种论战所呈现的,并不是理论层次上的比较,而是偏向程式语言特性的
比较,是不同的程式语言阵营在相互叫阵。
就长期而言,愈复杂的程式语言,若没有设计失当,最终会获得胜利,而
较简单的程式语言则会保有一定的最佳应用范围,能存活但会逐渐失势。
ASM vs. C, C vs. C++ 都是这个状况。至於 C++ vs. Java 则是双方都
还在增加复杂度,不过看来 Java 是加码得比较快,颇有胜利机会。
但在这个演化过程中,若一个新程式语言突然过度加大复杂性,则可能会
出现一个中间性的语言,因为较容易学习的关系,而取代这个大家没办法
快速适应的语言,像是 Algol-68, PL/1, Ada 都是这样失败的。
原因很简单,就是人们持续不断但速度缓慢的学习的结果。
不过,抛开这种人类自身的学习因素,就理论而言,程式语言并不是这麽
比较的。
以理论来说,程式语言之间的比较,大概就是三样:
1. 程式语言的资讯控制处理能力
通常非通用程式语言的资讯控制能力会弱於通用程式语言,而处理能力却
不会高於通用程式语言辅以程式库,这就是通用程式语言之所以是通用的
程式语言的原因。
这在处理多媒体档案格式时会相当明显,不能单靠内建语言机制和标准的
程式库就能处理非内建支援的多媒体档案的时候,大概就可以区别非通用
程式语言了。
2. 程式语言所提供的抽象化机制
抽象化是相当难说明的东西,用比较简单的话来说,能够不依靠记忆体的
资讯、不依靠特定识别字就能做出相应变化的程度,就是抽象化的程度。
型别处理是其中最主要的抽象化机制,因此有许多的程式语言理论,都在
讨论型别的问题,像 C 有型别系统,却没有抽象型别,所以抽象化能力
就比不上 C++.
C++ 在这方面的优势,可说是主流的通用程式语言中最为强大的,它可以
支援 template metaprogramming, generative programming 之类的高阶
程式设计方法,至於 Java 在这方面就显得苍白无力。
3. 程式语言所特设的自动化机制
这是最容易被误解的事情,例如 GC 是程式语言有没有内建支援的问题,
不是程式语言的自动化机制差异,例如 C++ 如果需要 GC 的话,就可以
使用 libgc 程式库,或是自行实作也不会很难。
像是例外处理 (exception handling), object destructor 才是这类的
自动化机制,若程式语言不提供的话,就很难自行实作。
这种程式语言的比较,是比较理论意义上的程式语言能力的比较。但未必
能力比较强的程式语言,就一定在使用上比较「好」,否则新的程式语言
免不了就会比较强,像是 Objective Caml, Scala 这类的新程式语言,
在程式语言能力上显然比 C++, Java 来得强,若不考虑编译程式问题,
甚至像 Python, Ruby 也比 C++ 强,但到目前为止,都未必足够实用。
而若要论实用性,及考虑学习的因素,在程式语言的能力之外,最重要的
关键则可能是 C 语法相容性,无论过去或可预见的未来,不能与 C 语法
相容的程式语言,就没有机会成为主流程式语言,或是被 C 语法的相似
程式语言取代。
: 先把「语言」的范围排除像 HTML, XML 那种描述性语言
: 也跳过 SQL 这种... 我不知道怎麽归类的语言
: 然後,为了简单起见,也跳过 web 开发语言
: (像 JSP、PHP、JavaScript、ActionScript)
: 就只讲最传统定义的语言
应该讲通用程式语言 (general purpose programming language), 专指可
广泛应用於所有程式设计需求的程式语言。
我写的很浮泛,但本来许多主流程式语言之间的差别就没有那麽大,若是
硬要比较差不多的程式语言,例如 C++ 和 Java, 我想只是个人偏好问题
比较多,根本就吵不完。
效率争论也是,那根本就是一翻两瞪眼的明白事情,就老是有人会想要用
哪种程式语言比较容易写得好,造成效率如何如何来争论。简直是把专业
软体工程师当成菜鸟、小白来比较。
像 GC 重不重要,跟它是否变成程式语言内建的功能,相关性并不大,那
主要是程式语言的设计哲学和使用者偏好问题,搞得像是天大地大的问题
一样,实在没有意义。
至於 godfat 所提及的 D 语言问题,它先把规格好好稳定下来再说吧。
还有它的编译程式一直不能支援 64-bit 系统,像我的主机是 AMD64 的
FreeBSD, 就没办法使用,这种状况就不必谈它是什麽样的语言了。
--
※ 编辑: reader 来自: 61.222.173.26 (02/23 18:33)
1F:推 PsMonkey:好个贺版文... 推...(不过有些不太同意就是了 [逃]) 02/23 19:38
2F:推 godfat::D 02/23 20:43