背景
软件运用程序的快速增长已经不再只是一件其本身受欢迎的事情了,它更是带来了深刻改进所有行业业务流程的真正机会。以是,对付企业、行业来说,通过得当的编程创建出出色的软件办理方案成为了竞争的关键。下面,我们来比拟一下近年来比较出名的两种编程措辞——Go和Ruby。
GO
先容
Go 是一个开源的编程措辞,它能让布局大略、可靠且高效的软件变得随意马虎。Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开拓,后来还加入了Ian Lance Taylor, Russ Cox等人,并终极于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开拓已经是完备开放的,并且拥有一个生动的社区。Go措辞由于自身天生支持并发的特点完美契合当下的互联网环境,以是Go措辞自发布之后便迅速风靡环球。

特点
措辞是开源的: go措辞于2009年11月开源静态类型和编译型: go措辞书写的程序必须通过编译天生归档文件或可实行文件,而后才能被利用或者实行跨平台: go措辞本身支持跨平台开拓,不论你是用什么样子的硬件环境还是软件环境基本上都可以进行去措辞的开拓(这句话有些多余,毕竟现在主流编程措辞都支持不同的硬件与软件环境)自动垃圾回收: go措辞的垃圾回收是由去措辞本身去处理的,不须要人为干预,但是如果你想要对垃圾回收进行机制进行干预这个权限也是对开拓者开放的原生支持高并发编程:原生支持高并发编程,拥有自己的并发编程机制。完善的构建工具:go程序的获取、编译、测试、安装都可以利用命令行语句完成多编程范式:go措辞除了支持函数式编程,也支持面向工具编程,有接口类型和实现类型的观点,但是用嵌入替代了继续高效的编程和运行:这里面紧张是强调编写代码的界面简洁,以及去措辞程序能够充分调动打算机的运行资源,提高程序运行效率。丰富的标准库:go措辞标准库中有很多好用的API。一定程度上面减少了对付第三方库的依赖,当然如果有好用的第三方库,作为开拓者也还是会利用的代码风格统一:go 措辞供应了一套格式化工具——go fmt。担保了不同开拓者提交的代码都是统一的格式缺陷
缺点处理:Go 措辞通过函数和预期的调用代码大略地返回缺点(或返回调用堆栈)而帮助开拓者处理编译报错。虽然这种方法是有效的,但很随意马虎丢失缺点发生的范围,因此我们也很难向用户供应故意义的缺点信息软件包管理:Go 措辞的软件包管理绝对不是完美的。默认情形下,它没有办法制订特定版本的依赖库,也无法创建可复写的 builds。比较之下 Python、Node 和 Ruby 都有更好的软件包管理系统场景
鉴于Go措辞的特点和设计的初衷,Go措辞作为做事器编程措辞,很适宜处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go措辞广泛运用于Web运用、API运用、下载运用等;除此之外,Go措辞还适用于内存数据库和云平台领域,目前国外很多云平台都是采取Go开拓。
web开拓:Go 措辞被设计成一门运用于搭载 Web 做事器,存储集群或类似用场的巨型中心做事器的系统编程措辞。大量精良的Web框架如Echo、Gin、Iris、beego等,而且 Go 内置的 net/http 包十分的精良;游戏开拓:对付高性能分布式系统领域而言,Go 措辞无疑频年夜多数其它措辞有着更高的开拓效率。它供应了海量并行的支持爬虫及大数据:Go措辞天生支持并发,以是十分适宜编写分布式爬虫及大数据处理;云平台领域: 云做事很多都是采取Go进行开拓,比如海内著名的七牛云是全站采取Go开拓;还有如盛大CDN、阿里云CDN,华为云等。而且云平台根本举动步伐如docker、kubernetes等也是Go开拓;分布式存储领域: etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;区块链领域: 区块链里面有两个明星项目以太坊和fabric都利用Go措辞;微做事:现在越来越多新的项目采取微做事架构,前面先容的精良项目中也看到很多Go供应的微做事框架,如git-kit、go-micro等。做事器编程:以前你如果利用C或者C++做的那些事情,用Go来做很得当,例如处理日志、数据打包、虚拟机处理、文件系统等。Go不适宜领域
GUI: 例如开拓IDE、移动App企业软件: 须要COTS交付、二次开拓,基于非源代码的接口扩展,可以在重启或运行时启用新特性,无需编译全体系统的源代码。这类软件常常用像annotation一样的APT机制对措辞元素做一定程度的元编程或修正超大型软件和团队:须要很明确的on the fly地知道哪个接口被哪些类型实现了,哪些类型实现了哪些接口。Eclipse有1000W行LOC,InteliJlDEA有700W,JDK自身也有700W,Hadoop+HBase有400w,JBoss等运用做事器有600W,Spring框架有200W,其它第三方库...日常开拓的JAVA商用软件,你常常跟几千万LOC打交道。但彷佛GO超过50W的开源项目只有限的Docker、K8S等。GO的开源生态系统仍旧极其弱小,能用于商用产品质量的开源库只有Beego等屈指可数的几个。许多依赖开源库只有2位数的star。Ruby先容
Ruby,一种大略快捷的面向工具(面向工具程序设计)脚本措辞,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开拓,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 措辞。由 Ruby 措辞本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的 Ruby 措辞替代品。自从 1995 年公开拓布以来,Ruby 在环球吸引了许多虔诚的程序员。2006 年,Ruby 得到广泛接管,各大城市都有生动的用户组,以及 Ruby 干系的开拓者大会.
特点
Ruby 是开源的,除了不收费之外,还可以自由利用、复制、修正和分发。Ruby 是一种通用的、阐明的编程措辞。Ruby 是一种真正的面向工具的编程措辞。在 Ruby 中,统统皆工具。所有的信息和代码都拥有属性和行为Ruby 是一种类似于 Python 和 Perl 的做事器端脚本措辞。Ruby 可以用来编写通用网关接口(CGI)脚本。Ruby 可以被嵌入到超文本标记措辞(HTML)。Ruby 语法大略,这使得新的开拓职员能够快速轻松地学习 Ruby。Ruby 与 C++ 和 Perl 等许多编程措辞有着类似的语法。Ruby 可用于开拓的 Internet 和 Intranet 运用程序。Ruby 采取虚拟机实现跨平台Ruby 支持许多 GUI 工具,比如 Tcl/Tk、GTK 和 OpenGL。Ruby 可以很随意马虎地连接到 DB2、MySQL、Oracle 和 Sybase。Ruby 有丰富的内置函数,可以直接在 Ruby 脚本中利用。Ruby 是一门相称灵巧的措辞,许可用户改变自身。 Ruby 的核心部分可以变动,也可以重新定义。此外,还可以在现有功能的根本上增加新功能。Ruby 不想阻碍程序员的创造力。缺陷
性能不如纯静态编译措辞,例如C,但可以通过用C措辞来扩展来办理完备没有类型检讨,灵巧但随意马虎隐蔽潜在的问题利用Module来实现多重继续,不如JAVA所采取的接口(Interface)办法清晰,而且由于没有严格的类型检讨,以是框架层的设计无法对实现有很严格的约束没有很完善的开拓,重构的工具,虽然现在Eclipse已经供应Ruby的开拓插件,但还没有实现重构,跳转和自动代码天生等很有用的功能,紧张缘故原由是由于Ruby支持动态类型依然保留部分非面向工具的语法,例如全局变量,全局方法许可在扩展代码中随意更换现有类的方法定义或变量,非常灵巧,但可能会由于缺点地修正了框架逻辑而引发难以创造的缺点,但可以用freeze方法来组织被修正不支持真正的多线程,多线程环境是通过在虚拟机环境中仿照出来的,不能充分发挥多CPU的功能,如果一个线程在实行底层调用被Block住则全体运用程序也被Block住。对Unicode和多国措辞的支持不好场景
很多人在日常事情利用 Ruby。也有人只是将它作为一种业余爱好。在这里,你看到的只是现实天下中 Ruby 的冰山一角。
仿真仿照:NASA 兰利研究中央利用 Ruby 进行仿真;摩托罗拉的一个研究小组利用 Ruby 写了一个天生场景和处理数据的仿照器。三维建模:Google SketchUp 是一个 3D 建模运用,利用 Ruby 作为它的宏脚本接口。商业:多伦多康复中央利用基于 RubyWebDialogs 的运用来管理、跟踪呼叫和现场做事,为 IT 帮助台和 IT 运营团队供应支持。机器人学:在 MORPHA 项目,Ruby 用来实现西门子做事机器人的反应掌握部分。电讯:朗讯一个 3G 无线电话产品中利用了 Ruby。系统管理:Level 3 Communications 公司的 Unix 容量和方案系统卖力网络分散在环球超过 1700 台 Unix(Solaris 和 Linux) 做事器的性能统计数据, 它的中心数据网络部分是由 Ruby 编写的。网页运用: RubyonRails框架的公司; SASS 天下上最成熟、稳定和强大的专业级 CSS 扩展措辞;A List Apart 建立于 1997 年的杂志网站,最近利用自定义的 Ruby on Rails 重新构建。安全:由 Rapid7 管理的社区开源项目 Metasploit Framework 是一个免费的渗透测试平台,旨在帮助 IT 专业职员评估网络和运用程序的安全性。项目由超过了 70 万行代码组成,2010 年已经下载超过一百万次。Rapid7 开拓的商业版本 Metasploit Express 和 Metasploit Pro均基于 Ruby 开拓。总结Ruby vs Go:性能
Go开拓的关键原则是大略性和生产力。Go措辞的语法大略、直不雅观,易于阅读,能够让程序员快速学习。Go措辞的紧张作者之一Rob Pike曾表示该措辞便是专门为简化开拓过程和快速得到结果而创建的。Ruby的设计也看重简洁性和生产力,其粉丝都称其是一种俏丽、奥妙的措辞。Ruby和Go都受到C系列编程措辞的影响,相对年轻,但是却俘获了不少人的心,这个中包括程序员和业务决策者。Go非常适宜办理大略和繁芜的多线程任务,这也是当初谷歌设计这门措辞的目的。受到盛行的Ruby on Rails框架的影响。Ruby非常适宜创建小型商业项目、博客和个人页面。但是面对繁芜的办理方案,Ruby有点力不从心,性能速率低,这可能会影响哀求苛刻的客户的总体满意度。根据我们的性能测试结果,在相同的环境下,Go项目比Ruby编写的类似项目运行得更快。
Ruby vs Go:社区
根据Tiobe和Stack Overflow的调查,Go是近年来发展最快、最受欢迎的编程措辞之一,而Ruby则表现相反,近几年中越来越不受欢迎。Ruby是由个人创建的,而Go则由Google设计的,其包括有广泛的云根本架构,支持性社区、论坛、教程,以及最主要的其他库,可帮助措辞向前发展。此外,Go是许多主要公司的首选,如Docker,BBC,SoundCloud,Facebook,Dropbox,乃至是Medium。这些企业用户也是Go进一步发展的担保。与之对应的,Ruby也被Twitter,Shopify,Crunchbase等大公司选中。
Ruby vs Go:兼容性
编程措辞和软件堆栈其他部分集成是可以直接影响将新办理方案、功能或改进添加到现有程序的速率。由于Go与其他措辞(特殊是C系列措辞)的自然兼容性,许多程序员乃至在利用不同堆栈(如Python和Go或PHP和Go)时都可以利用Go来提高运用程序的性能。此外,Go作为做事器端措辞可与险些所有数据库交互。至于Ruby,它的兼容性仅限于最盛行的数据库。
Ruby vs Go:开拓履历
我们的团队多年来一贯在利用这两种措辞进行开拓,他们各自都有其优点和缺陷。根据我们的履历,Go非常适宜任何规模的后端系统和高度可扩展的网络做事器。Go是一种当代竞争性的措辞,能够为您供应快速、高质量的性能,简洁的环境以及与其他技能的良好兼容性。但如果您更看重结果的快速交付,对付性能质量没有苛刻的哀求,那么Ruby可能更适宜您。