为什么动态类型编程语言会如此流行?

2014年12月23日

duck typing

我使用过很多静态类型的编程语言,也使用过不少动态类型的语言。我发现,当使用静态类型的语言时,各种的IDE给了我巨大的帮助。这些编程语言集成 开发环境能让我的开发极其的高效。代码的修改和移动(例如重构代码)都非常的方便,不容易出现错误。编译速度通常不是问题。IDE的自动编译功能使得在我 每敲完几个代码后都能得到编译好的程序。文档提示和变量、方法、类提示在我输入变量时会自动弹出。所有的这些都能够使我把全身心注意力都投入写代码中。

相反,编程语言的类型越动态,我就越无法借助于IDE的帮助,通常在使用动态类型编程语言开发程序时,我只能使用一个文本编辑器。编程效率受此的影 响而下降很多。代码重构变得困难,甚至完全不可能,程序的正确性严重的依赖单元测试。但测试程序并非能做到完美。很多时候,一些老的、历史遗留的项目中的 测试程序根本不可信。

在文本编辑器中依靠grep来重构,就是个笑话。即费事,又费力,而且效率不高,经常出错。然而,重构是很多程序员经常、大量需要做的事情。

动态类型语言通常会在速度上有些欠缺——因为它的动态属性。

使用动态编程语言开发的过程中,我通常会严重的依赖文档来决定应该使用哪一个方法或提供了哪些方法。如果一个类没有提供文档说明,我必须打开源代 码,搜索整个文件,来了解它提供的功能。有时,一个代码库里包含了成百上千的代码文件。很显然,我是没法记住在这样的一个代码库里哪些文件包含了哪些方法 和类。因此,我不得不频繁的打开一个又一个文件,经常出现找来找去也找不到某个方法究竟是在哪个文件里。于是,我只能使用grep来搜索整个项目库文件。

我能想出很多的静态类型语言的优点和好处,但对于动态编程语言,我总结不出多少有点,但很显然,有很多人非常的喜欢动态编程语言,为什么?

duck typing

一个答案就是动态语言通常更方便开发较小的项目,因为可以无需声明类型而节省了很多麻烦。另外一个答案是,动态类型解除了程序员的束缚,可以最大的 发挥程序员的编程技能,能最有效的利用编程语言里的各种特征和模式。但这些能力都是一把双刃剑,更多的依赖于程序员的个人才能,如果用不好,或用的过度, 都会产生负面的害处。

你认同我的观点吗?

英文原文:Why is dynamic typing so popular?
译文出处:程序师网

展开阅读全文
50 收藏
分享
加载中
最新评论 (49)
不喜欢动态语言,学不好,也写不好。。。。
2016-02-26 16:44
0
回复
举报
没用过JetBrains 系列的IDE? 就算是有钱依然用盗版的屌丝也会找注册码
2015-01-06 09:40
0
回复
举报

引用来自“七液”的评论

我倒是觉得是因为现在程序员普遍技术降低的原因造成的动态语言兴起。开发速度快不快我觉得不是问题,对于一个熟练的静态语言开发人员来说。有一个趁手的IDE+一大堆自己平时开发的基础库的情况下。开发速度不会比动态语言降低多少。而且可靠性有保障。顺带性能也上去了

引用来自“BuN_Ny”的评论

不能吧,我觉得静态语言比动态语言相对简单、好理解些。动态语言入门相对简单,写好相对难。性能、可靠性等问题没的讨论,不如静态的,但这往往不是主要问题。开发速度的话主要看应用场景,你再牛逼用C/C++没有用PHP、Python、Nodejs的做网站快,同样动态语言也有很多开发场景上的软肋。再有一点,如果有个需求,给最终用户做薪资公式自定义或者给运维做脚本配置等功能,静态语言是很难实现的。某样东西存在,是为了解决某种问题,没有必要厚此薄彼,夸大静态语言的能力。

引用来自“七液”的评论

或许你到现在也不会用数据驱动编程吧?嵌入式和单片机模式下,根据用户配置数据然后来做相应的逻辑修改难道你认为都是修改代码完成的么?
当然大部分人的大脑都是线性的,认为修改逻辑代码比使用数据驱动更简单,这点我也不否认,动态语言由于类型不稳定和各种根据运行状态才反馈问题的种种特性其实更增加了不可靠性。比如a=b+2在静态语言中基本上不会出现问题,但是在动态语言里面任何情况都有可能发生。甚至b=1的时候两个整形都有可能出错,出错的原因也许是因为a的内存分配失败造成的。

最新的不一定是最好的,但是能够从C诞生开始算屹立工业和军事界40多年的稳定可靠性不是动态类型可比的。

再说目前为止静态语言带来的性能也是动态语言无法比拟的。不是夸大静态语言的能力,而是目前来说静态语言基本上可以做到的任何功能,甚至动态语言编译器和VM都是静态语言开发的。可是动态语言又能做到什么呢?

我觉得目前最大的好处就是让程序员的入门门槛降低,但是随之而来门槛降低,BUG增多就是副作用。虽然我除了Python和Lua几乎不会别的动态语言,但是就这两门语言也经常看到许多人写出的可笑的代码。
另外平时开发的可靠性和性能大于开发速度的项目(举个例子好奇号虽然是Python+C开发的代码,但是Python的代码是通过输出C代码来实现的。而不是直接用了Python的代码)。所以动态语言的使用几乎都是用在一些对可靠性和性能要求不高的web部分。或许以后会往终端上,但是遇到具有绝对安全的领域,静态语言的可分析性恰恰给语义识别和逻辑分析带来了便利性。
你这么讨论的话,我只能说对于编程语言来讲,最重要的是有电。我说了某种编程语言的存在是为了解决某种问题,不论是技术问题还是社会问题。既然有偏见,就没必要讨论优劣问题。你是对的,你总能说服我。
2014-12-25 08:49
0
回复
举报

