0

0

如果静态类型的语言比动态类型的语言更加适合大项目,那么是否在一定规模和复杂度以下动态类型的语言更好?

php中文网

php中文网

发布时间:2016-06-06 16:44:23

|

1560人浏览过

|

来源于php中文网

原创

首先,个人确实比较认可静态类型的语言更适合大项目。那么动态类型的语言在什么规模下更好呢(意思是在这个规模下不仅能完成而且比静态类型语言更合适)?比如Discuz、Wordpress、豆瓣用的是PHP、Python等语言,规模是十几万到几十万行不等,而我自己并没有参与过什么更大的项目,所以这方面认知不足。敬请各位指点。
----------
补充,在下对这个问题的困惑是阅读过Discuz和Wordpress的代码,感觉像一坨翔(当然可能因为我水平低),规模也就二三十万行。真无法想象更大的系统将是什么样子(比如豆瓣)。最突出的一个感觉是静态类型语言的项目容易grep而且有好用的、能够准确跳转到定义的IDE。

回复内容:

我想说性能与安全。

先说性能。PHP业界很有力的佐证是Facebook对PHP动态执行环境的摒弃与改造,对FB这个量级的公司是有意义的,它们不愁招不到人,也不愁招到的人驾驭不了一个自定义的编译运行时的长期迭代。一般团队是负担不起这个成本的,也没有必要,大多数Web后台只需要把数据库这一层优化好就没有什么瓶颈了。关于FB的这方面文章很多,我想不需要展开了。

安全。好像没什么证据能证明静态语言比动态语言更安全,安全最终还是取决于代码本身的质量,而静态或者动态并不决定代码质量,人决定代码质量。但是,静态语言有一个好处,能做静态分析,而动态语言要难得多,静态分析能通过一些手段提前审计代码本身的质量,所以非直接地提供了改善代码质量的途径。但大多数项目,这个好处远没有重要到可以牺牲开发效率。

比如写一组REST API,用PHP和Go,你能明显比较出来PHP或者动态开发语言的开发效率,对初、中级的开发团队尤其明显,如果用Go,碰到稍复杂的结构,不熟悉光是类型定义与转换就会费很多脑筋,而结果也并不比PHP代码质量高多少,即使Go编译出来的代码本身快很多,但无关,因为大型应用的瓶颈首先一定是数据库,离语言本身成为瓶颈还很远。

动态类型语言和静态类型语言的区别,本质上不再与规模,而在与测试。


举个例子,你要给银行开发一个5000行代码的程序,运行在他的服务器上,任务是扫【重要/机密】的log来计算某些金钱的东西(这只是随便举个例子),你敢上python

Tago AI
Tago AI

AI生成带货视频,专为电商卖货而生

下载
动态语言相比静态语言没有任何优点。人们之所以觉得动态语言“方便”不过是因为大多数动态语言的实现是脚本解释器,便于编写临时的小任务和满足运维人员的需求而已(无需管理源代码和二进制文件的同步性;简单改下脚本立刻就能看到效果)

因为语言和其实现是可以独立的,所以上面所说的脚本解释器的优点并不能认为是动态语言的优点 首先表明立场,动态静态没有本质上的优劣,还是那句老话,合适的才是最好的。

要说清楚这个问题,先得弄清楚动态和静态类型到底是什么。
静态类型是指变量类型初始化后就不能改变,比如a初始化为int,那它就是int了,不能给它赋值一个字符串,并不是说一定得是“int a = 1”这种有标识符的才是静态类型,比如swift这种可以通过类型推倒来决定变量类型的也可以,所以本质是类型确定了就不能变。
动态类型说的是变量的类型跟着赋值的值来定,赋值int就是int,再赋值字符串就是字符串,是的,就是这样墙头草,两边倒,你说是啥就是傻。

我看前面有朋友说 动态类型和静态类型的本质区别不是规模,而在于测试。抱歉可能是我理解不对,测试方法,不管是单元测试、集成测试、系统测试等都和语言无关,动态类型和静态类型都有各自的实现方案,而且都久经检验,所以在我看来测试这个话题本身已经和语言没有关系了,也就谈不上是语言区别的本质了,并且我也了解到银行的部分定时批量脚本(跑批)还真就是用python实现的。
那动态和静态的区别到底给编程带来了什么样不一样的感受?首先,由于静态类型类型不可变,在写程序的时候避免了很多低级的错误,最常见的是先定义了一个变量是int类型的,然后后面代码很长忘记了,又定义了一个一样的变量,换成了字符串类型,最后需要用到int类型的变量,这样的话在不知情的情况下变量的类型已经发生变化了,最后使用的时候肯定会出错,然而静态类型这种情况不允许,所以就避免了,动态类型是允许这种情况的,所以出错了语法上找不到错误,排查起来很困难,如果再是int类型和string类型自动转换的话,情况就更糟了。
总结一下就是,静态类型里的语法错误在动态类型里编程了语义错误,排查起来难度比较大,所以可能给人造成动态类型不适合大规模项目的场景。但是上面说的问题更多是开发人员自己习惯不好,变量命名不好,函数可能很长,是可以通过编程规范来约束的。BUG永远是开发人员制造的,开发人员素质不行,用什么语言都白搭,会搞出一堆feature....所谓动态语言容易出问题,更多是开发人员为自己能力不够找借口,不值得效仿!


