语言的进化

我们生活在一个幸运的时代,计算机软件技术日新月异,因着互联网,可以在一个前所未有的范围内了解技术的现状和进步。

无疑,计算机软件统领着信息技术的变革,人类通过代码,将自己的意愿加载到任劳任怨的计算机系统中,快速重复的计算着。

可以肯定的是,计算机软件是不断进化和发展的。未来的计算机软件将具有更多的抽象性表达方式,更快的执行效率,计算机语言延伸的范围会更广阔。

看起来新的语言日新月异,层出不穷。老的语言,越来越稳定,算法库越来越多。但实际上,每种语言都有其生命周期。

从文法角度讲,有两类语言,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 符合条件。

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

转载于:https://my.oschina.net/u/563463/blog/279824

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值