写点什么

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:457962
用户头像

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

关注

评论

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

面试官:系统需求多变时如何设计?

Geek_1df311

程序员 架构 面试 计算机

【可观测之路】“观测云”CSDN技术专区正式上线!

观测云

可观测 CSDN

公布半小时下载量达10W:阿里大牛出品「MyCat笔记」真香

热爱java的分享家

Java 面试 编程语言 经验分享 mycat

TDSQL MySQL版产品能力介绍及新特性

腾讯云数据库

数据库 tdsql

第二届腾讯“开悟”大赛初赛放榜,强化学习研究还能这么快乐?

科技热闻

TDSQL Server产品新特性

腾讯云数据库

数据库 tdsql

智慧园区综合管理平台系统开发,智慧园区综合能源管理系统方案

电微13828808271

如何利用EasyRecovery恢复c盘已删文档

淋雨

数据恢复

深圳企业办理等保备案流程详细说明

行云管家

网络安全 深圳 等级保护 等保备案

Flink CDC 2.0 数据处理流程全面解析

大数据技术指南

11月日更

保姆级神器 Maven,再也不用担心项目构建搞崩了

沉默王二

Java maven

“阿里爸爸”又爆新作!Github新开源303页Spring全家桶高级笔记

热爱java的分享家

Java 面试 编程语言 经验分享 Spring全家桶

观测云产品更新|新增场景笔记、监控SLO、升级场景视图、异常检测库等功能

观测云

功能更新

你不知道的$nextTick

CRMEB

TDSQL-C for MySQL版产品新特性

腾讯云数据库

tdsql 国产数据库

新来的00后真是卷王,工作没两年,跳槽到我们公司起薪26K

Geek_1df311

Java 程序员 架构 面试

宝马、西门子是如何开始DevOps 的?

飞算JavaAI开发助手

恒源云(GPUSHARE)_长尾分布的多标签文本分类平衡方法(论文学习笔记)

恒源云

人工智能 深度学习 算力

质量基础设施一站式服务平台开发,国家NQI一站式云平台搭建

电微13828808271

2022年游戏市场趋势——最后一个十亿蓝海待挖掘

游戏出海 手机游戏

太完整了!阿里内部热捧“Spring全线笔记”,不止是全家桶

热爱java的分享家

Java 面试 编程语言 springboot 经验分享

CSS布局(三)之等分布局

Augus

CSS 11月日更

提升软件开发效率,企业数字化转型更轻松?

行云创新

技术 云原生 开发 数字化转型

打造一个物联网平台真的工程巨大吗?

Speedoooo

容器 ios开发 APP开发 Andriod开发

我以为自己MySQL够牛逼了,直到看到了Alibaba的面试题

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

深入理解 WKWebView(入门篇)

百度开发者中心

Webkit WKWebView

Go语言学习查缺补漏ing Day5

Regan Yue

Go 语言 11月日更

TDSQL-C for MySQL版产品新特性

腾讯云数据库

数据库 tdsql

企业云资源管理系统着重推荐-行云管家!

行云管家

云计算 服务器 云资源

索信达控股:四大策略、五大行动,新趋势下数字生态的落地策略及行动路径

索信达控股

金融科技 数字化转型 数字金融 银行业 金融机构

CTF夺旗PWN题:二叉树的漏洞利用

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

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