语言和代码的行数

栏目: Lisp · 发布时间: 5年前

内容简介:程序员证明证明一个语言的优秀常常就是:用XXXX行代替了YYYY重写了ZZZZ。这都快变成了一个Pattern。事实列举是对的,但是这不足以说明一个语言就超过另一个语言,哪怕是在行数上。影响代码行数的因素有很多,重写后是最不容易说明问题的。就算使用同一种语言,你再重写自己的一个应用,也可以极大的缩短代码行数,而这是因为你站在了以前代码的基础上。除了写Hello World这种演示级别的程序以外,当程序的代码达到一定数量后,用说明语言其实区别不是特别大,翻倍可能,但是肯定达不到数量级的区别。原因是程序本来就是

程序员证明证明一个语言的优秀常常就是:用XXXX行代替了YYYY重写了ZZZZ。这都快变成了一个Pattern。事实列举是对的,但是这不足以说明一个语言就超过另一个语言,哪怕是在行数上。

影响代码行数的因素有很多,重写后是最不容易说明问题的。就算使用同一种语言,你再重写自己的一个应用,也可以极大的缩短代码行数,而这是因为你站在了以前代码的基础上。

除了写Hello World这种演示级别的程序以外,当程序的代码达到一定数量后,用说明语言其实区别不是特别大,翻倍可能,但是肯定达不到数量级的区别。原因是程序本来就是现实问题的抽象,当代码行数达到一定规模后,你自然会使用一定的抽象,所谓的高级语言,也是这样出来的。

举一个例子,即使你现在翻看一些 C语言 写得项目,你仍然可以发现面向对象的思想在里面,而且很多都是借助 struct 来模拟的,即使C语言的标准库没有 listmap 这样的数据结构,但是有几个C语言的项目没有实现这些通用的数据结构呢?Redis包括 Linux 的Kernel不都是有这样的通用数据结构。

所以,当代码达到一定规模,我们就会抽象,所以会减少很多的重复,而重复才是影响代码行数的其中一个重大因素。

另一个影响代码行数的重大因素是兼容性,这也是很多软件大版本升级后,代码行数减少,性能变好的重要原因。一个大项目跨时很长,其中很大部分的代码贡献了再兼容性,包括改动时考虑对原有代码影响最小的情况。而重写完全不用考虑这些,加上更加熟悉业务,所有代码行数会有很大的减少。

所以用什么语言并不能指数级减少代码的行数,跟代码行数有关的就是减少代码行数并不能显著减少项目所用时间。再举一个例子,C#和 Java 相对是比较冗长的代码,但是C#和Java在工程面考虑了很多功能,比如如果你想做一些精确运算你可以直接用 decimal 类型,而你用 Golang 还真没有现成的类型,你需要用 math/big 库来处理。

以前听冰河的一个访谈,其中说到100W行的Lisp代码对应400W行的C代码,我认为这是靠谱的。在语言抽象度上Lisp算事比C要高出许多,但是也只是区区4:1,考虑到C语言的工程师数量,常见问题的解决范式,等等便利。Lisp剩下的优势就非常少了。

所以换语言重写缩小代码行数,真不是个什么事儿。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数字化崇拜

数字化崇拜

[加] 文森特·莫斯可 / 黄典林 / 北京大学出版社 / 2010-1 / 26.00元

与此前的许多技术发展一样,以互联网为标志的数字化时代同样为人们提供了社会根本性变革的许诺:通过电脑,我们可以超越时空和政治。在本书中,文森特·莫斯可透过技术发展和经济泡沫的迷雾,试图探明围绕数字化新技术出现了哪些迷思,以及为何人们对这些迷思坚信不疑。他认为互联网时代投资者如此狂热的动因并不是他们对经济规则的无知,而是对赛博空间开启了一个新世界这样的迷思的坚定信念。 莫斯可指出,迷思并不是一些......一起来看看 《数字化崇拜》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具