Go 与 Rust

目录

  • 1. Go 与 Rust

1. Go 与 Rust

一位挺 Rust 的网友说道: “我也为这个选择烦恼了很久。最终 Rust 胜出了。首先, 我感觉 Rust 更接近于以前 Pascal 时代的东西, 你可以控制一切; 其次, 如果 wasm 和相关技术大爆发, Rust 将是一个更安全的选择; 然后, 我们已经有了 Python 用于快速开发, 因此选择一些更极端的东西是有道理的, Go 在某种程度上处于中间地带。最后, Rust 应用于内核且备受关注, 所以不太可能会被淘汰。”

另一位持反对意见的开发者则表示, "我从事 Go 开发已经快十年了, 但最近我也尝试了下 Rust。我认为目前有一些对 Rust 的强制性和误导性偏好, 从我在各种初创公司的经验, 包括我目前所在的公司来看, 对于后端开发来说, Go 是迄今为止最佳选择! 注意, 在性能、功能或其他方面……这两种语言非常非常相似! "


Rust 是一种低级静态类型的多范式编程语言, 更多关注安全性和性能。

—Gints Dreimanis

Go 是一种开源编程语言, 能够轻松构建起简单、可靠且高效的软件。

—golang.org


我们当然可以争论什么才是真正"面向对象"的语言。但公平地讲, C++、Java 或者 C#用户所期望的那种面向对象编程风格, 在 Go 或者 Rust 中确实不存在。

—Jack Mott


gofmt 的风格也许不是每个人的最爱, 但 gofmt 却能帮到每一个人。

—Rob Pike

我在职业生涯早期用的是 Java 和 Ruby, 所以编写 Go 和 Rust 代码一直让我有点畏惧、觉得自己掌握不了。但等到进入谷歌并看到用 Go 编写的服务时, 我才真正松了口气, 因为我发现它很容易构建和运行。

Rust 也是如此。虽然我只在小规模项目上进行过研究, 但也看得出它的易用性。我希望那些能够无限配置的构建系统早点成为历史, 现在的新语言都附带自己的专用构建工具而且能够开箱即用, 这样不好吗?

—Sam Rose


Go 确实非常容易学习。之前就经常听人提到这一点, 但实际使用后我仍惊讶于它竟能快速提高工作效率。感谢 Go 语言、相关文档和工具, 我只用了短短两天就编写出了有趣且可以提交的代码。

—Rust 程序员对于 Go 语言的早期印象

使用 Go, 我们可以快速完成工作。Go 是我用过的最高效的语言之一, 它的座右铭就是: 马上解决实际问题。

—Matthias Endler


Rust 比其他几种编程语言支持更多复杂性, 所以对应的实现范畴也更大些。

—Devathon

如果您已经准备好学习更复杂的语法和语义(以及更高的代码可读性门槛), 并以此换取最高水平的性能表现, 那 Rust 甚至足以跟 C++和 D 分庭抗礼。

—Dave Cheney


Go 让我们能更轻松地构建起一个能精心解构的应用程序, 这样的应用程序可以作为一组微服务进行部署, 并充分发挥并发性优势。Rust 也不是做不到, 只是实现起来更难一些。

从某种意义上讲, Rust 更适合那些绝不允许因内存问题而引发安全漏洞的程序员; 但相应的, 他们在执行某些对其他语言(包括 GO)来说较为简单的任务时, 就得付出更多心力。

—Sonya Koptyev

能有用于生成 goroutine 和使用 channels 的轻量级语法真的太棒了。这就是语法之力的直接体现, 种种小细节也让 Go 的并发编程体验比其他语言好出一大截。

—Rust 程序员对 Go 的早期印象

Go 专注于把并发作为最核心的概念之一。这倒不是说我们就没法在 Rust 中实现跟 Go 类似的并发性效果, 只是实现难度对于程序员多少是种考验。

—Dave Cheney


