RUST - 技术教程文章

【Rust日报】 2019-08-01:brpc-rs - X-lab 实验室新推出的一个rpc库

paperclip - OpenAPI 规范的 Rust 实现在完成后,它会实现:Rust 中的服务器端、客户端和命令行端的高效的、编译时检查的、类型安全的 HTTP API 的生成;支持处理、验证和托管 OpenAPI 规范;自定义规范和代码生成。很有意思!Repo: https://github.com/wafflespeanut/paperclipRust in Blockchain 七月总结这个网页把在区块链领域中使用Rust的项目的最新进展做了一下汇总。感兴趣的可以看看。https://rustinblockchain.org/2019/0...

【Rust日报】 2019-07-31:Debian Buster 将会预装Rust编译器

SO问答」既然两个可变引用不能别名为啥Rust编译器没有对其进行优化#Rust #stackoverflow该问题的作者描述,比如C代码中:void adds(int ?*a, int *b) { ? ?*a += *b; ? ?*a += *b;}两个指针a和b有可能互为别名(俩指针指向同一数据),所以clang在编译该代码的时候,会在寄存器中存储两次(%rsi),%eax来防止这种情况。当然也可以使用restrict关键字来对参数进行约束,显式地告诉编译器这俩指针不可能互为别名(但在C语言中,restric...

【Rust日报】 2019-07-28:Rust Unsafe:把它们看作公理和定理

