语言的进化

咱们生活在一个幸运的时代,计算机软件技术突飞猛进,因着互联网,能够在一个史无前例的范围内了解技术的现状和进步。程序员

无疑,计算机软件统领着信息技术的变革,人类经过代码,将本身的意愿加载到不辞辛苦的计算机系统中,快速重复的计算着。算法

能够确定的是,计算机软件是不断进化和发展的。将来的计算机软件将具备更多的抽象性表达方式,更快的执行效率,计算机语言延伸的范围会更广阔。编程

看起来新的语言突飞猛进,层出不穷。老的语言,愈来愈稳定,算法库愈来愈多。但实际上,每种语言都有其生命周期。数据结构

从文法角度讲,有两类语言,C 和 Lisp。C 语言语系彷佛统领着世界,但实际上,全部 C 语言语系的语言都有比较短暂的生命周期,包括 C 语言。为何呢?编码

由于新的抽象会让 C 语言语系的文法出现二义性,这从天然语言的进化就能看出来。在必定的语境中,许多的东西是没必要明说的。生命周期

Python 遇到了 Python2 到 3 痛苦的转变,新的语法为了适应新的编程范式和抽象,没法向下兼容。导致社区出现分化,旧的代码逐渐成为历史。新的轮子又要一个一个的建设。开发

Perl 语言早就预测到了这个问题,很早就开始 Perl 6 的开发,但因着Perl 5 所承载的巨大的历史责任,导致社区无力集中精力开始 Perl 6的开发,由于一旦社区的力量集中到 Perl 6,Perl 5社区势必会没落,大量的新的需求,只有一个结果,那么就是 Perl 社区分化成两个。编译器

Ruby 每一个版本都会有一些变化,有激烈的,有温和的,但向下兼容再也不成为软件开发者的保证。之前的代码若是缺少维护和更新,极可能在几个新版本出现后,就会成为历史。编译

Java C++ 都会有相似的问题,向下兼容成为一个巨大的负担,增长新的语言特性,而又保持对原有代码的支持,变得愈来愈困难,究竟是什么问题致使的呢?就是文法的解析。社区

几乎全部语言都有必定的语法,这些语法的解析是由语言创立者完成的,解析的规则隐藏在 C 语言或 C++ 语言冗长的代码中,用积木搭建的系统已经风雨飘摇。新的抽象每每意味着新的语法,新的语法就要增长新的关键字,新的关键字总有特殊的语义规则。谁都知道,这样作终归要出现语义的二义性。Ruby 语言自己就已经出现了这样的问题,只能经过编码习惯来约束,但谁能限制程序员的编码习惯呢?

那么有没有增长新的抽象而不须要改变语法的语言呢?没有彻底没有语法的语言,但有语法相对简单的语言。语法越简单,扩展越容易。Lisp 语系的语法规则很是简单,甚至说实际上没有固定的形式语法。看起来只有一层一层的括号,但实际上不少 Lisp 方言的括号愈来愈少。

能在将来存活的语言,内核必定是很是精简的,而语言的扩展,应当交给使用它的程序员来完成。

这样的语言只有 C Lisp 符合条件。

能自我扩展的语言,必须能用语言自己完成本身语言的解释器,编译器,连接器和汇编器。而语言自己应当没有形式化的语法,固定不变的只能是一种思想:无疑,代码和数据结构形式上的统一是这个思想的一个特征。

相关文章
相关标签/搜索