标 题: 所谓高级语言
发信站: 水木社区 (Fri Sep 28 17:02:24 2007), 站内
高级语言是在机器语言是套3层东西之后的产物:
1.syntax sugar:为了看起来简洁舒服,写起来节省敲键数量,调起来减少脑力消耗。
2.protection:为了防止你把自己头打爆。
3.runtime system:为了让你在不懂什么叫system call或者不想自己分配内存时仍然可以写程序。
下面详细讨论之:
1.有的人认为syntax sugar不应弄得太过分,否则编译器的自动优化很难做,于是便有了c。有的人认为人类的思考方式是基于名词的,于是便有了smalltalk。有的人认为数学上的美观才是真美观,并且还会让你思考起来方便,于是便有了ML。有一个人认为以上三种人都是对世界充满偏见并且妄图用自己的偏见统治世界的家伙,他的名字叫Larry Wall,他发明了perl。然而大多数人都认为perl的syntax sugar是最难看的。
2.有的人认为protection最好在编译时做,否则会调错调到死,于是便有了静态类型系统。有的觉得要让他去写变量类型还不如杀了他,于是便有了动态类型语言。有的人认为第一种人很独裁,第二种人太懒,于是便有了自动类型推导。然而有自动类型推导的语言目前是被用得最少的语言,用户人群远比无推导的静态类型语言或者彻底的动态类西贡你语言要少。
3.有经典语句,我就不自己瞎扯了,引用一下:C程序员认为内存分配太重要了,绝对不能让机器去做;lisp程序员认为内存分配太重要了,绝对要让机器去做。
因此,高级语言设计其实和理论没太大关系。
第一点是美学和心理学的范围,怎么表达一个东西比较简洁,并且让人觉得心情舒畅,这两者都是主观的。在考虑编译器优化的时候,才需要让你的syntax sugar向现实妥协。
第二点完全是个人选择。目前来看,自动类型推导实现起来最难,并且没人用,属于比较自讨苦吃的行为。
第三点和第一点和第二点有关,高级的syntax抽象以及不让你操作内存的protection往往和gc同时出现,而允许你自由操作指针的语言往往需要你malloc完后free。
最后,程序员最经常打交道的部分是syntax sugar。因此syntax sugar是设计程序语言中最重要的部分,不要小看syntax sugar,不要说"这个仅仅是sugar,本质是什么什么",要知道,没有sugar就没有高级语言,任何语言的本质都是图灵机。离开sugar谈本质,最后都要归结到空谈图灵机……
--
※ 修改:・friedcat 于 Sep 28 17:06:25 修改本文・[FROM: 58.211.218.*]
※ 来源:・水木社区 http://newsmth.net・[FROM: 58.211.218.*]