50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

Rust 即将发布 1.0 版本,Go 持续获得关注:如何在新生语言之间做出抉择

  • 2015-03-02
  • 本文字数:1500 字

    阅读完需:约 5 分钟

没有什么比谈论一门新语言能够让程序员更加兴奋、更加固执己见的了。作为两枚冉冉升起的新星, Go Rust 让我们置身在这场旋窝之中。作为灵感相似但是动机与目标完全不同的两门语言,Go 和 Rust 可谓都是出身豪门。Go 产生于 Google,由 Rob Pike 和 Ken Thompson 等人设计实现;而 Rust 则是根据 Graydon Hoare 在 Mozilla 研究时的设想构建而成。虽然刚开始的时候这两门语言都是实验性的项目,但是很快它们就开花结果并成为了各自公司全力开发的项目。

从诞生之日起,Go 和 Rust 这两门语言就有尖锐的分歧。尽管它们都借鉴了 C 和 C++ 的一些思想,但是它们所针对的应用场景和开发者却不相同。如果需要决定哪种类型的应用程序最好使用哪一门语言来实现,那么可以参考 Serdar Yegulalp 的这篇文章《 Rust 即将发布 1.0 版本,Go 持续获得关注:如何在新生语言之间做出抉择》, 当然也可以继续查看下面的内容,因为本文便是由 Serdar Yegulalp 的这篇文章翻译整理而来。

语言的适用场景

鉴于大部分语言本身的复杂性,通常情况下我们难以准确地定义某一给定编程语言的最佳应用场景,但是我们却可以缩小它的使用范围。Go 的语法类似于 C,熟悉 C 的程序员能够非常快地上手,然而它并不适合系统编程。Go 的特性集(goroutines、channels 以及大量的并发模式)更适合于开发分布式应用程序,例如Etcd——CoreOS 用来在节点间同步设置的分布式键值系统。

Rust 能够处理的问题与 C 语言相似,它关注于“类型安全、内存安全、并发和性能”,Rust 为了可靠的系统级编程而设计,针对于分布式的客户端 / 服务器应用程序。总之,Go 能处理的很多编程任务 Rust 也能处理,但是 Rust 可以处理的问题 Go 不一定能处理得了。

简单还是安全?根据场景来定

Go 来源于 C,但是与 C 相比其语言特性的数量依然比较少,类型继承、泛型、方法 / 操作符重载等功能都被特意地剔除了,但是有一些特性在其他地方得到了间接的实现——例如,使用接口替代继承。Go 内置了垃圾收集和内存管理功能,这主要是基于语言易用性方面的考虑。

相比之下,Rust 在构建的时候将安全性放在首位。程序员不需要指定变量的类型,编译器会根据具体的使用情况进行推断,因此不安全的代码很难运行。当然,Rust 也提供了方法可以将代码标记为不安全的,例如内联汇编代码。

包的完善程度

Go 已经在一些产品中得到了应用,在这一点上它要远远优于 Rust,特别是有一些知名的、较大型的软件项目也在使用 Go 语言。其中不得不提的一个项目就是时下火热的 Docker,另外还有 CoreOS 的 Etcd 项目,Deis PaaS 以及 InfluxDB 等。Go 语言拥有一个健壮的标准库和大量的社区贡献包。

与 Go 相比,Rust 作为一门新生语言在产品环境中的使用量就少了很多,大部分人可能仅仅是因为想尝尝鲜才用了一点。另外,Rust 在开发期间的变化幅度很大,这也导致了基于它构建的产品代码少之又少。当然,现在 Rust 这门语言已经相对稳定了,以后使用 Rust 开发的项目应该会慢慢多起来。

未来计划

Go 的最后一个主版本发布于 2014 年 12 月,下一个主版本(1.5 版本)预计会在 6 个月以后发布,该版本将会使用 Go 语言编写其自身的所有工具链,同时会对垃圾收集器做重要的修整。