Rust 的编译器简直是严格到迂腐, 它会检查我们使用的每个变量、引用的每个内存地址。它避免了潜在的数据竞争情况, 还会通知你存在未定义行为。在 Rust 的世界中, 并发和内存安全问题几乎不可能出现。

—为什么选择 Rust?

对我来说, Rust 最大的优势就是编译器成了我的好助手, 它不会放过任何检测得到的 bug(说真的, 有时候我感觉它就像会魔法)。

—Grzegorz Nosek

在 Rust 中, 各种库工具都能帮助程序员防止用户犯错。Rust 允许我们指定一段数据, 然后保证它不归属于任何其他事物、也不会被任何其他事物所篡改。我想不起以往还有哪种语言会提供这么多防止意外误用的工具, 这种感觉堪称美妙。

—Sam Rose

如果大家选择了 Rust, 往往是因为要使用它提供的保障性设计: 关于空指针/数据竞争的安全性、可预测的运行时行为, 还有对硬件的完全控制。如果这些对你来说毫无意义, 那确实没必要非得使用 Rust。毕竟这些好处背后是有代价的: 上手很费劲。你得改掉坏习惯并掌握新概念。刚开始的时候, 大家都会被借用检查器折磨得死去活来。

—Matthias Endler

如果你是一名 C 或者 C++程序员, 曾经花几个礼拜在语言中查找内存安全 bug, 那你一定会爱上 Rust。于是"跟借用检查器作斗争"就变成了"编译器还能这么用? 爽! "

—Grzegorz Nosek


如今的服务器程序包含着数千万行代码, 由成百上千名程序员编写而成, 并且几乎每天都在更新。Go 在设计和开发上, 充分考虑到了此类环境下的工作效率提升需求。

Go 的设计考量因素包括严格的依赖项管理、软件架构随系统增长的适应性, 还有跨组件边界的健壮性。

—Rob Pike

使用 GO 语言, 初级开发者往往更容易提高工作效率, 但中级开发者则更难引入复杂的抽象并因此导致问题。正因为这种特性, 在企业软件开发领域, Rust 的吸引力往往不及 Go。

—Loris Cro


Go 跟 Rust 这两种语言可以说截然不同。尽管二者都可以被简单描述成系统语言或者 C 的替代品, 但它们的目标和应用场景、语言设计风格与功能优先级确实差异巨大。垃圾收集就是一大核心差异因素。Go 中的垃圾收集让语言变得更简单、更小巧也更易于理解。Rust 不设垃圾收集则让它速度极快(这一点特别适合那些不仅要求高吞吐量、更要求低延迟的开发者), 同时也实现了 Go 根本不可能做到的一系列功能与编程模式(至少是在不牺牲性能的前提下)。

—PingCAP


两种语言各有不同的应用范围。Go 擅长编写微服务和典型的"DevOps"任务, 但它并不属于系统编程语言。Rust 在强调并发性、安全性及/或性能的任务中更为强大, 可学习曲线也确实比 Go 更陡峭。

—Matthias Endler


Rust 的执行速度优于 Go。在基准测试中, Rust 速度确实更快, 某些情况下甚至能快出一个数量级。但在选择 Rust 语言之前, 请先认清一点: Go 在多数基准测试中也没有落后太多, 而且也仍然保持对 Java、C#、JavaScript 和 Python 等语言的性能优势。

如果你需要的是顶级性能, 那么在这两种语言中任意选择都可以, 速度表现绝不会令人失望。另外, 如果你正在构建一款处理高强度负载的 Web 服务, 而且要求能够纵向/横向灵活扩展, 两款语言也都能满足需求。

—Andrew Lader


我的看法是: 对于明天就得发布的代码, 用 Go; 如果是未来五年内必须能稳定运行的代码, 那么选 Rust

—Grzegorz Nosek

如果你想加快开发速度, 比如说你有很多不同服务需要编写, 或者开发团队本身规模庞大, 那么 Go 语言肯定是正确答案。Go 特别关注并发性设计, 而且会敏锐地揪出不安全的内存访问行为(Rust 也可以), 但又不强迫你逐一管理每处细节。

