计算机语言向更好的方向发展

计算机发展了几十年。在这几十年间。人们为了提高软件开发/运行效率,做了各种不同的努力。从语言的发展来看。可以大致看出来其发展路径:

早期语言主要是直接跟机器打交道,主要以汇编为主,造成编写出来的程序很难被看懂,很难移植,如果程序有BUG,查起来也非常费力。

后来发展出来的C、Pascal等过程式语言,脱离了底层的机器实现,达到了比较好的可移植性。对于BUG的查找也方便了许多。C语言在做大型项目时,还是很容易造成很难解决的BUG。例如开发人员的疏忽,可能造成全局变量重名,或者不正确地函数调用,都不容易被发现。内存泄漏一直是大型软件项目的开发者头疼的问题。

为解决大型软件代码组织的问题,演变出了C++语言,并不断地进化。C++语言在几个方面表现出了先进之处。

一是对代码进行模块化管理,加了类、继承重载等功能。

二是后来加了namespace的域空间。

三是后来加入的STL功能,极大的为C++开发者提供了创造空间。

在功能层面,C++为软件项目中之前常常头疼的几个问题提供了解决方案。看看Android的源代码,里面有sp<...>等。看看Webkit中的源代码,里面有RefPtr<...>等。在资源回收方面,C++11中有了lambda和STL function后,可以直接在类的构造函数里传入lambda,然后在类地析构函数中执行lambda,使得实现上变得更加容易了。

但是,这些解决方案都是利用了C++的各种各样的功能来实现的,对于使用不当的人,会造成性能下降,甚至隐藏的BUG等问题。


java语言在实现时就完成了对内存的管理,不用开发者再操心内存泄漏的问题了。java语言相对C++的简化,也让开发者更放心地写代码,而不用担心有什么陷阱了。java还完美地实现了try...catch...finally异常处理模型,可以很好地解决打开的文件、设备等资源的释放的问题。以致于在java受到了非常多的开发者的推崇。

在java流行之后,面向对象设计、内存管理和一套try...catch几乎被很多其它语言,特别是脚本语言所效仿,如Python、PHP。新生的语言,也要首先考虑实现这样的功能。在java后来的世界里,计算机语言则暴发式增长。像.NET家族、D语言、Go语言、基于Java虚拟机的Jython、Jruby、Groovy、Closure等等,都或多或少具有这样的特性。

目前CPU核心数越来越多,未来的程序设计语言,会向多线程/多进程,并发编程领域发展。使用传统的语言来并发编程并不难,也不容易。特别是出现BUG时,难复现,难解决。

我接触到的支持并发编程的语言,就是go语言了。

go语言的优势主要有:

1. 无类设计。之前很多语言都为了面向对象,做了很多语言层面的修改但是实际中有过度设计的嫌疑。类的继承会带来很多隐性的函数调用和数据隐藏(或者说是数据丢失)。

2. 面向接口。面向接口设计和开发,能开发者更直接面对要做的工作。没有太多的逻辑关联和实现上的陷阱。

3. 异常处理模型。go语言独特的defer,panic,recover语句,在多数情况下,可以只用defer,写代码时把想的东西先写在defer中。

4. 并发逻辑。并发逻辑不一定是多线程。可以是逻辑或者是语言语义上的并发。可提高程序效率,提高系统资源利用率。

5. 反射。作为“系统”编程语言,提供了反射功能还是非常实用的。

6. 内存垃圾回收。这个没话说,必须的。

7. 支持Lambda、Closure。为线程安全的编程实践提供保障。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值