最后说说题主关心的规模和语言适配问题,我只能说题主多虑了,思维需要看远一点。什么叫大规模项目?淘宝算大吧!那淘宝整个系统是怎么样的?分布式!不是只用一种语言,不是只有一个系统!底层中间件基本是java,底层服务层也基本是java,上层也有nodejs、php,然而这些都不是一个项目,都是分拆成很多个项目来做的,每个项目的规模都不大,而且每个项目都可以用其它语言来编写(只要符合规范),淘宝内部也正在丰富编程语言的多样性。有的人可能会说,淘宝不正是从php迁移到了java么?是的,但是并不是因为动态和静态的,是因为性能和业务需求。需要做服务化,服务发现,还有一些底层存储,php搞这些效率低下,所以才换的,不是说是因为动态语言。

还是老一句,没有具体的指标,只看是否适合自己。架构与选型是技术向业务妥协的结果!


谢谢,希望对大家有帮助。

其实静态类型和动态类型的影响不是很大。

要说大项目,比如十多年前Erlang项目,AXD 301有大约200万行Erlang代码。而之前Ericsson妄图用C++开发同样的东西,没开发出来。这能不能说明动态类型比静态类型更适合大项目呢?

就是这样。 我前几天的微博。。
偶也,打完收工。。= =merge几十个changes..有按changelist的,有copy的,有临时branch里改的。。最后编译通过。。unittest通过。。然后果然就没什么问题了。这也就是静态类型语言。。这要是python。。呵呵。 准确性很重要的。使用动态语言很难保证准确。 动态语言比较适合字符串处理,或者说html文本处理而已。比如,做个网页抓取。如果用它写算法,就不行。 关于类型系统的作用,看 @雾雨魔理沙 的答案(以及同问题下很多其他答案)
zhihu.com/question/3837


--- 原答案 ---

并不是说“在一定规模和复杂度以下动态类型的语言更好”,而是说,在大多数情况下,上 Python 这种代码起步更快,如果只是希望快速解决一个问题或者跑一个简单 web 程序,用这些快速上手的东西上手做的代价更低。

应该把软件看作一个生物,每个模块是一个细胞。当这个软件代码不断“生长”后,细胞会变大,更会分裂成多个细胞,而且会演化成不同功能的细胞相互协作。细胞就是模块,而细胞的种类就是实现这个模块的语言。Web 用 Python 快速搭起来,性能关键的部分用 C / Fortran 写好,数据挖掘的部分直接上 Hadoop,都是太正常的复杂系统架构了。

p.s. PHP 这种为了单页内容设计的语言,写随便大点的项目写成一坨翔简直是应该的。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

2

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

481

2026.01.28

包子漫画在线官方入口大全
包子漫画在线官方入口大全

本合集汇总了包子漫画2026最新官方在线观看入口,涵盖备用域名、正版无广告链接及多端适配地址,助你畅享12700+高清漫画资源。阅读专题下面的文章了解更多详细内容。

156

2026.01.28

ao3中文版官网地址大全
ao3中文版官网地址大全

AO3最新中文版官网入口合集,汇总2026年主站及国内优化镜像链接,支持简体中文界面、无广告阅读与多设备同步。阅读专题下面的文章了解更多详细内容。

296

2026.01.28

php怎么写接口教程
php怎么写接口教程

本合集涵盖PHP接口开发基础、RESTful API设计、数据交互与安全处理等实用教程,助你快速掌握PHP接口编写技巧。阅读专题下面的文章了解更多详细内容。

10

2026.01.28

php中文乱码如何解决
php中文乱码如何解决

本文整理了php中文乱码如何解决及解决方法,阅读节专题下面的文章了解更多详细内容。

13

2026.01.28

Java 消息队列与异步架构实战
Java 消息队列与异步架构实战

本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。

10

2026.01.28

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

25

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

125

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第二十三期_前端开发
第二十三期_前端开发

共98课时 | 7.6万人学习

WordPress视频教程
WordPress视频教程

共23课时 | 9.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号