Go 快速而强大, 但它的核心亮点还是帮助开发人员摆脱困境、专注于简单性和统一性。在另一方面, 如果你需要竭尽全力发挥每一丝性能空间, 那 Rust 才是最理想的选择。

—Andrew Lader


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/46157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VBA技术资料MF44:VBA_把数据从剪贴板粘贴到Excel

【分享成果,随喜正能量】人皆知以食愈饥,莫知以学愈愚,生命中所有的不期而遇都是你努力的惊喜.人越纯粹,就越能感受到美。大江、大河、大海、大山、大自然,这些风景从来都不会受“属于谁”的污染,人人都感受到它们的美…

搭建Everything+cpolar在线资料库,实现随时随地访问

Everythingcpolar搭建在线资料库,实现随时随地访问 文章目录 Everythingcpolar搭建在线资料库,实现随时随地访问前言1.软件安装完成后,打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前…

MySQL索引常见术语(索引下推、索引覆盖、最左匹配等)

一:背景 我们在面试中都知道,对于MySQL索引是必问的。大家也应该都知道MySQL的数据结构,什么是索引。其中在面试中,面试官也经常问,你做过哪些优化?本文主要是介绍MySQL索引的一些常见术语,比如索引下推、索引覆盖、最左匹配等,这些其实也是MySQL优化的一部分,能够熟练…

Docker修改daemon.json添加日志后无法启动的问题

docker实战(一):centos7 yum安装docker docker实战(二):基础命令篇 docker实战(三):docker网络模式(超详细) docker实战(四):docker架构原理 docker实战(五):docker镜像及仓库配置 docker实战(六):docker 网络及数据卷设置 docker实战(七):docker 性质及版本选择 认知升…

ATC模型转换环境问题案例

ATC(Ascend Tensor Compiler)是异构计算架构CANN体系下的模型转换工具:它可以将开源框架的网络模型(如TensorFlow等)以及Ascend IR定义的单算子描述文件转换为昇腾AI处理器支持的离线模型;模型转换过程中&a…

了解 JSON 格式

一、JSON 基础 JSON(JavaScript Object Notation,JavaScript 对象表示法)是一种轻量级的数据交换格式,JSON 的设计目的是使得数据的存储和交换变得简单。 JSON 易于人的阅读和书写,同时也易于机器的解析和生成。尽管 J…

Go语言基础之基本数据类型

Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。Go 语言的基本类型和其他语言大同小异。 基本数据类型 整型 整型分为以下两个大类: 按…

聚焦电力行业CentOS迁移,麒麟信安受邀参加第六届电力信息通信新技术大会暨数字化发展论坛并发表主题演讲

为加快推进“双碳”目标下的新型能源体系和新型电力系统建设,深化新一代数字技术与电力业务的融合发展,促进电力行业关键技术自主创新、安全可控,助力电力企业数字化转型升级和高质量发展,2023年8月9-11日,第六届电力信…

实现el-table两列多选框且不可同时勾选

1、效果图如下&#xff0c;功能&#xff1a;必修和选修不可同时勾选 2、代码如下 <template><el-table :data"addTableData" style"width: 100%"><el-table-column label"必修" width"55px" align"center"…

CentOS自己搭建时钟同步服务实操

目录 1、产生背景 2、操作过程 3、客户端操作 4、ntpd和ntpdate的区别 5、参考文章 1、产生背景 因为公司业务&#xff0c;需要使用一些网关设备上报监测实时数据&#xff0c;为了保障数据时钟一致性&#xff0c;所以需要提供一天时钟校验服务器。因为原来这个厂家的网关设…

AIGC音视频工具分析和未来创新机会思考