Rust 将于 2015 年 2 月 16 日左右发布 1.0 beta1 版,正式版将于 Beta 版发布之后的六个周到三个月左右发布。之后,我们可能会看到 Servo (一个能够利用现代硬件固有的并行性、使用 Rust 语言编写的 HTML 渲染引擎)这个项目取得显著进展。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015-03-02 08:458322
用户头像

发布了 321 篇内容, 共 131.9 次阅读, 收获喜欢 19 次。

关注

评论

发布
暂无评论
发现更多内容

音视频行业不可或缺的功能-云端录制

anyRTC开发者

音视频 WebRTC 在线教育 直播 RTC

前端知识总结输出文章目录大全

梁龙先森

JavaScript 大前端 编程语言 28天写作

灵雀云Kube-OVN进入CNCF沙箱,成为CNCF首个容器网络项目

York

灵雀云 Kubernetes Kube-OVN

面对key数量多和区间查询低效问题:Hash索引趴窝,LSM树申请出场

华为云开发者联盟

数据库 数据 存储 Hash索引 LSM树

HTML5中的拖放功能

我是哪吒

html html5 程序员 面试 大前端

区块链作用之数字货币的影响

v16629866266

Volcano 监控设计解读,一看就懂

华为云开发者联盟

Kubernetes 云原生 监控 Volcano 计算

Elasticsearch 批量查询 mget

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

你会读书吗?

xcbeyond

读书感悟 读书方式 28天写作

代码 or 指令,浅析ARM架构下的函数的调用过程

华为云开发者联盟

函数 任务栈 arm架构

美国大选期间美股迎来大涨,舆情到底有何魔力?

星环科技

人工智能 大数据

高阶段位机房管理:3D集装箱数据中心,触发科技“火苗”的燃烧

一只数据鲸鱼

数据可视化 3D可视化 机房管理 数据中心可视化 集装箱式数据中心

Vue 3自定义指令开发

葡萄城技术团队

【Android Tips】小厂的扫码还能怎么做?

李小四

机器学习 二维码 扫码 微信扫码

《论雨伞道德》- 不要和自己的良心捉迷藏

石云升

读书笔记 28天写作 雨伞道德

【CSS】不规则阴影

德育处主任

css3 html/css CSS小技巧 28天写作 纯CSS

阿里巴巴正式推出2021年金三银四1000道Java工程师面试题手册(含答案)

Java架构追梦

Java 阿里巴巴 面试 架构师 金三银四

个人隐私之老话重谈

张老蔫

28天写作

微服务容错时,这些技术你要立刻想到

华为云开发者联盟

微服务 线程 服务雪崩 断路器 服务降级

机器学习应用设计阶段的 10 个陷阱和 11 个最佳实践

机器学习

[高并发]高并发分布式锁架构大解密,不是所有的锁都是分布式锁!!

Geek_0o5u34

前端模拟假数据(json-server光速入门篇)

德育处主任

json 大前端 Node 28天写作 json-server

AI、IoT、区块链、自主系统、下一代计算五大技术引领未来供应链发展

京东科技开发者

区块链 AI IoT 供应链

IDEA 异常退出 解决方法

任广印

IDEA

甲方日常 91

句子

工作 随笔杂谈 日常

即构SDK新增焦点语音功能,可实现特定用户语音的聚焦

ZEGO即构

【CSS】波纹效果

德育处主任

CSS小技巧 28天写作 纯CSS

Vue3 中 v-if 和 v-show 指令实现的原理 | 源码解读

五柳

源码分析 大前端 Vue3

漫谈HTTP协议

架构精进之路

HTTP 七日更 28天写作

CSS实现数据统计

德育处主任

大前端 CSS小技巧 28天写作 纯CSS

数据中台:建立在数据网络效应之上的赛道

奇点云

大数据 数据中台 云原生 数据

Rust即将发布1.0版本,Go持续获得关注:如何在新生语言之间做出抉择_语言 & 开发_孙镜涛_InfoQ精选文章