引用来自“ruki”的评论

静态语言只要你积累了足够的经验和常用库 开发效率不比动态的慢 有了经验积累 就算出问题 也能快速解决 。。动态虽然能快速开发 但要是你不够熟练运用 也很容易出bug 而且更难调试 。。所以没有谁优谁劣。个人能力,熟练程度,语法适合自己 才是关键。。不管那种语言 只要自己觉得用的爽 就是喜欢 哪怕是汇编 你也可以积累出一堆的开发库和框架 熟练到跟写动态一样的效率。。
+1
2014-12-25 02:21
0
回复
举报

引用来自“七液”的评论

我倒是觉得是因为现在程序员普遍技术降低的原因造成的动态语言兴起。开发速度快不快我觉得不是问题,对于一个熟练的静态语言开发人员来说。有一个趁手的IDE+一大堆自己平时开发的基础库的情况下。开发速度不会比动态语言降低多少。而且可靠性有保障。顺带性能也上去了

引用来自“BuN_Ny”的评论

不能吧,我觉得静态语言比动态语言相对简单、好理解些。动态语言入门相对简单,写好相对难。性能、可靠性等问题没的讨论,不如静态的,但这往往不是主要问题。开发速度的话主要看应用场景,你再牛逼用C/C++没有用PHP、Python、Nodejs的做网站快,同样动态语言也有很多开发场景上的软肋。再有一点,如果有个需求,给最终用户做薪资公式自定义或者给运维做脚本配置等功能,静态语言是很难实现的。某样东西存在,是为了解决某种问题,没有必要厚此薄彼,夸大静态语言的能力。
或许你到现在也不会用数据驱动编程吧?嵌入式和单片机模式下,根据用户配置数据然后来做相应的逻辑修改难道你认为都是修改代码完成的么?
当然大部分人的大脑都是线性的,认为修改逻辑代码比使用数据驱动更简单,这点我也不否认,动态语言由于类型不稳定和各种根据运行状态才反馈问题的种种特性其实更增加了不可靠性。比如a=b+2在静态语言中基本上不会出现问题,但是在动态语言里面任何情况都有可能发生。甚至b=1的时候两个整形都有可能出错,出错的原因也许是因为a的内存分配失败造成的。

最新的不一定是最好的,但是能够从C诞生开始算屹立工业和军事界40多年的稳定可靠性不是动态类型可比的。

再说目前为止静态语言带来的性能也是动态语言无法比拟的。不是夸大静态语言的能力,而是目前来说静态语言基本上可以做到的任何功能,甚至动态语言编译器和VM都是静态语言开发的。可是动态语言又能做到什么呢?

我觉得目前最大的好处就是让程序员的入门门槛降低,但是随之而来门槛降低,BUG增多就是副作用。虽然我除了Python和Lua几乎不会别的动态语言,但是就这两门语言也经常看到许多人写出的可笑的代码。
另外平时开发的可靠性和性能大于开发速度的项目(举个例子好奇号虽然是Python+C开发的代码,但是Python的代码是通过输出C代码来实现的。而不是直接用了Python的代码)。所以动态语言的使用几乎都是用在一些对可靠性和性能要求不高的web部分。或许以后会往终端上,但是遇到具有绝对安全的领域,静态语言的可分析性恰恰给语义识别和逻辑分析带来了便利性。
2014-12-25 02:18
0
回复
举报

引用来自“倚天屠龙之金毛狮王”的评论

动态语言你用记事本怪谁 静态语言你用记事本也一样

引用来自“赵占涛”的评论

动态语言没有很好的ide支持

引用来自“久永”的评论

说反了吧?应该是 IDE 没法很好的支持 动态语言。
一个意思
2014-12-24 13:46
0
回复
举报

引用来自“倚天屠龙之金毛狮王”的评论

动态语言你用记事本怪谁 静态语言你用记事本也一样

引用来自“赵占涛”的评论

动态语言没有很好的ide支持
说反了吧?应该是 IDE 没法很好的支持 动态语言。
2014-12-24 10:36
0
回复
举报
静态语言只要你积累了足够的经验和常用库 开发效率不比动态的慢 有了经验积累 就算出问题 也能快速解决 。。动态虽然能快速开发 但要是你不够熟练运用 也很容易出bug 而且更难调试 。。所以没有谁优谁劣。个人能力,熟练程度,语法适合自己 才是关键。。不管那种语言 只要自己觉得用的爽 就是喜欢 哪怕是汇编 你也可以积累出一堆的开发库和框架 熟练到跟写动态一样的效率。。
2014-12-24 09:14
0
回复
举报

引用来自“七液”的评论

我倒是觉得是因为现在程序员普遍技术降低的原因造成的动态语言兴起。开发速度快不快我觉得不是问题,对于一个熟练的静态语言开发人员来说。有一个趁手的IDE+一大堆自己平时开发的基础库的情况下。开发速度不会比动态语言降低多少。而且可靠性有保障。顺带性能也上去了
不能吧,我觉得静态语言比动态语言相对简单、好理解些。动态语言入门相对简单,写好相对难。性能、可靠性等问题没的讨论,不如静态的,但这往往不是主要问题。开发速度的话主要看应用场景,你再牛逼用C/C++没有用PHP、Python、Nodejs的做网站快,同样动态语言也有很多开发场景上的软肋。再有一点,如果有个需求,给最终用户做薪资公式自定义或者给运维做脚本配置等功能,静态语言是很难实现的。某样东西存在,是为了解决某种问题,没有必要厚此薄彼,夸大静态语言的能力。
2014-12-24 09:05
0
回复
举报
更多评论
49 评论
50 收藏
分享
返回顶部
顶部