内容简介:程序员证明证明一个语言的优秀常常就是:用XXXX行代替了YYYY重写了ZZZZ。这都快变成了一个Pattern。事实列举是对的,但是这不足以说明一个语言就超过另一个语言,哪怕是在行数上。影响代码行数的因素有很多,重写后是最不容易说明问题的。就算使用同一种语言,你再重写自己的一个应用,也可以极大的缩短代码行数,而这是因为你站在了以前代码的基础上。除了写Hello World这种演示级别的程序以外,当程序的代码达到一定数量后,用说明语言其实区别不是特别大,翻倍可能,但是肯定达不到数量级的区别。原因是程序本来就是
程序员证明证明一个语言的优秀常常就是:用XXXX行代替了YYYY重写了ZZZZ。这都快变成了一个Pattern。事实列举是对的,但是这不足以说明一个语言就超过另一个语言,哪怕是在行数上。
影响代码行数的因素有很多,重写后是最不容易说明问题的。就算使用同一种语言,你再重写自己的一个应用,也可以极大的缩短代码行数,而这是因为你站在了以前代码的基础上。
除了写Hello World这种演示级别的程序以外,当程序的代码达到一定数量后,用说明语言其实区别不是特别大,翻倍可能,但是肯定达不到数量级的区别。原因是程序本来就是现实问题的抽象,当代码行数达到一定规模后,你自然会使用一定的抽象,所谓的高级语言,也是这样出来的。
举一个例子,即使你现在翻看一些 C语言 写得项目,你仍然可以发现面向对象的思想在里面,而且很多都是借助 struct
来模拟的,即使C语言的标准库没有 list
, map
这样的数据结构,但是有几个C语言的项目没有实现这些通用的数据结构呢?Redis包括 Linux 的Kernel不都是有这样的通用数据结构。
所以,当代码达到一定规模,我们就会抽象,所以会减少很多的重复,而重复才是影响代码行数的其中一个重大因素。
另一个影响代码行数的重大因素是兼容性,这也是很多软件大版本升级后,代码行数减少,性能变好的重要原因。一个大项目跨时很长,其中很大部分的代码贡献了再兼容性,包括改动时考虑对原有代码影响最小的情况。而重写完全不用考虑这些,加上更加熟悉业务,所有代码行数会有很大的减少。
所以用什么语言并不能指数级减少代码的行数,跟代码行数有关的就是减少代码行数并不能显著减少项目所用时间。再举一个例子,C#和 Java 相对是比较冗长的代码,但是C#和Java在工程面考虑了很多功能,比如如果你想做一些精确运算你可以直接用 decimal
类型,而你用 Golang
还真没有现成的类型,你需要用 math/big
库来处理。
以前听冰河的一个访谈,其中说到100W行的Lisp代码对应400W行的C代码,我认为这是靠谱的。在语言抽象度上Lisp算事比C要高出许多,但是也只是区区4:1,考虑到C语言的工程师数量,常见问题的解决范式,等等便利。Lisp剩下的优势就非常少了。
所以换语言重写缩小代码行数,真不是个什么事儿。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入理解计算机系统(英文版·第2版)
[美] Randal E. Bryant、[美] David R. O'Hallaron / 机械工业出版社 / 2011-1 / 128.00元
本书是一本将计算机软件和硬件理论结合讲述的经典教程,内容覆盖计算机导论、体系结构和处理器设计等多门课程。本书的最大优点是为程序员描述计算机系统的实现细节,通过描述程序是如何映射到系统上,以及程序是如何执行的,使读者更好地理解程序的行为为什么是这样的,以及造成效率低下的原因。 相对于第1版,本版主要是反映了过去十年间硬件技术和编译器的变化,具体更新如下: 1. 对系统的介绍(特别是实际使......一起来看看 《深入理解计算机系统(英文版·第2版)》 这本书的介绍吧!