写点什么

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

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

关注

评论

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

敏捷MVP面面观

禅道项目管理

敏捷 MVP

数据结构与算法必知基础知识

bigsai

数据结构 算法

消息队列架构设计文档

高亮

架构实战营

变电站无人值守也能运筹帷幄?数据这样监控,时效节省高达90%

一只数据鲸鱼

数据可视化 3D可视化 智慧电网 变电站

硬核资源!清华博士的Spring Boot中AOP与SpEL笔记,码农:膜拜

牛哄哄的java大师

Java springboot spring aop

大厂常问iOS面试题汇总!

iOS猿_员

ios 面试 ios开发

IDEA 的 debug 怎么实现?出于这个好奇心,我越挖越深!

Java小咖秀

Java debug IDEA 調試

TCP传输层面试中常问的问题汇总(你所不知道的传输层)

linux大本营

c++ Linux TCP 网络编程 TCP/IP

软件质量指标自动度量方法

鸿渐科技_mason

代码质量 源代码 软件安全 软件质量指标 鸿渐科技

新一代运营保障体系探索

鲸品堂

运营 解决方案 运营商 通信运营商

带你快速入门Kotlin

Changing Lin

5月日更

☕【Java技术之旅】来啊!带你认识一下String字符串

洛神灬殇

JVM string 5月日更

这份Mybaits缓存机制总结,阿里大佬看完直呼牛批,到底有多强?

飞飞JAva

Yarn的架构和原理

五分钟学大数据

hadoop YARN 5月日更

技术干货 | 轻松两步完成向 mPaaS 小程序传递启动参数

蚂蚁集团移动开发平台 mPaaS

ios android 移动开发 mPaaS

撸完腾讯T4大佬整理的ThreadLocal笔记,解决内存泄漏只是小儿科

牛哄哄的java大师

Java ThreadLocal

华为云数据库GaussDB(for Cassandra)揭秘第二期:内存异常增长的排查经历

华为云开发者联盟

云原生 内存泄漏 NoSQL数据库 华为云数据库 GaussDB(for Cassandra)

模块三总结

竹林七贤

如何计算STM32定时器、独立看门狗和窗口看门狗

不脱发的程序猿

定时器 stm32 单片机 看门狗

模模搭古城搭建学习笔记4:完结篇

ThingJS数字孪生引擎

物联网 3D可视化 数字孪生

iOS 面试策略之语言工具-Swift vs. Objective-C

iOSer

ios objective-c swift 面试 移动开发

Spring Bean生命周期、DI、IOC、AOP、循环依赖、事务管理

正亮

bean注入过程 spring aop spring事务管理

Mysql的事务隔离与实现

Geek_快去搞学习

MySQL 事务隔离级别 事务

Vue SSR在好大夫的落地

好大夫在线技术团队

最佳实践 Vue 大前端 语言 & 开发 文化 & 方法

拜托阿里老表爆肝整理10W字Java高级面试精华!帮我成功入职字节

比伯

Java 编程 架构 互联网 计算机

Angular:都2021年了,你为啥还没用Angular

华为云开发者联盟

angular 数据绑定

iMazing中IPA文件的介绍与管理

懒得勤快

ios iphone imazing 苹果手机管理

新建了一个Go项目的脚手架

soolaugust

GitHub 编程 Go 语言

微信标准版交易组件使用教程

frank-say

微信小程序 微信 大前端

论文解读丨基于局部特征保留的图卷积神经网络架构(LPD-GCN)

华为云开发者联盟

图神经网络 图结构 图卷积神经网络 DenseNets 池化

STM32 GPIO的原理、特性、选型和配置

不脱发的程序猿

stm32 单片机 STM32 GPIO GPIO GPIO的原理、特性

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