语言和代码的行数

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

内容简介:程序员证明证明一个语言的优秀常常就是:用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剩下的优势就非常少了。

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


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

查看所有标签

猜你喜欢:

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

Effective java 中文版(第2版)

Effective java 中文版(第2版)

Joshua Bloch / 俞黎敏 / 机械工业出版社 / 2009-1-1 / 52.00元

本书介绍了在Java编程中78条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。通过对Java平台设计专家所使用的技术的全面描述,揭示了应该做什么,不应该做什么才能产生清晰、健壮和高效的代码。 本书中的每条规则都以简短、独立的小文章形式出现,并通过例子代码加以进一步说明。本书内容全面,结构清晰,讲解详细。可作为技术人员的参考用书。一起来看看 《Effective java 中文版(第2版)》 这本书的介绍吧!

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

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具