Skip to content

搞英语 → 看世界

翻译英文优质信息和名人推特

Menu
  • 首页
  • 作者列表
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
Menu

JavaScript 开发人员从 0% 到 80% 的 Rust

Posted on 2022-05-10

\ 本文列出了几个主题,如果您是 JavaScript 开发人员,这些主题将帮助您快速了解Rust 。许多教程从头开始。但是,如果您已经知道其他东西,为什么不比较它们呢?

\ 这些是我希望在开始 Rust 之前可以参考的差异,保持简短。

\免责声明!

我远非精通 Rust。这些就是我对它们的解释,仅此而已。 Rust 有相当多的文档,所以如果你正在寻找详细信息,请用谷歌搜索它们。这本书是学习 rust 的一个很好的起点。我的目标是列出重要的事情,以便您(以及将来的我)可以跳过常见的编程概念,并根据您已经知道的知识专注于差异。

类型

Rust 是一种类型化语言,因此它更接近于 TypeScript。如果您已经了解 TS,您将获得更好的体验。

\ 在大多数情况下,这两种语法都是相似的( variable_name: Type )好极了!

蛇案例

是的,没有绕过它。

这个符号是什么?

1. 问号( ? )

你可能会看到?在这样的函数调用之后: my_function()?; .

不,这不是可选链接。对于可能失败的函数(易错函数),这是一种错误处理魔法。在处理异步函数时,您通常会看到这一点。稍后再详细介绍。

文档

2.功能上的感叹号( ! )

示例: println!("{:?}", my_variable);

这表明它是一个宏。 JS 没有类似的东西。宏是一种编写其他代码的代码的方式。您可以将其视为自定义语法糖。如果函数示例显示它,只需使用它。

3. &符号

示例: &your_variable

获得参考。如果您使用 C 等低级语言,您就会知道这一点。稍后会详细介绍。