编者按&#xff1a;相较于前两年&#xff0c;2023年音视频行业的使用量增长缓慢&#xff0c;整个音视频行业遇到瓶颈。音视频的行业从业者面临着相互竞争、不得不“卷”的状态。我们需要进行怎样的创新&#xff0c;才能从这种“卷”的状态中脱离出来&#xff1f;LiveVideoStack…

AndroidAGP8.1.0和JDK 17迁移之旅

AndroidAGP8.1.0和JDK 17迁移之旅 前言&#xff1a; 由于我最近写demo的直接把之前的项目从AGP4.2.2升级到8.1.0引发了一些列问题&#xff0c;这里记录一下&#xff0c;前面讲解过迁移DSL方式遇到的问题&#xff0c;这次升级8.1.0也比之前顺利多了&#xff0c;想看DSL迁移的可…

交互消息式IMessage扩展开发记录

IMessage扩展简介 iOS10新加入的基于iMessage的应用扩展&#xff0c;可以丰富发送消息的内容。&#xff08;分享表情、图片、文字、视频、动态消息&#xff1b;一起完成任务或游戏。&#xff09; 简单的将发送的数据内型分为三种&#xff1a; 1.贴纸Stickers&#xff1b; 2.交…

动态内存管理详解

动态内存管理 1.前言 目前来回顾一下想要在内存中开辟空间有哪些方法&#xff1f; 创建变量&#xff1a; int a 0;//在栈上开辟了4字节的空间创建数组&#xff1a; int arr[10] { 0 };//在栈上开辟40字节的空间 但是这两种开辟方式都有两个特点&#xff1a; 开辟的内存空间…

安装搭建私有仓库 Harbor

目录 一. 准备环境 1.1安装 Docker 1.2安装 Docker Compose 二. 下载 Harbor 安装包 三. 解压安装包 四. 配置 Harbor 五. 安装 Harbor 六. 访问 Harbor 七. 创建项目、用户和角色 一. 准备环境 确保您的服务器满足 Harbor 的系统要求。最低要求是至少 2 核 CPU、4GB…

flask使用心得

Flask开发 flask不像django那样重量&#xff0c;它非常轻巧&#xff0c;可由程序员自己深度掌控。很适合用来做一些原型快速开发。 一个hello world的例子&#xff1a; from flask import Flask import loggingapp Flask(__name__)app.route(/) def hello_world():app.logge…

Azure应用程序网关

文章目录 什么是应用程序网关实战演练创建虚拟网络创建虚拟机创建应用程序网关测试搭建结果 什么是应用程序网关 Azure应用程序网关是一种托管服务&#xff0c;用于提供安全、可缩放的 Web 应用程序前端点的应用程序传送控制和保护。它可以通过 SSL 终止、cookie 基于会话持久…

神经网络基础-神经网络补充概念-58-端到端的深度学习

概念 端到端深度学习&#xff08;End-to-End Deep Learning&#xff09;是指将整个问题的解决过程从输入到输出都交由深度神经网络来完成&#xff0c;无需手工设计复杂的特征提取、预处理或后处理步骤。这种方法的核心思想是通过神经网络自动地学习适合任务的特征表示和映射&a…

Centos 7 通过Docker 安装MySQL 8.0.33实现数据持久化及my.cnf配置

一、docker 启动MySQL容器实现数据持久化 要在 CentOS 7 上使用 Docker 启动 MySQL 8.0.33&#xff0c;并配置 MySQL 的 my.cnf 文件&#xff0c;同时实现 MySQL 数据的持久化&#xff0c;可以按照以下步骤进行操作&#xff1a; 1、安装 Docker&#xff1a;确保你在 CentOS 7 …

【计算机网络八股】计算机网络(一)

目录 计算机网络的各层协议及作用&#xff1f;TCP和UDP的区别&#xff1f;UDP 和 TCP 对应的应用场景是什么&#xff1f;详细介绍一下 TCP 的三次握手机制&#xff1f;为什么需要三次握手&#xff0c;而不是两次&#xff1f;为什么要三次握手&#xff0c;而不是四次&#xff1f…