Skip to content

搞英语 → 看世界

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

Menu
  • 首页
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
  • Product Hunt
  • Visual Capitalist
  • Elon Musk
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

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Bob Nystrom (1)
  • Joel on Software (1)
  • John Resig (1)
  • Laurence Gellert's Blog (1)
  • Matt Might's blog (3)
  • News Letter (168)
  • Philip Walton (1)
  • Pivotal (1)
  • Scott Hanselman's Blog (2)
  • Tom's blog (1)
  • 英文媒体 (33,370)
    • Ars Technica (2,179)
    • Daily Infographic (254)
    • Engadget (5,284)
    • Enonomist (77)
    • FlowingData (230)
    • Hacker News (773)
    • Hacker News Daily (285)
    • Hacker Noon (125)
    • Harvard Health (141)
    • KK – Cool Tools (187)
    • KK – Recomendo (233)
    • Make Use Of (158)
    • NASA Astronomy Picture (241)
    • Product Hunt (6,707)
    • Psyche (207)
    • Quanta Magazine (173)
    • Science current issue (460)
    • Sidebar (938)
    • Singularity HUB (256)
    • TechCrunch (8,294)
    • The Practical Developer (99)
    • The Verge (5,728)
    • Visual Capitalist (341)
  • 英文推特 (15,994)
    • Bill Gates (306)
    • Brett Winton (1,161)
    • Cathie Wood (277)
    • Durov's Channel (25)
    • Elon Musk (4,675)
    • GeekWire (2,694)
    • Hunter Walk (48)
    • Mark Gurman (973)
    • Naval (660)
    • Parag Agrawal (52)
    • Ray Dalio (937)
    • Riccardo Mori (15)
    • Steph Smith (1,990)
    • Tim Cook (160)
    • Vitalik Buterin (2,021)
  • 英文独立博客 (3,453)
    • A learning a day (300)
    • A Smart Bear (2)
    • AddyOsmani.com (10)
    • Adwyat Krishna (29)
    • Ahmad Shadeed (2)
    • Alex Turek (1)
    • All Poetry (1)
    • All That is Solid (49)
    • André Staltz (2)
    • arxivblog (34)
    • Astral Codex Ten (15)
    • Atoms vs Bits (24)
    • AVC (35)
    • Basic Apple Guy (38)
    • Ben Thompson (13)
    • Benedict Evans (7)
    • Blog – storytelling with data (36)
    • Built For Mars (10)
    • Caleb Porzio (1)
    • Cameron Sun (1)
    • Christian Heilmann (34)
    • Christopher C (3)
    • Chun Tian (binghe) (1)
    • Codrops (13)
    • Cold Takes (14)
    • Dan Luu (1)
    • Daniel Lemire's blog (44)
    • David Amos (19)
    • David Perell (6)
    • David Walsh Blog (34)
    • Derek Sivers (25)
    • Desvl (13)
    • Devon's Site (5)
    • Digital Inspiration (26)
    • DKB Blog (4)
    • Douglas Vaghetti (12)
    • dropsafe (53)
    • DSHR (36)
    • Dunk (5)
    • DYNOMIGHT (36)
    • eagereyes (5)
    • Endless Metrics (135)
    • Entitled Opinions (8)
    • Exception Not Found (5)
    • Experimental History (18)
    • Farnam Street (5)
    • Fed Guy (10)
    • Felix Krause (3)
    • Florent Crivello (2)
    • Free Mind (6)
    • Full Stack Economics (40)
    • Funny JS (2)
    • Future A16Z (47)
    • Glassnode Insights (50)
    • Human Who Codes (3)
    • Infographics – Cool Infographics (10)
    • Information is Beautiful (11)
    • Irrational Exuberance (37)
    • Jacob Kaplan-Moss (13)
    • Jakob Greenfeld (40)
    • James Sinclair (3)
    • Jason Fried (17)
    • Jeff Kaufman (163)
    • John's internet house (16)
    • Johnny Rodgers (4)
    • Julia Evans (19)
    • Julian.com (2)
    • Kalzumeus (1)
    • Kevin Cox (10)
    • Kevin Norman (3)
    • KK – The Technium (50)
    • Krishna (6)
    • Lee Robinson (5)
    • Lines and Colors (43)
    • Lyn Alden – Investment Strategy (3)
    • Martin Fowler (24)
    • More To That (11)
    • Morgan Housel (69)
    • My Super Secret Diary (28)
    • Naval Blog (2)
    • Neckar's New Money (71)
    • Nick Whitaker (4)
    • Nicky's New Shtuff (1)
    • nutcroft (8)
    • Paul Graham (2)
    • Paul Graham: Essays (2)
    • Penguin Random House (52)
    • Phoenix's island (1)
    • Prof Galloway (32)
    • Python Weekly (26)
    • Rachel (32)
    • Real Life (34)
    • Sasha (52)
    • Science & technology (115)
    • Sébastien Dubois (6)
    • Secretum Secretorum (11)
    • Seth's Blog (121)
    • Shu Ding (3)
    • SignalFire (8)
    • Simon Willison's Weblog (127)
    • Simons Foundation (78)
    • SLIME MOLD TIME MOLD (20)
    • Slyar Home (8)
    • Spencer Greenberg (10)
    • Stay SaaSy (9)
    • Stephen Malina (4)
    • Stephen Wolfram Writings (2)
    • Strange Loop Canon (20)
    • Stratechery (9)
    • Tech Notes (10)
    • The Commonplace (29)
    • The Generalist (2)
    • The Intrinsic Perspective (28)
    • The Latest in Hearing Health | HeardThat (8)
    • The Mad Ned Memo (2)
    • The Rabbit Hole (31)
    • TLDR Newsletter (81)
    • Tomasz Tunguz (87)
    • Tony Kulesa (2)
    • Troy Hunt (51)
    • Tychlog (1)
    • Uncharted Territories (50)
    • Visualising Data (9)
    • Weichen Liu (20)
    • What's New (52)
    • Works in Progress (1)
    • Workspaces (32)
    • Writing (7)
    • Xe's Blog (30)
    • xkcd.com (107)
    • Yihui Xie (11)
    • Zoran Jambor (11)
©2023 搞英语 → 看世界 | Design: Newspaperly WordPress Theme