关于 Web 前端开发框架 Seed 的一些资料Seed(https://seed-rs.org/) 也是一个前端 Web 开发框架。这是用 Seed 写的一个前端网站(https://seed-rs-realworld.netlify.com/),这里是一些相关的资源(https://github.com/MartinKavik/awesome-seed-rs)。Repo已经用上 wasm 技术的一些网站这里列举一些,不完整,会不断增加https://apps.karthikkaranth.me/spherro/https://lukaslueg.github.io/macro_railroad_wasm_demo/https://s...

【Rust日报】 2020-01-10 track_caller 錯誤處理大突破

更新我們的Rust Boilerplate server 使用 GraphQL (Async and Actix-web 2)做了以下的更新use async/awaituse actix-web version 2use anyhow + thiserror in place of failurestructoptRead moresntpc Rust SNTP 客戶端可以從 NTP servers 拿 timestampRead more有人成功的驗證了rust可以跟unreal遊戲引擎整合Read moreRust基礎建設目標1:明確Rust作為獨立項目的地位有些公司想要商業投資Rust但因為 Mozilla 持有這個項目而卻步。...

【Rust每周一库】 plotlib - 简单的数据可视化库

本期每周一库带来的是一个简单的数据可视化的库 - plotlib从库的名字不难看出,言简意赅,一定程度上借鉴了python下的matplotlib的命名。省略中间环节,直接附上库的一些链接:plotlib github仓库plotlib 网站plotlib 文档plotlib cartes.io页面plotlib是一个Rust下用于绘制通用数据的可视化的库,从库的github的介绍来看,plotlib还是处于早期。现阶段plotlib可以实现以下功能:histogramsscatter plotsline graphs from data or ...

【Rust日报】2020-01-13 用rust编写的最小系统兼容服务管理器 : rustysd 更

用rust编写的最小系统兼容服务管理器 : rustysd 更新Rustysd是一个服务管理器,复制系统行为一部分配置。它着重于服务管理器的核心功能。因此,rustysd提供的功能数量很少。如果使用musl和striped构建二进制文件,则二进制文件可能会很小,但通常rust会生成相对较大的二进制文件。这意味着只要服务知知悉rustysd可以读取systemd单元文件(的一部分)并像运行systemd一样运行它们。由于rustysd不需要是PID1,因此它可以为不使用syst...

【Rust日报】 2020-01-12 Rust编译出的可执行文件体积优化方法

为什么Rust编译出的可执行文件那么大?#rust #exe为什么相同应用用Rust编译出的可执行文件比C编译出的要大?下面这篇文章详细阐述了原因,并提出了多重可行的方案,帮你减小可执行文件的体积,这几种方法是:使用--release模式进行编译在发布之前,开启LTO压缩二进制文件体积如果你的应用不是内存密集型,使用系统分配器(需要nightly)你可以开启编译优化等级s/z还有一点建议对小的可执行文件效果不明显,但是你可以尝试UPX和其他可...

httpd使用Rust重写mod_ssl模块【图】

喜欢就关注我们吧! 根据 ZDNet 的报道,谷歌资助了用 Rust 重写 Apache HTTP 服务器 ("httpd") 关键组件的项目。此项目由互联网安全研究小组(Internet Security Research Group, 简称 ISRG)牵头,谷歌提供资金支持。 被重写的关键组件是 mod_ssl 模块,用于在 Apache 服务器上建立 HTTPS 连接时进行加密,此模块依赖于 OpenSSL 提供加密引擎,OpenSSL 是 C 语言开发的加密库。ISRG 表示,他们的计划是开发名为 mod_tls 的新模块...

【Rust日报】2020-08-01 用 Rust 重写的一系列命令行工具

Rust 调试器库 Headcrab 7月进度报告Headcrab 项目的目标是为 Rust 提供一个新的模块化且可组合的调试器库。从 Delve 和 MDB 等项目中汲取了灵感,大约3周前开始的一个新项目,在不到4周的时间里,已经看到了令人激动的进步!详情可看项目的7月份进度报告,链接,https://headcrab-rs.github.io/2020/07/31/july-update.html用 Rust 重写的一系列命令行工具Shell 是每个程序员的必备工具,对其越熟悉效率就越高。一些用 Rust 实现的...

【Rust日报】2020-07-31 Rust 1.45.1发布

Rust 1.45.1发布上次1.45稳定版发布后没多久有人在github爆出了一个似乎动摇到Rust根基的bug(可变借用失效),后来发现主要原因是之前一个重构和整理const propagator的PR引入的问题(具体见Rust Stable 1.45 中的 神奇 Bug 解读),官方博客提到在发布release版之前进行的crater测试(crater测试会用即将发布的版本把crates.io所有的crate全部跑一遍,预计花费4到7天的时间)都没有检测到这个bug,说明在正常状态下几乎不太会触发...

【Rust日报】2020-08-24 理解 Rust 的切片

理解 Rust 的切片在迁移一些 C/C++ 代码到 Rust 过程中, 你是否也对切片的所有权如何从?Rust?中传递给?C?感到困惑 ? 亦或是对切片的内存布局感到困惑, 从而担心是否会造成内存泄露 ?作者开始有同样的不解, 在深入了解以后,写下该篇文章帮助有同样疑惑的人.https://codecrash.me/understanding-rust-slices裸金属上使用 Rust 泛型 1/2作者通过自己的验证, 证实 Rust 在嵌入式领域中完全可以开发工业级标准的软件. 通过一个真实的例子...

【投稿】刀哥:Rust学习笔记 4

@[TOC](Rust 学习心得<4>:async/await 如何工作)2019年底Rust正式支持 async/await语法,完成了Rust协程的最后一块拼图,从而异步代码可以用一种类似于Go的简洁方式来书写。然而对于程序员来讲,还是很有必要理解async/await的实现原理。async简单地说,async语法生成一个实现 Future 对象。如下async函数:async fn foo() -> { ...}async关键字,将函数的原型修改为返回一个Future trait object。然后将执行的结果包装在一个新...

【Rust日报】2020-08-22 google/autocxx - 高度自动化的rust调用c+

google/autocxx - 高度自动化的rust调用c++,而且安全,时尚这个项目是一个从Rust中调用c++的工具,以一种高度自动化但安全的方式。这样做的目的是,在使用bindgen的一个变体从现有的c++头文件自动生成接口的同时,也具有来自cxx的所有流畅安全性。可以把autocxx看作是将bindgen插入cxx的胶水。它的目的是最终公开一个过程宏,如下所示:class Bob {public: Bob(std::string name); ... void do_a_thing();}use autocxx::i...

【Rust日报】2020-08-21 RustConf研讨会在线举办

Oxigraph - 实现了SPARQL标准的图数据库Oxigraph is a graph database implementing the SPARQL standard.Official website: https://github.com/oxigraph/oxigraphOxigraph是一个实现了SPARQL标准的图数据库。宗旨是为了实现一个基于RockDB和Sled的K/V仓库的兼容的,安全的,快速的图数据库。由Rust语言实现,Oxigraph同时也提供很多读,写和处理RDF文件的工具功能。Oxigraph目前正在重度活跃的开发中,很多SPARQL的查询评估还没有...

【Rust日报】2020-08-18 官宣未来成立 rust 基金会

Rust核心团队宣布未来要成立 Rust 基金会Mozilla和核心特队表示,要在年底之前开始基金会的第一次迭代Mozilla and the Rust Core Team are happy to announce plans to create a Rust foundation. Our goal is to have the first iteration of the foundation up and running by the end of the year.太长不看版(by Rust众群友@Ethan)Rust在各个领域各个公司有了很多应用 moz的裁员带来了很多影响 0. 关于雇员。由于全世界的关注...

【投稿】刀哥:Rust学习笔记 3

Rust作为一门新兴语言,主打系统编程。提供了多种编写代码的模式。2019年底正式推出了 async/await语法,标志着Rust也进入了协程时代。下面让我们来看一看。Rust协程和Go协程究竟有什么不同。有栈协程 vs. 无栈协程协程的需求来自于C10K问题,这里不做更多探讨。早期解决此类问题的办法是依赖于操作系统提供的I/O复用操作,也就是epoll/IOCP 多路复用加线程池技术来实现的。本质上这类程序会维护一个复杂的状态机,采用异步的方式编...

【每周一库】- JWT的Rust实现

sonwebtokenRust实现的JSON Web Token库,用于安全身份验证。安装将以下内容加入 Cargo.toml:jsonwebtoken = "7"serde = {version = "1.0", features = ["derive"] }需要Rust 1.39及以上版本算法这个库目前支持以下算法:HS256HS384HS512RS256RS384RS512PS256PS384PS512ES256ES384如何使用引用与结构型:use serde::{Serialize, Deserialize};use jsonwebtoken::{encode, decode, Header, Algorithm, Validation, EncodingKey, Decod...

【投稿】刀哥:Rust学习笔记 2

@[TOC](Rust 学习心得<2>:多线程)现代的CPU基本都是多核结构,为了充分利用多核的能力,多线程都是绕不开的话题。无论是同步或是异步编程,与多线程相关的问题一直都是困难并且容易出错的,本质上是因为多线程程序的复杂性,特别是竞争条件的错误,使得错误发生具备一定的随机性,而随着程序的规模越来越大,解决问题的难度也随之越来越高。其他语言的做法C/C++将同步互斥,以及线程通信的问题全部交给了程序员。关键的共享资源...

【Rust日报】2020-08-13 关于群集(Bevy)引擎ECS框架中system的语法糖是怎么

Learn Wgpu 系列简化了之前Instancing的教程作者表示之前的Instancing部分写的太过繁杂,作者喜欢展示各种不同的技术导致之前该章节与之前的章节相比显得脱节,这次更新简化了该教程。教程地址:https://sotrh.github.io/learn-wgpu/beginner/tutorial7-instancing/#instancing关于群集(Bevy)引擎ECS框架中system的语法糖是怎么实现的群集(Bevy)引擎中的system就是普通的Rust函数,这样的设计及其符合人体工程学,就像作者本人...

【Rust日报】2020-08-10:在 Rust 中存储连续数据

在 Rust 中存储连续数据?作者都帮你整理好了:使用 Rust 中的数组 [T; N].Slice &[T] or &mut [T], 可以方便的 split.Boxed slice Box<[T]>.Vec. 长度和内容都可以变化,这可能是我们最常用的方式.smallvec, 第三方 crate, 当元素较少时可以存储在 stack 上.arrayvec, 第三方 crate, 如名字所述, 底层是用 Array 来存储的,因此长度不能动态增长. 但是数据可以存储在 data segment, stack 或 heap上.tinyvec, 第三方 crete, 可以100%替...

【每周一库】 rust-ftp - an FTP client written in Rust【图】

本期的每周一库带来的是Rust下的ftp client库:rust-ftp相关链接rust-ftp docs: https://docs.rs/ftp/3.0.1/ftp/rust-ftp github: https://github.com/mattnenterprise/rust-ftprust-ftp的文档页面给出了使用的用例,从代码来看非常简单,下面我们通过实际使用来体验rust-ftp库。开发环境Windows 10rustc --version: rustc 1.46.0-nightly (6bb3dbfc6 2020-06-22)cargo --version: cargo 1.46.0-nightly (089cbb80b 2020-06-15)rus...

【翻译】200行代码讲透RUST FUTURES (7)【图】

本期的每周一库带来的是Rust下的ftp client库:rust-ftp相关链接rust-ftp docs: https://docs.rs/ftp/3.0.1/ftp/rust-ftp github: https://github.com/mattnenterprise/rust-ftprust-ftp的文档页面给出了使用的用例,从代码来看非常简单,下面我们通过实际使用来体验rust-ftp库。开发环境Windows 10rustc --version: rustc 1.46.0-nightly (6bb3dbfc6 2020-06-22)cargo --version: cargo 1.46.0-nightly (089cbb80b 2020-06-15)rus...

【Rust日报】2020-09-21 Rust宣布成立错误处理项目组

Rust宣布成立错误处理项目组Rust 官方宣布成立错误处理组, 隶属于 libs team.该组的主要目标为:定义和编纂常见的错误处理术语.就当前错误处理最佳实践达成共识.识别 Rust 错误处理中存在的痛点.交流当前错误处理最佳实践.巩固Rust错误处理生态系统.https://blog.rust-lang.org/inside-rust/2020/09/18/error-handling-wg-announcement.htmlBevy 0.2 版本发布Bevy 0.2 正式发布了. 值得注意的特性包括:Async Task System.在此之前, ...

【Rust日报】2020-09-19 Rust 2021: 降低门槛

宣布成立错误处理项目组今天我们宣布在libs团队下成立了一个新的项目小组,专注于错误处理!本项目小组将致力于的一些目标包括:定义和编纂常见的错误处理术语。就当前错误处理的最佳实践达成共识识别存在于Rust错误处理故事中的痛点。交流当前错误处理的最佳实践。巩固Rust错误处理生态系统。文章链接,https://blog.rust-lang.org/inside-rust/2020/09/18/error-handling-wg-announcement.htmlRust 2021: 降低门槛Stack Overflow的...

【大家的项目】Rust Base62 库学习和分析

使用 Rust 实现 x86 bootloaderKRaBs 是一个内核阅读器和引导器,目前 KRaBs 正在致力于在 32位/64 位 pc 上引导 vmlinux 和其他用 ELF 格式化的内核,目前还在开发中。Krabs 还旨在只支持最小的 Linux x86/x86_64 引导协议。这允许您使用内核命令行和 initrd/initramfs。项目地址:https://github.com/o8vm/krabs/使用 Rust + Wasm 探索系统编程作者在 Rust playground(https://play.rust-lang.org/) 新建了一个新课程,它就是“k...

2020-11-19 Rust1.48稳定版发布!

Rust1.48稳定版发布!Rust 1.48.0 版本在11月19日发布了。pending和ready两个future稳定了新版本rustdoc可以直接使用内部文件链接语法了 E.g. /// Uses [std::future]将自动生成一个链接到std::future的文档。从这里可以了解相关更多信息Read More: https://blog.rust-lang.org/2020/11/19/Rust-1.48.htmlGithub: (https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-1480-2020-11-19)轻松编写rust事件这是之前日...

【Rust日报】2020-11-16 Rust 实现 Custom Events【图】

Rust 实现 Custom Events本文设计了一个比较巧妙的 Events 模式, 不由地让人想起 Qt的 signal.下面是核心代码以及使用例子. 具体更多细节可以参阅原文.trait Sig { type Data; type Receiver: Rec; fn emit(&self, data: Self::Data); fn conn(&mut self) -> Self::Receiver; fn disc(&mut self, i: usize);}trait Rec { type Data; fn on_emit(self, data: Self::Data); fn get_id(&self) -> usize;}macr...

【Rust日报】2020-11-13 - 使用内部非泛型函数来避免静态分发导致的编译速度下降和二进制

PossibleRust.comPossibleRust.com是上线不久的专注于分享Rust的个人博客网站,作者从2013年0.8版开始学习Rust,并声称到现在他也一直在学新的Rust的东西。比如最新的一篇博文Non-Generic Inner Functions讲到如何使用内部非泛型函数来避免静态分发导致的编译速度下降和二进制体积膨胀的问题,强烈推荐一看。(占个坑,有时间我翻译一下)链接:https://www.possiblerust.com/pattern/non-generic-inner-functionsAre out paramete...

【Rust日报】 2020-11-12 探索 Rust 编译器的 PGO【图】

探索 Rust 编译器的 PGO来自 Rust 官方 blog,在过去的几个月中,Mozilla 一直在使用 Profile-Guided Optimization(PGO)来构建自己的优化版本的Clang,从而使 Firefox 的构建基础结构的编译时间减少了9%。Rust 编译器是否可以做到这一点,就是说,我们可以将配置文件引导的优化应用于 rustc 本身以使其更快吗?这篇文章恰好探讨了这个问题,更多详情请看:https://blog.rust-lang.org/inside-rust/2020/11/11/exploring-pgo-for...

【Rust日报】2020-11-09 构建可测试性的 Rust 工程【图】

构建可测试性的 Rust 工程最近 reddit 上有不少人对 Rust 的工程如何进行组织, 以及如何才能进行更加完善的测试进行了一些讨论.下面的文章给出了一个 web 服务的例子, 演示了如何来组织 Rust 中的模块, 以及如何让代码更加具有测试性.原文链接: https://medium.com/better-programming/structuring-rust-project-for-testability-18207b5d0243antler: 一个无纹理的渲染引擎ANTLER是一个无纹理的渲染引擎.通过编写类似下面的格式的配...