技术迭代的速度越来越快,这一点在编程语言的更新变化中尤为明显。前不久,Python开发商Anaconda发布了PyScript,让Python应用可以在浏览器中运行。而在近日,开发者采用相同的思路让Go也能在浏览器上运行。
众所周知,每种语言都有其独特性的表现,互相之间是不能替代的。Python和Go这两种语言都是时下非常热门的语言。从技术上讲,Go是一种为速度而构建的过程式函数式语言,而Python是一种面向对象、命令式、函数式和过程式语言。Go支持并发,即算法能够无序运行其步骤,而Python不支持。
从最新一期的TIOBE编程语言排行榜可以看出,Python依然稳定地占据榜首位置,Go则位列第14位。
TIOBE5月编程语言排行榜
“Python的功能最强大,而Go的速度最快”,这应该能代表大多数程序员的心声。事实上,Python和Go两种语言虽然各有优势,但在流行性上Python却是略占上风的。为什么Go语言没有Python流行呢?
想要探究流行性的问题,从语言产生之初就可以初见端倪。
Python是1991年出现的,使用者众,使得它具备大量完备详实的文档,几乎所有的库都有官方使用文档,还有大量的开源项目,使用Python,可以复用前人经验文档代码,因此Python可以很好的被集成到企业级应用中。
Go是2009年由谷歌开发完成的,它主要是用来解决其他编程语言过重包袱和过分设计的语言,虽然它拥有很高的性能和速度,但舍弃了一些功能,比如它没有强大的库,也不支持继承,不支持对象导向的编程,这使得它很适合轻量级的线程实现。
需要说明的是,Python产生得更早,使用的人更多,从而流传的说明文档和项目代码也更多,这又促使用的人越来越多,形成了一个正向循环。而Go虽然也有很多优点,但它并不适合重量级项目,又没有大量的库,无法面向对象编程,就基本隔绝了让它火爆的可能性。接下来具体看看二者之间的区别。
1、语法:Python的语法使用缩进来指示代码块,Go的语言基于打开和关闭括号。
2、范例:Python是一种基于面向对象编程的多范式,命令式和函数式编程语言。它始终坚持:如果一种语言在某些情境中表现出某种特定的方式,理想情况下它应该在所有情境中都有相似的作用。但它又不是纯粹的OOP语言,它不支持强封装。Go是一种基于并发编程范式的过程编程语言,它与C具有表面相似性,实际上,Go更像是C的更新版本。
3、并发:Go拥有内置的并发机制,而Python没有提供内置的并发机制。
4、类型化:Python是动态类型语言,而Go是一种静态类型语言,它实际上有助于在编译时捕获错误,这可以进一步减少生产后期的严重错误。
5、用法:Python更多用于Web应用程序,它非常适合解决数据科学问题。Go更多地围绕系统编程,即Go更像是一种系统语言。
6、安全性:Python是一种强类型语言,它是经过编译的,因此增加了一层安全性。Go具有分配给每个变量的类型,因此,它提供了安全性。但是,如果发生任何错误,用户需要自己运行整个代码。
7、管理内存:Go允许程序员在很大程度上管理内存。而Python中的内存管理完全自动化并由PythonVM管理,它不允许程序员对内存管理负责。
8、库:与Go相比,Python提供的库数量要大得多。
9、速度:Go的速度远远超过Python。
通过对比不难发现,两种语言各有各的优势,也都各有不足。一个语言的流行,需要拥有足够多的优点,并且缺点是不够致命的。
1、语法简单
和传统的C/C++、C#等语言相比,Python对代码格式的要求没有那么严格,这种宽松使得用户在编写代码时比较舒服,不用在细枝末节上花费太多精力。
Python是一种代表极简主义的编程语言,阅读一段排版优美的 Python 代码,就像在阅读一个英文段落,非常贴近人类语言,所以人们常说,Python是一种具有伪代码特质的编程语言。伪代码必须结构清晰、代码简单、可读性好,并且类似自然语言。
2、开源且免费
主要体现在两方面:一是程序员使用Python编写的代码是开源的;二是Python解释器和模块是开源的。开源的好处就是,总有那么一小撮人,他们或者不慕名利,或者为了达到某种目的,会不断地加强和改善Python。
3、跨平台
Python本质上是用C写的,有C编译器的地方就有Python解释器。对于横行天下数十载的C来说,早已拥有大量适配的平台。作为一种解释型语言,Python是可以跨平台的,可移植性更好。
4、功能强大(模块众多)
Python的模块众多,基本实现了所有的常见的功能,从简单的字符串处理,到复杂的3D图形绘制,借助Python模块都可以轻松完成。
Python社区发展良好,除了Python官方提供的核心模块,很多第三方机构也参与进来开发模块,这其中就有Google、Facebook、Microsoft等软件巨头。即使是一些小众的功能,Python往往也有对应的开源模块,甚至有可能不止一个模块。
5、用途广泛
Python适用于网站、桌面应用开发,自动化脚本,复杂计算系统,科学计算,物联网,游戏设计,机器学习,自然语言处理等很多方面。它旨在提高程序员的开发效率而不在于他们编的代码。由于Python程序代码简单,所以和与其他程序语言相比,后期的程序维护更容易,更舒心。从商业角度来看,需要的成本降低,程序员的效率提高。
“人生苦短,我用Python”,这是当下非常流行的一句口头禅。但你有没有想过,其他语言真的不香吗?相比Python,Go也自有其优势。
1、部署简单
Go编译生成的是一个静态可执行文件,除了glibc外没有其他外部依赖。这让部署变得异常方便:目标机器上只需要一个基础的系统和必要的管理、监控工具,完全不需要担心应用所需的各种包、库的依赖关系,大大减轻了维护的负担。这和Python有着巨大的区别。由于历史的原因,Python的部署工具生态相当混乱,比如setuptools,、istutils、ip、buildout的不同适用场合以及兼容性问题。官方PyPI源又经常出问题,需要搭建私有镜像,而维护这个镜像又要花费不少时间和精力。
2、良好的语言设计
从学术的角度来说,Go语言其实非常平庸,不支持许多高级的语言特性;但从工程的角度来说,Go的设计是非常优秀的:规范足够简单灵活,有其他语言基础的程序员都能迅速上手。更重要的是Go自带完善的工具链,大大提高了团队协作的一致性。比如Gofmt自动排版Go代码,很大程度上杜绝了不同人写的代码排版风格不一致的问题。把编辑器配置成在编辑存档的时候自动运行Gofmt,这样在编写代码的时候可以随意摆放位置,存档的时候自动变成正确排版的代码。此外还有Gofix,Govet等非常有用的工具。
3、更快的性能和并发性
在Go和Python之间,Go执行起来要快很多是一个确定的事实。这是因为与Python相比,Go更节省资源。Python使用资源要求较高的线程,而Go使用独立的Goroutine,这有助于节省CPU和内存等资源。这种资源效率不仅有助于提高性能,还能带来成本效益。
4、可扩展性
Go拥有许多内置功能,可处理多个并发Web请求,这反过来又使其成为编译程序的高效语言。当语言能够处理多个并发请求时,它自动也具有很高的可伸缩性。随着企业的发展,所使用的程序将需要同时做许多事情。因此,随着Go对后端程序的支持,任何不断增长的业务都将能够更好地处理可伸缩性问题。
总的来说,Go更多是为了解决C或C+程序员编写高并发程序时的痛点问题。从语法特征上来说,Go主要是服务于高并发后台服务器程序而设计出来的小众语言,不可能成为大众语言。高并发和高开发效率,如同鱼和熊掌不可兼得。
Go和Python都易于使用和学习。Go真的很快,而Python则有大量的社区支持。目前,在Go的开发中,Go主要用于服务器端应用程序。Python是数据科学家的首选语言,而且很可能会持续很长时间。
从研发人员的使用情况来看,在智能分析方面用Python编译会比较多,在部分基层调用能力上则采用Go比较多。
从可扩展性来看,Go在创建之初就考虑到了可扩展性。其内置并发性允许同时处理多项任务。Python也使用并发性,但并非内置,它通过线程实现并行化。这意味着如果你打算处理大型数据集,Go应是更适合的选择。
从性能方面来看,Python并非内存/CPU友好的语言,但它具备大量库,可以高效执行基础的开发任务。Go具备内置功能,更适合微服务软件架构。
从应用角度来看,Python适合人工智能、数据分析、深度学习和Web开发任务,而Go适用于系统编程,执行云计算和集群计算应用的开发者喜欢使用Go。
从社区与库的角度来看,Python的历史赋予它一定优势,它具备大量库,拥有大型支持社区。而Go语言仍在增长期,没有那么多库和社区支持。但是Go语言的增长率和采用率非常惊人,每天都在扩张。
从执行层面来看,如果速度是王道,那么Go遥遥领先。
考虑以上事项后,具体使用案例将成为采用哪种语言的决定性因素。假如你的开发团队要创建微服务,那么Go是更合理的选择,因为它速度快、易于编程、可扩展性优异。而Python更适合AI、ML和数据分析任务。开发者在选择编程语言时,应考虑开发项目的性质和规模,以及所需的技能组合。
不过,在选择语言时,也不用太纠结。因为Go和Python这两种语言都在持续演进、扩张和增长。这意味着,不管选择哪种语言,未来开发者都将看到这些语言出现更多的功能和改进。让我们一起拭目以待吧!
来源:51CTO