句法

  1. 每行末尾的分号 ( ; ) 是强制性的
  2. 例外:分号 ( ; ) 在函数的最后一行不是强制性的。在这种情况下,它是返回该 line 的快捷方式。
  3. 函数语法略有不同。没有大碍。
 fn foo(num: i32) -> i32 { 3 // See no.2 // or // return 3; }

\

  1. 装饰器语法也不同。它也称为属性。

这些关键词是什么?

结构

它是一个 JSON 对象。 (好的,它更复杂,但请参阅文档)

 type Person = { firstName: string; lastName: string; }; struct Person { first_name: String, last_name: String, }

特征

一个界面

暗示

一个 trait 的实现。我们最接近的就是类。它是trait和类型之间的联系。我没用过

枚举

在某种程度上与 Typescript 枚举非常相似。但是您可以在其中存储数据。对于异步来说,这是一个非常简洁且非常重要的概念。

控制台日志

不幸的是,这并不容易。它更类似于其他语言的printf

println!("{:?}", my_variable);

库/依赖项

使用Cargo.toml而不是package.json 。您需要手动添加它们(而不是使用类似yarn add的命令)

文档

例子:

 [dependencies] chrono = "0.4" egg-mode = "0.16.0"

输入

Rust 有模块。它与 JS 完全不同,但基本上:

它们有点像命名空间。

\ 以下是导入依赖项的详细说明:

use rocket::serde::{json::Json, Deserialize, Serialize};

use – 使用它而不是import

rocket – 这是包名

:: – 访问模块

serde – 模块名称

{json::Json, Deserialize, Serialize} – 实际导入的东西

\ 更多语法:

use chrono::prelude::*;

use rusqlite::Result;

从本地文件导入

最佳解释: https ://doc.rust-lang.org/rust-by-example/mod/split.html

\ 对要导入的路径/文件使用mod以使编译器包含该模块。

\ 然后use导入它。注意: mod也会自动导入它。在这种情况下,您需要为其添加前缀crate 。

\ 例子:

 use crate::your_file_or_module;

注意: mod.rs是一个特殊的文件名,其作用类似于index.js

\ 有关示例,请参见上面的链接。

常量与让

在 JavaScript 中,您大部分时间都会使用const ,因为它是不可变的。

\ 在 Rust 中,你会想用let代替。默认情况下这是不可变的。如果您希望它是可变的,请使用mut关键字。 const保留用于实际常量(因此您无法从另一个变量计算值)

 let immutable_variable = ...; let mut mutable_variable = ...; const MY_CONSTANT = "CONSTANT";

图书馆文档

如果 Github repo 没有链接到文档页面,你可以这样访问它:

异步

到目前为止,最令人困惑的 2 个主题是期货和所有权。我建议阅读更全面的文档。我们先来谈谈期货。

\ Future就像一个Promise 。与 JS 不同,Rust 有一个类型为 promise/future 的结果,称为Result 。它还接受泛型上的错误类型(我希望 JS 有这个)。您也可以在没有future的情况下单独使用Result 。

执行(或“消费”)Future

标准库非常简单,因此您需要导入其他内容(Think bluebird for JS)。你需要一个 executor 来运行一个future 。我建议使用https://github.com/tokio-rs/tokio并阅读他们的文档。

.await等待一个函数

async_function().await;有趣的语法,是吗?实际上相当不错,因为您不必像在 JS 中那样用括号括起来。

处理结果

这是另一个重要的。 Rust 是安全的,所以你需要处理所有事情。是的,与 JS 不同的所有错误情况!

\ Result枚举有Ok和Err 。如果 future 成功,则返回Ok ,否则返回Err 。

\ 处理这两种情况最全面的方法:

 let f = File::open("hello.txt"); let mut f = match f { Ok(file) => file, Err(e) => return Err(e), };

上面使用的模式匹配语法也很棒。

\ 这很冗长,所以有两种常用的方法来缩短它:

\

  1. 使用.unwrap()

示例: let my_value = async_function().await.unwrap();

如果 Err,这将获取成功值并恐慌

仅当您确信它不会出错或在测试环境中时才使用它。

\

  1. 使用?句法

这会将错误向上传递。因此,您的函数也需要能够返回错误( Result或Option )

参见这个例子和它的等价物

所有权和参考资料

听说过借阅检查器吗?我在这里没什么好说的。这是此列表中最难的事情,因为它是生锈所独有的。如果您以前从未处理过引用,那么这个主题可能有点陡峭。

\ 谢天谢地,生锈的书再次拯救了一天

基本上:阅读第 4.1、4.2 和 4.3 部分

就是这样!

这个列表实际上比我预期的要短。我希望它对你的旅程有用。

看到错误或有什么建议?让我知道!


就像你在这里看到的那样?查找更多我的帖子或查看我的启动。


也在这里发布

原文: https://hackernoon.com/rust-from-0-to-80percent-for-javascript-developers?source=rss

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abhinav
  • Abigail Pain
  • Adam Fortuna
  • Alberto Gallego
  • Alex Wlchan
  • Answer.AI
  • Arne Bahlo
  • Ben Carlson
  • Ben Kuhn
  • Bert Hubert
  • Bits about Money
  • Brian Krebs
  • ByteByteGo
  • Chip Huyen
  • Chips and Cheese
  • Christopher Butler
  • Colin Percival
  • Cool Infographics
  • Dan Sinker
  • David Walsh
  • Dmitry Dolzhenko
  • Dustin Curtis
  • Elad Gil
  • Ellie Huxtable
  • Ethan Marcotte
  • Exponential View
  • FAIL Blog
  • Founder Weekly
  • Geoffrey Huntley
  • Geoffrey Litt
  • Greg Mankiw
  • Henrique Dias
  • Hypercritical
  • IEEE Spectrum
  • Investment Talk
  • Jaz
  • Jeff Geerling
  • Jonas Hietala
  • Josh Comeau
  • Lenny Rachitsky
  • Liz Danzico
  • Lou Plummer
  • Luke Wroblewski
  • Matt Baer
  • Matt Stoller
  • Matthias Endler
  • Mert Bulan
  • Mostly metrics
  • News Letter
  • NextDraft
  • Non_Interactive
  • Not Boring
  • One Useful Thing
  • Phil Eaton
  • Product Market Fit
  • Readwise
  • ReedyBear
  • Robert Heaton
  • Rohit Patel
  • Ruben Schade
  • Sage Economics
  • Sam Altman
  • Sam Rose
  • selfh.st
  • Shtetl-Optimized
  • Simon schreibt
  • Slashdot
  • Small Good Things
  • Taylor Troesh
  • Telegram Blog
  • The Macro Compass
  • The Pomp Letter
  • thesephist
  • Thinking Deep & Wide
  • Tim Kellogg
  • Understanding AI
  • 英文媒体
  • 英文推特
  • 英文独立博客
©2025 搞英语 → 看世界 | Design: Newspaperly WordPress Theme