< 返回版块

2019-06-30 16:46    责任编辑:jay

标签:rust,daily

Rust

cbs - 在命令行中管理剪贴板

可以在 Linux,macOS 和 Windows(暂不确定)上工作。如何使用:

  • copy text to clipboard: cbs -c "Text to be copied to clipboard"
  • paste copied text: cbs -p
  • copy from stdin: cat exmaple-file.txt | cbs

Repo

tracing: 程式級別的追踪程式執行

裡面對不同的crate做特化

tracing-fmt, tracing-futures, tracing-macros, tracing-proc-macros

tracing-log, tracing-env-logger, tracing-serde, tracing-subscriber

tracing-tower, tracing-tower-http

read more

segmentio/analytics-rust

Rust的分析客戶端

https://segment.com/

是一個分析網站,透過這個crate,你可以把你的程式資料上傳上去

進行進階的資料分析

read more

Rand 0.7

所有crate都更新為Rust 2018。

刪除了所有構建腳本,從而縮短了構建時間。

文檔已更新。

read more

臨時新聞: NLL 已經好了

作者說最近NLL已經完整了 rust 1.36 可以體驗到。

read more

tokio master分支正在切换到std::future

#tokio

parallel: Rust实现的类GNU Parallel的工具

GNU Parallel,它是一个shell工具,可以在一台或多台计算机上并行的执行计算任务,一个计算任务可以是一条shell命令或者一个以每一行做为输入的脚本程序。GNU Parallel会把输入分块,然后通过管道并行执行

parallel

aljabar: 基于 const generics 实现的n维线性代数库

#const #LinearAlgebra

不过目前是实验性的。

aljabar

paste.rs:命令行文件共享工具

#cli

pf

Rust正则表达式在线编辑工具

#regular

Read More

把Rust宏变成自己的日常小帮手

#macro

这是一篇介绍Rust声明宏的精简文章。

Read More

GStreamer Rust绑定 0.14 发布

#GStreamer

Read More

用Rust为https://kutt.it实现命令行工具

#cli

kutt-rs

cht: 无锁并发hash表

#lockfree #hashtable

cht

Kudzu:在并发跳表之上实现Map和Set

#concurrent #skiplist

该库是官方核心成员无船大佬新写的并发数据结构。这些可用于任何只有Map或Set扩展的并发算法,而不会丢失成员。

kudzu

nom 5.0 发布

#nom

nom 5.0是你从未见过的船新版本。抛弃了宏语法,拥抱了基于trait的组合子函数。但是据说向后兼容?

sniffglue - Rust 实现的网络嗅探器

这个库的特点是多线程,可以充分利用多核。可以放心地用在不安全网络中(可能是做了很完善的错误处理)。看看效果:

img

Repo

orion - 又是一个Rust密码学库

Rust密码学生态现在已经是第一完善的梯队了。这都是区块链带来的机遇吧?

Repo

Fnnls - Rust 实现的 FNNLSa算法库

这个算法是Matlab中用于处理矩阵的算法,论文在这里。Rust 实现版本基于 ndarray。

算法小编是不懂,但是我知道Rust实现的版本比Python实现的版本快多了:

Benchmarks for the same [600 x 1000] transformation matrix:

    Python scipy.optimize.nnls timeit: 35.23 ms per loop; n = 1000
    Python FNNLSa timeit: 5.30 ms per loop; n = 1000
    Rust fnnls criterion: 1.62 ms per loop; n = 5050


Repo

elba v0.3 上线了

cli 和 registry 后端都是 rust 构建的

这是国内社区Andy 实现的一个idris包管理器

read more

sniffglue v0.9.0

安全多線的封包嗅探器 支持ipv6

read more

soa-vec(Struct-of-arrays-vec)

使用soa vec來存資料可以更有效的擊中cpu cached 達到計算加速

read more

重磅:使用 Rust 进行 GPU 编程的库 Emu

使用这个库,用 Rust 对 GPU 编程就非常方便了,这个库提供了一些宏,使得 GPU 编程也能充分利用 Rust 的生态。看下代码长啥样:

// The "emu!" macro accepts a chunk of Emu code and
// generates Rust functions that can be called to perform computation on the GPU
emu! {

    // Multiply any element in given data by given coefficient
    // Data and coefficient must be floats
    function multiply(data [f32], coeff f32) {
        data[..] *= coeff;
    }
    
    // Apply sigmoid function to any element in given data
    // Data must be floats
    function sig(data [f32]) {
        let elem: f32 = data[..];
        let res: f32 = 1 / (1 + pow(E, -elem));
        data[..] = res;
    }
    
    /// Multiplies each element in given data by given coefficient
    pub fn multiply(data: &mut Vec<f32>, coeff: &f32);
    /// Applies sigmoid to each element in given data
    pub fn sig(data: &mut Vec<f32>);
    
}


Read More

Rust 的 docs 页面要瘦身了

Iterator 页面据说会从 14.4MB 缩减到 724kB :D

Read More

Debian GNU/Linux 将要在2019年中完成riscv64的迁移工作

#riscv64 #debian

完成迁移后,除了Rust的500多个crate之外,还有其他软件包在某种程度上直接依赖或使用LLVM,但目前这并不完全适用于riscv64,所以,在后续他们也会提供LLVM for riscv64的支持,预计在2019年期间完成。

Read More

Hagrid: 基于Sequoia的新验证密钥服务器

#opengpg

Keys.openpgp.org正在运行一个新的验证密钥服务器,该服务器使用Rust编写,基于Sequoia。本文介绍了此服务器。

Read More

rcgen 0.4发布

#X509

用于生成X.509证书的库

rcgen

Radeco: 一个基于radare2的二进制分析框架

#decompiler

radare2是一个开源的逆向工程和二进制分析框架,包括反汇编、分析数据、打补丁、比较数据、搜索、替换、虚拟化等等,同时具备超强的脚本加载能力,它可以运行在几乎所有主流的平台。

Radeco

array-helpers-rs: 利用const-generic特性的方便数组操作的库

#const_generic

此包提供用于初始化,使用和转换数组的实用方法。 所有方法都是长度通用的。此库使用了最新的const_generics功能。

array-helpers-rs

traitcast: 支持从Any转为trait对象的库

#any #traitObject

traitcast

stale-rs - 用于找出项目工程中,没有被链接的rs文件

对于这些文件,就可以放心删除。这在重构的时候很有用。来看一下效果图:

img

Repo

rga: 对ripgrep搜索功能的扩展库

#ripgrep

rga包装了ripgrep并使其能够搜索pdf,docx,sqlite,jpg,zip,tar。*,电影字幕(mkv,mp4)等。性能很好。

tx-rs - 一个提供 wrtie ahead 的原子交易库

刚出来,仅供了解,这里的“交易”是指业务的原子性,常见于数据库中。与区块链或密码学中的交易,是不同的概念。类似于 STM

Repo

duang - 使用宏来提供默认参数和命名参数

一看就是国人的项目。命名有点玩耍的味道,但是思路和设计可以借鉴。

use duang::duang;

duang!(
pub fn foo<T>(a: T, b: f64 = 13.0, c: T = a * a) -> (T, f64, T)
where
  T: std::ops::Mul<T, Output = T>,
  T: std::fmt::Display,
  T: Copy,
{
  (a, b, c)
}
);

// ----

use demo_duang::foo;
// pass
assert_eq!(foo!(1, c = 30, b = -2.0), (1, -2.0, 30));
// pass
assert_eq!(foo!(a = 10), (10, 13.0, 100));
// fail
// foo!(1,c=30,c=2);



Repo

dua-cli - 用于查看当前目录下的磁盘容量使用情况

这个工具发布 v2.0 了。就是 du 的升级版。先看下效果图。

img

Repo

vrf-rs: 可验证随机函数(VRF) Rust库

#blockchain

是一个快速和可扩展的可验证随机函数(VRF)库,目前支持一些最广泛使用的椭圆密码套件。

Read More

VST crate现在已成为RustAudio的一部分

#VST #RustAudio

GitHub组织Rust DSP最近与RustAudio合并。所以之前Rust DSP的vst-rs项目现在已经迁移到RustAudio组织中。

flat-manager: 用于管理Flatpak存储的库

#Flatpak

该文主要介绍了flat-manager这个库,该库是Flatpak官方出品。

Flatpak(前世为xdg-app) 是一种用于构建,分发,安装和运行应用程序的技术。它主要针对的是Linux桌面,通过在沙箱中隔离应用程序来提高Linux桌面的安全性,允许应用程序安装在任何Linux发行版上。解决Linux软件安装时的依赖问题。

六边形架构中应用Rust的自定义派生(derive)宏

#HexagonalArchitecture

该文作者在看《Clean Architecture(整洁架构)》一书中提到的六边形架构的时候所作的一些思考。六边形架构,也叫洋葱架构或端口和适配器架构,这个架构的思想是:拥抱依赖倒置。这非常有利于架构的可扩展性。

作者的这篇文章也酝酿了很久,按他的话说,就是他发现Rust非常适合六边形架构,可以说是最佳选择。原因?

  1. Rust有一个很成熟的模块系统。
  2. Rust对数据和行为的分离的支持是语言级别的。
  3. Rust还允许你通过派生宏(derive)的方式来自动实现一些行为。

所以,作者进一步考察了使用派生宏在六边形架构的Rust代码中是否适合,结论是:

在当前状态下,在Rust代码库中最大限度地使用这样的架构会导致与Rust生态系统中的自定义派生的某些事情产生一些“摩擦”。但是看到Rust发展并在解决这些问题,他感到非常兴奋!

具体案例代码看看原文吧。

Read More

Cloaker:非常简单的基于密码的跨平台文件加密工具

#FileEncryption

核心是Rust实现,GUI是基于CFC/MFC和Qt实现。

img

cloaker

Rust隐藏的天赋:加速构建和版本管理

#tips

该文介绍了基于Global build cache来加速编译的一个小技巧,但也有三点重要的注意事项。另外的替代方案是使用Mozilla出品的sccache工具。

Read More

Rust rand 库发布 v0.5,有不兼容更新

同步还发布或升级了 rand_chacha, rand_distr, rand_pcg, rand_hc, rand_isaac, rand_xorshift, rand_xoshiro 等组件。

Read More

fibridge - 用于浏览器中点对点直接流式缓冲的项目

这是一个有趣的项目。我们想一想,如果我们想在两个浏览器中交换文件,按以前的方式,是不是要通过一个服务器中转(A传文件到服务器S,B再从S上下载)。对于比较大的文件,这种方式就会呈现很多缺点。fibridge是这样一个项目,它可以实现文件,以流的形式,通过服务器中转,实时传送到另一端(浏览器)。

其中的 fibridge-proxy-rs 由 Rust 实现。

Read More

相关项目(貌似都很有创意啊)

ossuary - tcp加密通道库

相当于一个简化版的tls。作者说,它只有一个用户,就是你有一个tcp连接,想加密,但是不想使用tls时 :D

Repo

函数内的 Attributes 标注已经被合并了

也就是说,最新的 nightly 可以像这样写了:

#![feature(param_attrs)]

fn len(
  #[cfg(windows)] slice: &[u16],
  #[cfg(not(windows))] slice: &[u8],
) -> usize
{
  slice.len()
}

Read More

Jen:根据模板生成虚假文档的命令行工具

#cli

jen

#lockfree

支持同时读写,与evmap库类似。

evc

minsql: 分布式SQL式日志搜索引擎

#sql

通过http接口交互请求,支持简单的SQL语法。

minsql

一些无锁和无等待数据结构的学习资源

文章:

https://preshing.com/20120612/an-introduction-to-lock-free-programming

https://preshing.com/20120625/memory-ordering-at-compile-time

https://preshing.com/20120710/memory-barriers-are-like-source-control-operations

https://preshing.com/20120913/acquire-and-release-semantics

https://preshing.com/20120930/weak-vs-strong-memory-models

https://preshing.com/20121019/this-is-why-they-call-it-a-weakly-ordered-cpu

视频

https://youtu.be/V3omVLzI0WE

https://youtu.be/bY8f4DSkQ6M

https://youtu.be/Fs4-E4Nj1Ks

https://youtu.be/CSqbjfCCLrU

https://youtu.be/C6EWVBNCxsc

leptess: Rust OCR库

#ocr

是leptonica 和 tesseract C库的Rust绑定

leptess

wordsolve:现代填字游戏的简单求解器

#game #puzzle

wordsolve

metrics-facade 发布 0.1

#metrics

metrics-facade提供了类似于log库的宏,这些宏方便开发者收集性能指标(递增计数器、度量表和直方图)来测量其代码。

metrics-facade

Contrie: 无锁并发映射和集合库

#concurrent #map #set #lockfree

新库,刚发布0.1。

Read More

Erst - ERB/JSP 那种 <% %> 的模板引擎

Rust 中的模板渲染引擎已经有不少了,这一个是支持 ERB/JSP 渲染语法的库。

Repo

globber - 扩展的通配模式匹配库

glob 模式是这样一些:

// Wildcards

let pattern = Pattern::new("*.rs").unwrap();
assert!(pattern.matches("hey.rs"));
assert!(!pattern.matches("hey.c"));
assert!(pattern.matches("/src/test.rs"));
assert!(!pattern.matches("/src/test.c"));

// Ranges

let pattern = Pattern::new("[a-z].rs").unwrap();
assert!(pattern.matches("a.rs"));
assert!(pattern.matches("d.rs"));
assert!(pattern.matches("z.rs"));
assert!(!pattern.matches("A.rs"));
assert!(!pattern.matches("Z.rs"));
assert!(!pattern.matches("0.rs"));


globber 是实现这些功能的一个 Rust 库,它提供了对字符串的匹配功能。目前还没有支持文件目录查找,正在进行中。

Repo

numeric_literals - 数字字面量库

这个对科学计算应该非常有用。它做如下工作:

extern crate num;
use num::Float;

fn golden_ratio<T: Float>() -> T {
    ( T::one() + T::sqrt(T::from(5).unwrap())) / T::from(2).unwrap()
}

这种写法,简化成这种:

use numeric_literals::replace_numeric_literals;

#[replace_numeric_literals(T::from(literal).unwrap())]
fn golden_ratio<T: Float>() -> T {
   (1 + T::sqrt(5)) / 2
}

Repo

IntelliJ Rust Changelog #99

改善了 await 語法相關的調整

Read more

RustSec 檢查您的依賴庫

可以檢查你的 TOML 檔裡面用到的庫,是否都安全

Read more

plotty-bird: Flappy Bird的rust重製版

使用 HP7440A plotter 印表機來玩

Read more

檢查你的註解文法

在rust裡面的

///  
//! 
#![doc = "text"]
#[doc = "text"]


將會被程式檢查語法是否正確

Read more

rustup.rs 線程IO測試人員想要的功能來了

現在安裝時,不再有 thread 限制,會使用更多內存與線程來解壓縮

Read more

Ferrous 系统公司提出要建立Rust更高级别的稳定发行版 Sealed Rust(密封 Rust)

这个版本的Rust(及其相关库生态)代码,特性要求更严格,专门用于安全敏感领域。比如,汽车电子、工业设备、机器人、医疗设备、航空电子等领域。这是系列文章,第一篇见下面。

Read More

OnceCell - 用于初始化全局变量的库

之前我们一直在用 lazy_static! 这个库和宏来初始化全局变量,现在不需要宏了。直接用 OnceCell 就可以,像下面这样:

use std::{env, io};
use once_cell::sync::OnceCell;

#[derive(Debug)]pub struct Logger {
    // ...
}
static INSTANCE: OnceCell<Logger> = OnceCell::new();

impl Logger {
    pub fn global() -> &'static Logger {
        INSTANCE.get().expect("logger is not initialized")
    }

    fn from_cli(args: env::Args) -> Result<Logger, std::io::Error> {
       // ...
#      Ok(Logger {})
    }
}

fn main() {
    let logger = Logger::from_cli(env::args()).unwrap();
    INSTANCE.set(logger).unwrap();
    // use `Logger::global()` from now on
}

全局变量这玩意儿,有时候还是有用的,方便,对于初始化一次并只读的情况,没有什么问题。

Repo

mft: 解析NTFS主文件的库

#NTFS

mft

dargo: 一个类似于cargo-edit的工具

#cargo #tool

由国内社区DCjanus实现,和cargo-edit相比,特色在于:dargo基于查本地crates index,基本是瞬间可以完成整个workspace的升级。而cargo-edit之类的工具则是通过HTTP请求(直接访问crates.io)去检查最新版本。

所以使用dargo的时候,需要更新本地index才能保证获得最新版本。而更新本地index则比http速度要快很多,也有国内镜像可用。比较适合国情。

dargo

Anevicon: 高性能UDP流量生成器

#udp

img

使用该库可以向服务器发送大量UDP数据包,从而模拟最终用户或一组黑客可能产生的活动。

anevicon

Bzip2 in Rust

rust 實作可以做壓縮,也可以當CRC32的庫

Read more

Pgen 命令列密碼生成器

Read more

fast-logger

盡可能快速的Rust logger

Read more



中文

Rust 官网简体中文翻译公开测试

继续公开测试,检查是否有错别字、或表意错误等问题,然后在Pontoon上面进行审校。

Rust 官网简体中文翻译已经完成了一个里程碑。

#official

首轮翻译和校对已经完毕,感谢参与者们的付出。现在公开给社区进行下一轮审校,感兴趣的朋友可以登录Pontoon,参与后续的贡献。

可以点开Pontoon网站,查看team info信息,加入组织。

官网中文版在线的测试地址

本次贡献者分工角色和工作流程记录:

img



FFI 多语言

RESS (Rusty EcmaScript Scanner) 0.7.0

比上一版快28倍,可以快速的掃描各種 js framework

read more

一个简单的Rust FFI插件接口

#ffi

本文作者在使用Rust和C做一些SoC设备上的开发,想对其室内的植物土壤中的水份湿度进行监测。该文描述了作者认为的Rust和C集成的最佳实践:Rust-C插件接口。该文作者的另一篇FFI文章也值得看看。

使用PyOxidizer构建独立的Python应用程序

#python #pyoxidzer

PyOxidizer(项目,文档)发布了第一个版本,这是一个旨在解决Python应用程序分发问题的开源实用程序!独立单个文件,无依赖性可执行Python应用程序。

Sonny Scroggin - BEAM + Rust 天作之合

#Erlang #BEAM

Scroggin是一位经验丰富的软件工程师,对计算机世界有着广泛的兴趣。他最著名的贡献是他的Phoniex框架和其他库对Elixir生态系统的支持。在这次Code BEAM STO 19大会上,他分享了Rust和BEAM的集成。

rusty-jsyc: Rust实现的JavaScript-To-Bytecode编译器

#compiler #javascript

rusty-jsyc

【翻译】在Rust中调用Java代码

#java

通过j4rs这个库可以实现在rust中调用java,这篇翻译文章是该库的作者所写,介绍了j4rs项目的初衷和现状。

Read More

fastuuid - 对 Rust 的UUID 的CPython封装。

给python用的。

Repo

haru

一個動態腳本語言直譯器,使用rust實作

Read more

LambdaCore

一個動態腳本語言直譯器,使用rust實作,而且很像Lisp

Read more



Rust Learning 教程

例子:使用 Rust Async/Await 和 Epoll 配合使用写一个简单的 http 服务器

这个例子写得非常清晰,详细,是作者为了学习 Rust 异步开发的一个尝试。强烈推荐学习。当然,它只能在 Linux 上运行(因为 epoll)。

另外,Reddit 上的大神们给了一些改进建议

Repo

basic-http-server - 另一个静态 http 服务器的示例教程

由 brson 大佬维护,代码中给了详尽的注释,是很好的学习教项目。其实平时测试时也是可以用的:

cargo install basic-http-server

Repo

Jonhoo 要在线开问答了

对,就是那个 MIT 博士生,之前在 youtube 上录过超长时间 Rust 教程讲异步的那位小青年。他真的很热心。开问答的时间是:

01:00
Sunday, June 30
China Standard Time

不过,好像我们这边在睡眠中。

Repo

下面这个帖子的跟帖很有价值。

Read More

const-alg & array-vec

N-D線性代數的一個安全的const泛型實現

這個庫非常像 aljabar

use const_alg::Matrix;

Matrix(
    [[0, 1, 2],
     [3, 4, 5]]
)

你可以簡單的創造出 2x3 矩陣

read more

Rhea 實體系統

一個人講了他做了一個 entity system

他需要資料跟行為綁在 entity 而且可以互相分享

並在實體內裡面有靜態的資料

大家可以看看怎麼做的

read more

Brave.com 使用 Rust 写的浏览器广告阻拦器比原来C++写的快了 69 倍

当然,有算法方面的改进。也正是 Rust 语言让项目组的人思考更清晰,找出更有效的算法。

Read More

通向 Rhea 粒子系统之路

这篇文章详细阐述了 Rhea 粒子系统(图形渲染领域)的实现方法,作者用 Rust 实现了一个与 Rust 语法很类似的脚本语言。

Read More

用 Rust 写操作系统,新更新

这次更新讲解了操作系统实现中的堆分配。对操作系统感兴趣的同学可以仔细学习一下。

Read More

Wavelet - 性能超高的公链

其中的智能合约SDK部分,使用 Rust 实现,也就是说,智能合约由 Rust 来写,编译成 WebAsssembly 部署。项目本身是用 go 实现的,据说是发明了一种新的共识协议。

Read More
Repo

RESS - JS 词法扫描器

比 Angular.js 的词法扫描器快 28 倍(229ms -> 11ms)

Read More
Repo

async/await MVP 稳定目标日期出来了

在 1.38.0 (beta cut 2019-08-15) MVP 稳定。文章在下面。

Read More

bstr 发布了 v0.2

bstr 是一个字符串库,与 std 字符串库的区别是,它不需要字符串内容是 utf8 的。其它完全一样。

Read More

meuse - 第一个私有仓库中心

作者自己搭的,可供自行搭建参考。

Repo

DigitalBridge: 为什么我们在云渲染中使用Rust?

#render

DigitalBridge公司利用光线追踪技术做家居环境的云渲染技术。他们为什么使用Rust呢?

最初的挑战是:

可行的云渲染需要大量使用低开销,高性能的语言。 自成立以来,构建和维护此服务一直很困难,我们的初始生产版本包括:

  • 复杂的CUDA层;
  • 成千上万的C++代码来准备和运行渲染;
  • C库上的C++包装器;
  • C封装在C++库上;
  • Cython为渲染器提供可调用的接口以进行集成。

使用C++会严重阻止许多具有高级语言经验的团队成员为代码库做出贡献。 它还导致偶尔难以调试的内存安全性和正确性问题,即使是我们经验丰富的C++开发人员也会感到困惑。所以,他们选择了Rust。

他们的全部服务,包括所有C、C++和Python组件都使用Rust重写了,从任务加载到调度GPU操作都使用Rust(一个全栈Rust案例)。使用Rust为他们带来诸多好处:

  • 改进了开发流程。
  • 将多语言统一为一种语言。之前是C/C++/Python,现在只有Rust。
  • 保证了产品质量。

现在他们的产品中,每天可以处理1000多个渲染定制服务。

Read More

Rust 类型语言

#type

本文简要地介绍了Rust中的类型系统。

Read More

Rust中的记忆化

#memoization

有一种技术叫记忆化(memoization),可以避免函数的多次计算,从而节省资源。顾名思义,记忆化技术可以把函数的调用结果记忆下来,或者说缓存下来。

本文作者以Fibonacci序列递归函数作为例子,一步步介绍了Rust中的实现函数记忆化功能的最佳实践。

Read More

「系列文章」Rust模块系统和命令行应用有用的常用的crate介绍

#mercurial

Facebook的Mercurial版本控制系统从去年开始就已经用Rust重新实现了,这篇文章主要是其开发者在学习模块系统的一些实践和有助于命令行参数解析和错误处理的常用crate分享。

Read More

使用Stream和Futures读取文件实验

#tokio #futures

Read More

「新手向」使用文件和文件I/O开发实用的命令行程序

#cli #GettingStart

Read More

「技巧」如何为Vec实现Display

#tips

使用NewType模式和Deref配合使用。

Read More

200行Rust代码实现绿色线程

#green_thread

可以算上一本小书了,从零开始实现绿色线程,值得学习。

rug:使用Rust重新实现git

#git

应该是一个练手项目,根据《构建Git》一书来实现的。

Repo

swym 实现无锁了吗?

#lockfree

swym是一个事务性内存库,它优先考虑性能。 这篇文章将探讨一些关于swym进展承诺的最新研究,以及与非阻塞算法的一些比较。

Read More

mimalloc: 一种性能良好的小型通用分配器

#malloc

虽然这不是一个Rust实现的项目,而是C实现的,但这可能项目很酷,也许Rust社区也需要。可以下载一下论文pdf看看。已经有了Rust绑定:mimallocator

「Redox编程之夏博客系列」:为Redox OS实现ptrace

#RSoC

目前写了两篇,还未完。

ptrace (process trace)系统调用通常与调试相关,它是本地调试器监视类unix系统上调试的主要机制,同时也是实现strace系统调用跟踪的常用方法。

Read More

「学术」物理学粒子实验室研究员首次使用Rust进行数据分析并且发表了论文

#physics

该贴作者声称,这是首个使用Rust分析的论文被发表。之前都是Cpp。该论文主要探讨了Rust在其领域的可行性,并且他实现了一个分析框架,用于分析来自CERN基地的公共数据。

「小工具」边打字边背单词

#cli

国内社区 smilingleo 自我安利的他自己的rust练手小成果

typing-english

【系列】Rust 的 OOP 编程研究

这是一个系列文章,目的是对于有以往OOP编程经验的程序员,看一下在Rust中如何实现/做到OOP编程的思维和模式。写得非常细致。推荐。

Read More
Read More 2
Read More 3
Read More 4

用 Rust 实现 HTSP 协议

作者其实在2017年就用Rust实现了一版,现在新写了一篇文章,讲他如何用最新的异步语法来升级了之前的程序,记录下这个过程中的心得体会。HTSP 协议是 TVHeadend 支持的一种流媒体协议。

Read More
Read More 2

使用 Rust 写一个 Proxy,作者感言 Rust 是编程界的未来

作者写 proxy 的目的是为了代理 API 请求和一系列的中间件服务。在写作过程中,感觉 Rust 很好,很好,很好~~

甚至自己做了一个EVA的图?虽然有点丑。

img

Read More

Xi-Editor 作者最新文章 - 窗口变动大小的时候如何做到平滑

这个问题很常见,但是能处理好的不多,这是他的最新思考。

Read More

Concurrency in Rust is Boring

一篇介紹並發執行在rust為什麼無聊但是讓人安心的投影片

因為不用解 data races

read more

rust簡介短片

read more

IntelliJ Rust 又更新了 #100

主要新增了 const 常數關鍵字的高亮支持

read more

Scriptkeeper

一個輔助測試 Bash 的程式

假如你原本有個

#!/usr/bin/env bash

if [ -z "$(git status --porcelain)" ] ; then
  commit=$(git rev-parse HEAD)
  docker build --tag image_name:$commit .
else
  exit 1
fi

你可以改成 toml 的格式

tests:
  # builds a docker image when git repo is clean
  - steps:
    - command: /usr/bin/git status --porcelain
      stdout: ""
    - command: /usr/bin/git rev-parse HEAD
      stdout: "mock_commit_hash\n"
    - /usr/bin/docker build --tag image_name:mock_commit_hash .
  # aborts when git repo is not clean
  - steps:
    - command: /usr/bin/git status --porcelain
      stdout: " M some-file"
    exitcode: 1

read more

教學:升級到Actix Web 1.0

原本用 actix 0.7 要升級到1.0的可以看

read more

Typestate 模式

typestate 是一種API設計原則

讓對象的某些函數在特定狀態下才可用,如果在錯誤的狀態便會不能編譯

這有個好處,是將執行期錯誤轉為編譯期,消除運行時檢查讓代碼更小更快

來看看作者怎麼說吧?

read more

Rust Streams

一篇非同步讀寫 stream 教學

read more

為什麼我們要選rust

老生常談了,速度快、記憶體安全、平行計算能力

read more

rs-pbrt 发布 v0.6.1

这是一个按这本书

img

实现的图形渲染库。看下效果

img

Read More
pbrt

如何对 diesel 写自动化测试数据

使用 diesel-factories。这个库参考 Ruby 的 factory_bot 设计。可以对应像下面这样写:

Ruby

factory :country do
  name "Denmark"
  code "DK"
end

factory :city do
  name "Copenhagen"
  country
end

Rust

#[derive(Clone, Factory)]
#[factory(model = "Country", table = "countries")]
struct CountryFactory {
    pub name: String,
    pub code: String,
}

#[derive(Clone, Factory)]
#[factory(model = "City", table = "cities")]
struct CityFactory<'a> {
    pub name: String,
    pub country: Association<'a, Country, CountryFactory>,
}



Read More

Rust 最早作者 Graydon Hoare 又给出一个演讲

讲安全,讲历史,讲Rust。

Read More

使用 Rust 和 RISC-V 构建安全系统,一个 Slide

讲得很清晰,想听听现场录音。

Slide

async/await 请求更多测试用例

#async

目前async/await已经接近稳定了。但目前还在等待PR 61775,它允许多个生命周期参数出现在async fn中。还有另外的PR 61872,它接近了一些ICE问题。现在官方希望大家来提交更多的测试用例。

「技巧」Rust的slice::windows功能非常棒

#tips

此方法返回切片上的迭代器。 可以指定迭代器长度。 它允许您遍历切片并在每次传递时具有特定大小的窗口。

// windows.rs
let slice = ['w', 'i', 'n', 'd', 'o', 'w', 's'];
for window in slice.windows(2) {
  &println!{"[{}, {}]", window[0], window[1]};
}
// prints: [w, i] -> [i, n] -> [n, d] -> [d, o] -> [o, w] -> [w, s]

Read More

「经验分享」使用Rust刷欧拉项目(Project Euler)的前20个问题

#tips

Read More

「视频」过程宏 Part 2

#video

Rust社区的老朋友Jon Gjengset昨天带来的直播视频,过程宏的第二部分。

Read More

《使用Rust编写操作系统》系列文章新增一节附录《链接器参数》,

#blogos

探讨了另一种裸机程序适配链接器的解决方案和它的必要性。

《链接器参数》

还修改了第一到三章大量篇幅内容,适配了上半年出现的自定义目标三元组编译方式,修复了诸多问题。Read More

GitHub项目地址

检测Rust中Vec中是否有相等的元素

#vec #tips

该文中给出了12种解法,各有什么优劣呢?这就需要你自己来考察了

区块链直播讲座: Web3思想简史——致真正的区块链创业者

  1. 开放社会

  2. 密码朋克运动

  3. 比特币前传

  4. 交易成本

  5. 为何是比特币?

  6. 超越比特币

  7. 世界计算机——以太坊

  8. 去中心化的三个维度

  9. 后斯诺登时代

  10. Web3及其愿景

  11. Web3应用的特性

  12. Polkadot/Substrate

  13. 历史的两条线索

  14. Web3创业者的伴手礼

15号晚上8点,Random Capital合伙人刘毅老师会有一场关于web3,substrate方面的讲座,敬请期待

小鹅通手机直播地址:最好微信打开

2019 開發者技術報告

主要是rust愈來愈多人想學了

read more

keys.openpgp.org (使用 Rust 實作)

一個使用rust實作的 keyserver

read more

如何開放API並且隱藏實作

這在C++有個Impl Pointer 實作法,來看看rust怎麼做的吧

read more

Windows Kernel-Mode Drivers 使用rust

有人想在windows用rust寫driver 但找不到資源,希望大家給個建議

目前只有一個 https://github.com/pravic/winapi-kmd-rs 的樣子

read more

有人做了一個 下棋AI 4k1w

4k1w是 Four Kings One War這個遊戲

https://store.steampowered.com/app/883680/Four_Kings_One_War/

看起來蠻有趣的,作者覺得是個不錯的體驗

read more

Jen: 一個產生文件的命令列程式

能根據模版產生一些常見的文件

read more

与Rust生命周期打交道的经历总结

这篇文章总结了很长一段时间以来,与生命周期打交道的一些心得体会。写得非常清晰,仔细。可供一读。

Read More

区块链直播讲座: Web3思想简史——致真正的区块链创业者

今晚8点,Random Capital合伙人刘毅老师会有一场关于web3,substrate方面的讲座,敬请期待

  1. 开放社会
  2. 密码朋克运动
  3. 比特币前传
  4. 交易成本
  5. 为何是比特币?
  6. 超越比特币
  7. 世界计算机——以太坊
  8. 去中心化的三个维度
  9. 后斯诺登时代
  10. Web3及其愿景
  11. Web3应用的特性
  12. Polkadot/Substrate
  13. 历史的两条线索
  14. Web3创业者的伴手礼

小鹅通手机直播地址:最好微信打开

PingCAP人才计划培训课程:Rust网络应用实践

#pingcap #talent

感兴趣的可以跟着学习一下。当然,该项目下也有Go课程,针对TiDB相关的。

Read More

「系列文章」用Rust写一个光线追踪器

#Raytracer

当前标准库(nightly)中 futures 的设计思路和取舍

别听很多人嚷嚷,其实看这一篇就够了。

Read More

用 200 行 Rust 代码讲解绿色线程

新鲜速看。

Repo

unf - 把文件名中不符合unix命名规则的字符清除的工具

比如:

$ unf 🤔😀😃😄😁😆😅emojis.txt
rename '🤔😀😃😄😁😆😅emojis.txt' -> 'emojis.txt'? (y/N): y
$ unf -rf My\ Files/ My\ Folder
rename 'My Files/Passwords :) .txt' -> 'My Files/Passwords.txt'
rename 'My Files/Another Cool Photo.JPG' -> 'My Files/Another_Cool_Photo.JPG'
rename 'My Files/Wow Cool Photo.JPG' -> 'My Files/Wow_Cool_Photo.JPG'
rename 'My Files/Cool Photo.JPG' -> 'My Files/Cool_Photo.JPG'
rename 'My Files/' -> 'My_Files'
rename 'My Folder' -> 'My_Folder'

Repo

如何将Rust应用打包为最小的Docker镜像

#docker

主要是利用多阶段构建的方式,在最后一个阶段将编译好的二进制文件复制到一个最小化镜像里。详细请看原文。

Read More

把GitHub打造成你自己的Cargo Registry

#github

Read More

如何在Windows平台上基于MSVC工具链使用gtk-rs

#gtk #windows #msvc

该贴作者对于gtk-rs团队推荐使用GNU工具链不是太满意,所以他自己折腾出一些方案分享出来给其他人减少麻烦:

1. Install GTK3 using vcpkg following the instructions on the GTK website. I'll refer to its directory as %VCPKGDIR% for brevity.

2. Add %VCPKGDIR%\installed\x64-windows\bin to your PATH environment variable. It needs to be early in the list, or DLLs shipped with random applications may get picked up before the ones vcpkg installed, leading to process didn't exit successfully (exit code: 0xc0000139, STATUS_ENTRYPOINT_NOT_FOUND).

3. Set the GTK_LIB_DIR environment variable to %VCPKGDIR%\installed\x64-windows\lib.

4. Create some symlinks.

    %VCPKGDIR%\installed\x64-windows\lib\gtk-3.0.lib points to %VCPKGDIR%\installed\x64-windows\lib\gtk-3.lib.

    %VCPKGDIR%\installed\x64-windows\lib\gdk-3.0.lib points to %VCPKGDIR%\installed\x64-windows\lib\gdk-3.lib.

    %VCPKGDIR%\installed\x64-windows\bin\gtk-3.0.dll points to %VCPKGDIR%\installed\x64-windows\bin\gtk-3.dll.

    %VCPKGDIR%\installed\x64-windows\bin\gdk-3.0.dll points to %VCPKGDIR%\installed\x64-windows\bin\gdk-3.dll.

5. At this point you can try and make something with GTK. However, while the latest version of gtk on crates.io is still 0.6 you'll need to either use the Git repositories directly or patch the source code in your Cargo registry - they got the minimum version for something wrong, so you'll get an unresolved external symbol error.

6. If you try making something with GTK now, it'll work, but you'll get warnings about missing stuff. For some reason, vcpkg doesn't currently build any resources. To work around this, download the latest versions of mingw-w64-x86_64-adwaita-icon-theme and mingw-w64-x86_64-hicolor-icon-theme from the MSYS2 repo. Extract the icons folder in each one to %VCPKGDIR%\installed\x64-windows\share.

Reddit 讨论

「视频」响应式编译器

#Rust

Rust 核心团队leader在PLISS大会上的分享,对编译器感兴趣的可以听一下。时长1小时27分。

许多编译器教科书和课程将编译视为一种“批处理过程”,其中编译器接收一堆输入文件,经过一组编译器转换,并最终生成目标代码作为输出。 但是,越来越多的用户希望与VSCode等IDE集成,后者需要不同的结构。 此外,许多语言都具有递归结构,其中正确的处理顺序难以静态地确定。 Niko(Nicholas)将讨论Rust团队在重组(restructuring)Rust编译器以支持增量编译和IDE集成方面所做的一些工作。

Tokei 10.0.0版本发布

#git

Tokei是一个Rust实现的快速计算程序代码行数的工具。

Read More

warmy 0.12 新版本发布

#toml

warmy是一个Rust编写的可实现热加载/重载的库,新版本提供了对toml crate的通用支持。

warmy-0.12

「教程」使用actix-web 1.0实现认证微服务系统

#actix_web

这个教程非常完整,基于actix-web 1.0和Diesel实现的一个基于JWT认证的微服务系统。

nannou_timeline: 一个GUI小工具

#GUI

用于随时查看和控制数据

img

repo

「示例」使用静态链接的Rust可执行程序

#Linux #StaticallyLinked

运行于Linux内核之上

Read More

字數統計使用 Actix, Kafka, Redis

一個字數統計的簡單的範例

Read more

sdf-test 多重頻道文字距離

img

Read more

使用Rust作为数据结构和算法的教程书要出版了

img

源码库

构建无锁连续环形缓冲区

#lockFree #ringBuffer

本文由Andrea Lattuada(苏黎世联邦理工学院博士生, ETH Zurich)和James Munns(来自Ferrous Systems)共同写作,介绍了如何设计和实现(包含了两个版本的实现,每人实现了一个版本)用于跨线程通信的高性能无锁环缓冲器。

在Rust中使用FlatBuffers

#flatbuffers

FlatBuffers是Google的序列化格式。它在读取和编写数据方面非常快:比JSON或XML快得多,并且通常比Google的其他格式(比如Protobuf)更快。目前有十三种编程语言支持它,包括Rust。

FB在计算时间上占优势,而PB则在内存空间上占优(相比FB,这也正是它计算时间比较慢的原因)。Google宣称FB适合游戏开发是有道理的,如果在乎计算时间它也适用于后台开发。protobuf更适用于分布式计算领域。 参考来源

感兴趣的可以看看这篇教程,了解FlatBuffer以及如何在Rust中使用它。

Read More

来自MIT数字货币计划Rust工作室的分享幻灯片 Day 1

#MIT #DigitalCurrencyInitiative

Rust学习中的痛点

#learning

有人记录了他在Rust学习过程中遇到的痛点,以及一些解释,需要的人可以参考

Read More

「视频」「入门向」Sean和Kait学Rust

#video #newbie

Sean和Kait是来自于JS社区的全栈开发者,最近决定学习Rust,并且把他们的学习过程录成视频。

img

Read More

persy: 简单事务存储引擎

#tools

0.5发布,persy是基于单个文件的存储,其中数据可以存储在称为“segment”的子容器中。

persy

用Rust写操作系统系列文章五月份的状态

#blogos

BlogOS系列课程在五月份的一些更新汇总

Read More

Evoli: Amethyst官方展示游戏

「视频」过程宏

#ProceduralMacros

这个是Jon Gjengset录制的,Jon是号称东半球Rust第一的男人,照例,视频时长长达4小时

视频

使用 Rust 来操作 macOS I/O

比如,获取电池电量信息?

Read More

dua - 并行的文件统计工具

也就是 du 的翻版啦。这个用上了Rust的并行化技术。速度比原来的 du 更快,特别是在SSD下更快。比如像下面这样测试

time du -sh real 0m1.003s

time dua -t 8 real 0m0.378s

time dua -t 1 real 0m0.971s

Repo

小技巧:cargo clean的时候,不想重新编译依赖,怎么办?

cargo clean 之后,会重头开始编译,各种依赖会重新编译。那么如果只想重头编自己工程中的代码,不想把依赖全部重新编译呢?答案很简单:

cargo clean -p <your_crate_name>

Read More

rucene

知乎开源了Rust实现的搜索引擎 rucene

据@Chaos了解,目前开源的部分只包括 lucene library 部分,搜索引擎的部分太多业务内容而且跟内部的一个分布式框架有强绑定就没开源,等后续弄好了应该还会出一篇文章,详细介绍这个项目。未来估计还会有一次代码重构,可能会带来break change的修改,想要贡献的朋友可以缓一缓。

Read more

用Rust 使用 macOS IO kit

Read more



图像/GUI

實作 gfx-hal 的 PF3

PF3是什麼?

給一些矢量路徑

根據矢量路徑生成“填充”(將生成“圖塊”的操作)

使用“填充”來生成“圖塊”:實心圖塊或Alpha圖塊

實心瓷磚並不存在,它們只是渲染命令/著色器,表示“用顏色X為圖塊中的每個像素著色” 透明度圖塊是16x16像素的平方數據,用於對每個像素中的透明度級別進行編碼,透明度圖塊用作“Mask”以及實心圖塊來繪製不僅僅是一種純色的圖塊 請注意,屏幕的16x16像素平方區域可能有多個與其關聯的透明度平鋪,具體取決於該平鋪中的路徑數量(因此,透明度平舖是路徑特定的)

最後通過GPU混合功能完成透明度圖塊的混合

PF3 目前使用OpenGL來實作

read more

Gtk-rs 发布了新版本

#gtk

新版本开始支持Rust 1.34

Read More

利用SDL2实现[PSX]毁灭之火(Doom Fire)效果

#game #Graphics

这是一篇学习图形化开发的好文章。使用Rust和SDL2实现Doom有效中的火焰效果。

img

Read More

trgui - 又一个GUI框架

新出来的一个,纯正的用Rust写GUI。借鉴于 IMGUI, MLIB, Love2D。其基本理念是利用 Widget trait 对象和 Container,来看一下其设计理念图:

img

Repo

Winit 0.20

windows gui rust庫,需要大家一起來測試

read more

resvg - 强悍的 svg 渲染库

今天这个库发布了 v0.7。来看一下性能:

img

另外还有一个库叫 librsvg,目前也已经用 Rust 重写了。这是各大 Linux 发行版中很基础的一个库,与resvg 比,两者性能上目前各有千秋。

Read More

「通告」Azul GUI 框架从现在起停止维护

#GUI

Azul的作者因为自己的工作和家庭私事,所以无暇继续维护Azul框架。也许这种情况会持续一年。不过也有其他人汲取了Azul框架的灵感,会继续fork说不定。

Read More

coffee 2D游戏引擎 发布 0.3版本

Amethyst 0.11.0 已经发布

#game

最新版主要是集成了Rendy。 Rendy是一个位于gfx-hal之上的底层渲染引擎,允许定位Vulkan,Metal,DirectX(WIP),OpenGL(WIP)和WebGL(WIP)。与gfx生态系统兼容使得独立库的集成变得更加容易!

Read More

#game

Repo

coffee 2D游戏引擎推出了响应式UI

不过这个UI是用于游戏内的UI。

Repo

Vimeo推出对免版税视频编解码器AV1的支持

#vimeo #av1

今天,世界领先的专业视频平台Vimeo宣布支持新的免版税视频编解码器AV1。 AV1编解码器使高清晰度和超高清视频内容能够以更低的比特率流式传输到受众,而不会影响视觉质量。Vimeo去年加入了开放媒体联盟。

在推出对AV1的支持时,Vimeo与开放媒体联盟的创始成员之一Mozilla合作。 Vimeo利用并贡献了Mozilla的开源编码器rav1e(Rust实现的AV1编码库)。

至此,Vimeo也算是拥抱了Rust社区。

「我们很自豪能够为rav1e编码器的开发做出贡献,并加入Mozilla为免费和开放视频所做的努力。总之,我们正在为下一代视频编解码器奠定坚实的基础,—— Vimeo编码首席工程师 Vittorio Giovara 如是说。」

rav1e

i2a-rs - 把图片转换成终端下的彩色文字的库

Cool! 来看一下例子:

img

Repo

Nannou 0.9 发布

#framework

Nannou 是一个开源的创意框架,新版本从OpenGL切换到Vulkan以处理跨平台图形。这个框架真酷,可以生成各种创意性的艺术动画。

img

plotters - Rust 图表库 v0.2 发布

它支持多后端:位图、矢量图、windows和 webassembly。来看看效果,相当不错

imgimgimg img img imgimg

Repo

gfx-rs 5 周年庆典了

不知不觉,gfx 已经 5 周年了(对,在Rust 1。0发布之前就开始了)。这个项目目前几乎已经成了 Rust 图形领域库的一个事实上的标准设施。也为我们展示了如何做一个世界级的项目。

Read More

stego - 网络隐写术界的瑞士军刀

网络隐写术就是这种,比如把有用的信息,编码到一个图片中,把图片发送给别人,达到传递隐藏信息的目的。哇,终于见到Rust写的这种库了!

Repo

来自Libre Graphics Meeting 2019大会上的Slides

#2D

这是关于Rust在2D图形开发中的分享

Read More

nphysics

一個二維加三維的剛體物理引擎

Read more



Story

在Rust中 在超級重寫ad-block引擎後,Brave打破速度限制

使用Brave瀏覽器的工程師重寫了Rust中瀏覽器的廣告攔截引擎,並因此看到了大幅度的速度提升。

原因是,他們可以更勇敢的實作複雜的平行演算法而不怕資料競爭。

read more

Neqo : Mozilla的 Rust QUIC的實作

目前還沒有文件,還不太了解跟其它實作的差異

read more

想要 Ferris 吉祥物的小伙伴注意了

这里全是 https://rustacean.net/

img

Read More

「Reddit讨论」Rust中有哪些遭人诟病的地方?

#Rust

评论很精彩。看到了编译时间、闭包、错误处理等。(但是有人说语法不优雅,我是不认同的)

Read More

Rust 網站台湾繁體中文翻譯計畫正式啟動

#RustSites

有意願貢獻者可以直接註冊 https://pontoon.rust-lang.org/zh-TW 協助貢獻,亦可加入 TG 群參與討論 https://t.me/rust_zh_tw。

Facebook的数字货币项目Libra由Rust实现

#libra #facebook

谢邀。昨天第一时间看了下白皮书。

看看Libra的愿景,安全是重中之重。使用Rust写区块链,底层的内存安全有保证,也就是说杜绝了系统产生漏洞的可能性。

img

另外从Libra的智能合约语言MOVE中看得出来,Rust对Libra的影响是很深的。

imgimg

如果说Rust是专门为内存安全而重新抽象和设计,那么MOVE就是为金融安全而重新抽象和设计。看看MOVE这个名字,它代表了资源只能在帐号间转移,而不会被复制或无故消失。这和Rust的MOVE语义是很相近的。

这种影响是深层次的,设计哲学级别的影响。也就是说:

  • Libra不仅仅是底层区块链使用了Rust。
  • Libra上层的金融逻辑基础,都是受Rust安全思想的影响。 这也印证了,Rust之父在创造Rust之初对互联网未来的看法:未来的互联网必然是安全和性能都要保证的。以Facebook的体量和野心,也许未来的互联网,就是货币互联网,对于安全和性能都是有很高要求的。

现在Libra代码量还不是很大,可以开始学习Rust了,现在学习还不晚。

Libra

同一项目实现的情况下,对比Rust,Haskell,C++,Python,Scala和OCaml

#Comparing

该文作者是加拿大滑铁卢大学(uwaterloo)的学生,在做他们学校cs444的编译器课程。该课程的目的是提供对类Java语言编译器基本结构的透彻理解,主要部分包括为简化的类Java语言实现编译器。

该文作者使用了Rust语言来实现此课程的编译器。其他团队使用别的语言,比如Haskell、C++、Python、Scala和Ocaml,所以他就有此机会在同一项目之下,比较不同语言的实现。他主要是比较不同语言实现的代码量和编译器大小,与该语言的思想、特性、解析方案等所做的决策之间的关系。

Rust不好的地方有哪些?

作者说,在网上,总是听到说Rust这里好那里好,那么,Rust不好的地方有哪些?

这里就简单汇总一下人们的吐槽:

  • Compile times for large projects
  • Crate ecosystem is still very young, volatile and sparse
  • Because the community is young and still largely curiosity-driven, some essential crates have inconsistent maintenance since there aren't many maintainer organizations yet
  • Orphan rules make the glue-package approach (like Java uses) intractable and thus it's difficult to combine different parts of the ecosystem or factor libraries as much as one would like
  • Related to the above, we're probably still several years or editions away from a good dynamic linking/plugin story (but for good reason, related to the below)
  • The language's real potential still always seems one unimplemented RFC away (e.g., async, const generics, GATs, unsized rvalues, etc.)
  • A lot of the features really essential to write libraries of the quality one would like are still unstable (e.g., specialization)
  • Many crates have not yet reached version 1.0. This can make them more "scary" to use, as the API could change at any point.
  • std::net is quite lacking. For example, you can't perform a non-blocking connect. There is net2, but it has its own set of issues. Then there's socket2 to address net2's issues, but its API is a bit clunky. It's also not very popular, so it remains to be seen for how long it will stick around.
  • I think only recently was mirroring of crates.io introduced in a more sane way, though I don't remember exactly in what state.
  • Async IO is still clunky. MIO seeks to provide a nice API, but it's not zero-cost by any means. It also has some issues with Windows. I ended up having to use my own wrappers for epoll and kqueue, and used wepoll for Windows.
  • No crate namespacing, so you end up with crates like "yorickpeterse-socket2", "billy-bob-socket2", etc. This also means name squatting is more annoying.
  • This is not an issue with Rust itself, but is worth mentioning: I really can't stand Clippy. More often than not I upgrade it, and it introduces really annoying lints. For example, if you define len it will complain if you don't also define is_empty. This makes sense for a library, but when writing a self-contained application where you'd never use this it's annoying. Of course you can disable it, but I don't want to sprinkle Clippy directives all over the place.
  • No (computed) goto, or something that is guaranteed to compile down to it. This means interpreters won't be able to make use of them, slowing them down a bit (depending on the hardware)

Read More

用 Rust, Haskell, C++, Python, Scala 和 OCaml 实现同一个工程的比较

要比较语言,莫过去用它们实现同一个项目/工程了。作者是一个学生,他们被布置实现一个Jave的子集到x86的编译器。不同的组用了不同语言自行实现。不过,这次这篇文章只是比较了实现同一个编译器需要用到的代码量。其实这个很不客观,因为不同小组实现同一个目标的设计思路和算法都不同。但是这还是能给人一点参考意义,至少知道一个大概的量级和复杂度。

Read More

「系列」用Rust写脚本语言

#zhihu #impl_lang

来自国内社区 NameFactory ,他在用Rust实现一门动态语言,并且在知乎里记录了他的心路历程。大家可以关注一下,支持一下。

「实录」Rust 和 Go 在图像处理上的性能之争

#image #go

这是一次群里讨论的记录。主要问题是:Go和Rust图像处理性能相比如何?(同一场景)

经过作者的测试,发现go的性能更好。

  • Go耗时:695.732µs
  • Rust耗时:8 ms (默认release opt-level应该是3)

探究其原因:

  1. Go在处理图片的时候是一次性读到内存里。而Rust是根据图片宽度来进行分行读取。 讲道理,Rust的这种处理方式在处理大图片的时候更可取一些。
  2. Rust在使用opt-level 3的release优化下,性能也没有超过Go。查其源码发现是因为Rust的image库,在处理decode的时候存在内存拷贝和内存重分配的问题,应该是导致性能低于Go的原因。

这个案例说明:Rust并不保证默认的实现就是高性能,还需要开发者根据具体的实现来优化。

对此,PingCAP的唐刘大佬说:「嗯,后面我们都可以开一个 talk,如何用 Rust 写高性能代码,在 TiKV 里面不知道踩了多少坑」,这里立个Flag。 PingCAP参加今年的台湾开源年会,可能也有相关的主题。

Read

「系列文章」 Rust「封印计划」

#sealed

这是来自于德国柏林一家专注于Rust咨询和服务的公司Ferrous System写的文章。这是系列文章中的第一篇文章,详细介绍了Ferrous System计划对Rust语言和编译器进行安全关键领域认证的计划,这个计划叫做Rust「封印计划」(Sealed Rust)。也就是说,他们要搞起Rust认证了,但这个认证不是对人的认证,而是对Rust语言和编译器,在特定领域上进行安全认证,以便满足特定领域(汽车,工业或航空电子设备等对安全要求更高的领域)的安全需求。

该系列第一篇文章就是描述了该计划的初始流程等内容,感兴趣可以看看。概要:

目前Rust有三种发布状态:Nightly、Beta和Stable。现在Ferrous公司打算提出第四种状态:Sealed。这个版本是从当前Rust中,精选出可以用于特定领域的功能子集,来专门发布一个版本。有点像 #[no_std],专门用于嵌入式。所以,Sealed就相当于是一种功能的「封印」,这是我把这个计划叫做「封印计划」的原因。现在还不确定这个计划是否会成为Rust开发的一部分,但是该公司首先会进行第一波推动,并且打算和Rust Core团队合作。这个计划也是一个长期的计划,他们在学习Rust edition,计划第一个封印版本在18个月内推出。更多内容请看原文吧。(我个人觉得这个计划很不错)

Read More

一种用于太空应用的编程语言

这篇文章开篇抛出一个有趣的问题:

在一个纯粹的假设场景中,太空中有一颗小卫星可以让地球上的人在其机载计算机上上传和运行自己的任务软件。然后,用户将能够控制卫星子系统。选择哪门编程语言最好?以允许人们编写这样的软件,而不用担心过早结束任务?

要求:

首先,任何语言的主要必要性是匹配应用程序的所属领域。可以将空间任务软件视为基于事件驱动的基于状态的体系结构,其中至少有部分代码在硬实时下运行,某些任务活动只能在特定条件下进行。生存任务要优先于科学或其他活动。因此,任务的软件开发过程需要生成特别健壮的代码,这些代码有望在预期和非预期的场景中均可执行。语言工具和语义都必须能够强制执行编写软件产品代码所需要的规范。

其次,与许多地面计算机相比,卫星车载计算机在可用硬件资源方面的限制增加,特别是如果所讨论的卫星是具有有限功率和计算预算的CubeSat(立方体卫星,低成本微卫星,计算资源有限)。有效的资源利用率必须是语言功能的一部分,可直接控制内存分配和CPU周期。

第三,应该对卫星上使用的硬件和软件功能提供足够的支持。如果要考虑CubeSat,则应包括嵌入式通信总线,如I2C,SPI和CAN,以及可能需要实现自定义驱动程序的许多不同硬件外围设备。现代纳米卫星中常用的操作系统是FreeRTOS和Linux,通常是一种ARM微处理器。

最后,用这种编程语言编写代码应该很有趣。我们希望没有太空产业的人们亲身体验太空探索;他们不应该对现代航空航天软件开发过程感到沮丧和恐惧。如果修补自制硬件和软件的人不喜欢这样做,那么70年代和80年代的计算机革命就不可能实现。即使编程航天器是一项关键任务活​​动,如果我们希望在航天工业中发生类似的革命,也不应感到痛苦和无助。

(感觉就是为Rust量身定制的问题?)

该问题我也发到了知乎:https://www.zhihu.com/question/329522820 ,欢迎大家讨论。

来看看本文作者怎么说?

Read More

重磅:Jetbrains 发布了 Rust 2019 生态报告

据小编观察,数据非常可信,由于国内图床很麻烦,建议大家直接传送过去看。另外,关注微信公众账号:Rust语言学习交流,查看完整版本。

你希望在GitHub赞助名单上看到哪位开发人员?

#github

来吧,给你喜欢的Rust开源大佬们(当然,不限于Rust语言)投一票。

Read More

juniper-eager-loading : 用于修复GraphQL中的N + 1查询错误的包

#GraphQL

GraphQL对于构建API非常棒,作者认为Rust非常适合GraphQL,因为它的类型系统和代码生成功能很棒。

但是,如果要构建一个由SQL数据库支持的GraphQL API,会很快遇到N + 1查询错误。当在解析器内执行查询并具有返回列表的字段时,会发生这些情况。 如果不小心N + 1真的会带来很大的性能损耗。

对此的一种常见解决方案称为“eager loading”。 该方案的想法是提前执行必要的查询,并使用尽可能少的查询加载多个关联。

「讨论」使用actix-web 1.0和tokio-postgres 0.4发生的死锁问题

#actix_web #tokio #postgres

Reddit讨论贴

Prisma : GraphQL db 管理程式將會用rust來重寫第二版

啊就rust太棒了,時勢所趨不得不用

效能好又安全,剛好是 Prisma 最重視的兩個點都滿分

Read more

Ada/SPARK 打算學習 Rust 的借用所有權

借用所有權是個不錯的概念,現在Ada也想要用了

Read more

Bloom.sh - 推出了一套(目标是)比肩 Google 服务的平台

网站在这里 bloom.sh。作者野心很大啊。云平台,serverless, 存储,下载,笔记,通讯录,游戏,音乐,画册。。。

有这么大的能力?作者的背景来路不明。

整个平台由Rust语言支撑。在这个网站上线之前,作者已经重写过2次了,也就是说,目前这一版Rust是第三次实现。第一次实现是用Js写的,写出来性能太弱,受不了。然后作者就受Google的市场推销所鼓动,用go写了第二版,速度是提上去了,但是作者觉得go太弱了。很多地方,写起来,不好用,不易扩展。然后第三次,他尝试了Rust,发现Rust太令他热爱了。除了编译时间太长(CI/CD等耗费资源较大),其它真的找不出太多缺点。

构建这种大系统,Rust真是太适合不过了。

img

Read More
Read More 2
Repo

Bzip2 要被 Rust 重写了

这个新闻前几天报道过,现在正式被国外新闻网站报道了。看起来事儿小,bzip2 是 Linux 环境相当基础的设施,所以意义还是蛮重大的。

Read More

SwiftUI: 苹果新发布的UI框架

#swift #ui

在相关的Reddit评论区,发现了这样一个网站:areweguiyet

也许SwiftUI的发布,可以给Rust在GUI生态上带来一些启示?

「官方」Rust治理工作组即将公开

#official

Rust的治理工作组(The Governance WG)即将公开,可以在其工作仓库中看到详细的工作章程。

简单来说,治理工作组是「其他团队」,「Rust项目」和「整个社区」的推动者。它旨在改善社区中,团队和参与者之间,以及团队和参与者之间的流程和交互,以减少工作量和不必要的摩擦。在这样做的同时,它也试图取得平衡,以尽可能简化流程,尽可能透明。同时请记住,绝大多数人都是自愿参与项目的,因此解决方案必须切合实际,尽可能减轻负担。

(个人看法: Rust项目本身一直算是开源界的一个典范,治理工作组的诞生,及其流程规范,必将引领开源社区,对开源感兴趣的朋友可以关注)

使用Rust实现Gopher服务器

#Gopher

与HTTP一样,Gopher是一种用于通过互联网检索信息的网络协议。一个关键的区别是,它尚未被广告公司商业化。这可能是因为它没有提供很多跟踪机会,也没有庞大的用户群。(Gopher曾经有可能成为当今互联网的基础来着)

感兴趣的可以看看

Read More

libcore 已经开始尝试使用 const generics 进行重写啦

这里

const generics 就是“基于常量值的泛型”。简单来说,Rust 中的 [T; LEN],它的很多特性在之前的版本中,只支持最多 [T; 32],而且是人 [T; 0],[T; 1], [T;2] ... 一直到 [T; 31] 这样,纯手撸实现的,丑不?

现在,有了 const generics,就可以把数组这种常用的类型从二等公民提升到一等公民来了。对于处女座来讲,简直要欢呼。

minisketch-rs - @sipa 的 minisketch 库的 Rust 绑定

minisketch 是一种用于提升比特币网络的交易传输效率的技术。@sipa 是比特币开发者。

Repo

bzip2 开始用Rust重写啦

作者说 bzip2 最后一次提交是在 2010 年,到现在为止好多年都没人维护了。所以现在开始重写。从 CRC32 开始。这是 gnome 的项目。

Read More

fast-logger 最快的 log 库?

作者发布出来,说这是最快的 rust log 库。然后被打脸。后来改口说致力于达到最快。

Repo



Web和服务端开发

使用AWS Lambda 的“层(Layer) ”功能实现自动Rust和NodeJS部署

#aws #lambda

Read More

异步Actix Web App升级到1.0案例

#actix_web

本文通过记录一个actix-web的应用案例,展示了从0.7升级到1.0的过程。

Read More

actix-web 1.x实现的反向代理库

#actix

soxy

merino: Rust实现的SOCKs5代理服务器

#socks5

merino

介绍 actix-irc

#actix #irc

基于actix和irc库实现的一个irc协议库。

Read More

actix 1.0 效能搶先看

actix 在 single query, multiple queries, fortunes, data updates 都拿第一名

在fortunes 甚至擊敗好久沒有對手的h2o

不過 Max Latency 在 28.9 ms 跟σ (SD) 0.4ms 差距很大是個大問題

Read more

actix-web 1.0 正式版发布

#actix

actix-web 1.0对于0.7来说,是一次比较彻底的重构。涉及架构重新设计、抽象也由Actor进一步升级到了Service。对于代码层面而言,就是用Service替代了之前的Handler。 1.0的代码也完成遵循Rust惯例,组件化开发,相比于0.7版本的一大坨代码,清爽了很多。

重点说一下Service抽象,它是来自于领域驱动设计(DDD,Domain Derive Development)的概念。DDD要求开发者,构建软件的时候是以领域模型为基本单位。领域模型无关技术,具有高度的业务抽象性,它能够精确的描述领域中的知识体系。开发者需要学会如何让领域模型之间彼此之间建立关系,形成完整的领域架构。而Service就是专门为领域模型提供的外层服务层。服务是无状态的,它只拥有行为。

actix-web这样进行重构,可以方便开发者更好地进行分层设计。相比于之前的actor抽象,更加符合直觉。当然,如果你还喜欢之前的actor抽象,可以通过actix_web_actors组件获得支持。

actix-web组件的依赖层次应该是这样的: 「 (tokio && futures) -> actix-net/actix-rt -> acitx-net/其他子crate -> actix-web」。0.7的actix-web是基于actix实现的web抽象,1.0 的actix-web,是直接取消了actix的抽象,换成了基于actix-rt的Service抽象,提升了性能。但是你如果想用actix也可以,通过actix-web里支持的一个actor组件应该可以(目测,参考example中webscoket的示例),参考下图:

img

Read More

Weave - 终端 http 路由/代理

是一个命令行工具。

Repo



Rust 新闻/活动

OxidizeConf 大会视频已经全面上线

#OxidizeConf

Youtube列表

RustCon Asia 实录 | Rust 在国内某视频网站的应用

#RustConAsia

Read More



异步

async-log

非同步的 log 記錄

a1 -> b1 -> b2 -> a2 -> b3     # raw log stream

a1 -------------> a2           # parsed log stream a
      b1 -> b2 -------> b3     # parsed log stream b

read more

把 Rust 移植到 vxWorks 上面去

vxWorks 是大名鼎鼎的实时操作系统,在嵌入式设备和工业上大面积使用。现在有个pr要在 Rust 编译中加入对 vxWorks 的支持。

Read More

async

平行化執行 shell 指令

它的靈感來自GNU Parallel,主要區別在於異步通過在後台運行服務器來保持命令之間的狀態。

read more

Sluice: 一个用于并发I/O编程的异步字节缓冲区和管道

#IO #async

sluice目前发布了 0.4 alpha 版本,基于Rust的async/await语法

Sluice

「心得」如何改进一个棘手的并发接口

#concurrency

该贴作者在用Rust实现一个Read-Log-Update无锁并发库的时候,总结了一些经验。



kube-rs - k8s 的 Rust 客户端

今天作者又给出了一篇文章介绍。Read More

Repo



区块链

Rust in 区块链

Rust 在区块链中使用越来越多了,这里做了汇总,月更。另外,rustforce.net 上也有对相关的汇总。

Read More

Wasm 相关

Wavelet 一個開放式分類帳,用於在Rust中編寫可擴展、任務式、安全、分散式的WebAssembly智能合約

read more

Twiggy 0.6

twiggy 是一個 wasm 大小分析器

read more

「视频」Lightbeam: 一个高度优化的流式WebAssembly编译器

#wasm #videos

该视频探讨基于wasm技术构建现代区块链智能合约执行环境的关键问题。

Read More

WASM by Example

#wasm

类似于Rust By Example的一本小书,是教你学WASM。目测内容还不够丰富,不过可以先关注。

Read More

gravitle: 用于Web的2D软体引擎

#softbody

wasm-tetris

俄羅斯方塊線上wasm版

Read more

wgpu - 用 Rust 实现 WebGPU 协议

这个库基于 gfx-hal 来做。这个库会同时支持 WebGPU 和 WebGL。不得了不得了。Rust 这是要全面攻占未来 Web 终端。以 wasm 为枪,WebGL/WebGPU 加持。不得了了。

Repo

Game

點石頭保地球小遊戲

有人用rust寫了一個超簡單小遊戲,有興趣就來看看吧

Read more

#game #Amethyst

Evoli是一款由Amethyst(紫水晶)制作的进化灵感模拟游戏,目前已经成功完成了2月份制定的MVP规范。

Read More

sunfish 国际象棋游戏

是对之前的实现的Rust重写。可以在这里试玩。

Repo

Steam 上有哪些游戏是用 Rust 实现的

还有没有?

Read More

介绍 Lightbeam:优化流式WebAssembly编译器

#wasm

Lightbeam旨在用作Wasmtime中的初始编译器,并作为Substrate智能合约子系统的主要编译引擎。该文详细介绍了Lightbeam。

Read More

Rust 中最好的 2D 游戏开发框架一览

作者为了对比,用以下框架分别写了同一个小游戏,以做出对比。

  • ggez
  • tetra
  • quicksilver
  • coffee
  • Piston
  • Amethyst

文章比较长,内容非常详实,做游戏开发的同学值得一读。

Read More



嵌入式Rust

「嵌入式Rust」RTFM v0.5.0 发布

#embeded

Real Time For the Masses (RTFM)是嵌入式并发框架。嵌入式Rust工作组Leader写博客宣布RTFM v0.5.0新版本支持多核,该版本将随着Rust 1.36稳定版先后发布。

Read More

wasmer guess game

将rust的猜数字游戏迁移到WASI目标上,并增加日志追踪与命令行传游戏难度的功能

read more

Symbolication as a service: Sentry 为捕获Rust崩溃调试信息操碎了心

#Symbolication #Debug #Sentry

符号化即服务(Symbolication as a service),Sentry在过去的几个月中,将使用的许多符号代码移动到一个独立的服务中。 现在他们很自豪地推出独立的原生符号服务Symbolicator。它的API与Microsoft的符号服务器兼容,并且始终100%开源。

Read More

「官方」嵌入式工作组: 嵌入式Rust 的 2019

#embeded

概要:

  1. 2018年嵌入式工作组推动了Cortex-M支持的稳定。
  2. 通过构建更多“有趣”的东西,例如示例项目,酷应用程序,以及从这些项目中提取和发布可重用组件来集中建立2019年的嵌入式Rust生态系统。
  3. 我们将在夏季(直到2019年9月或10月)将其作为重点
  4. 需要每个拥有GitHub帐号的人来投票,决定使用哪个聊天平台:rfcs/0351-chat-vote

Read More

「嵌入式Rust」使用STM32 Blue Pill在Apache Mynewt上托管嵌入式Rust应用程序

#Embedded

长文预警!

这是来自新加坡李立源(一位嵌入式教育工作者)老师的文章。他在尝试用Rust来替代C语言进行嵌入式开发的教学。这篇文章很详细地比较了C和Rust在嵌入式开发中的差异。如果你也想跳出C开发的「苦海」,建议好好看看这篇文章。

emu: 基于Rust实现的GPU的语言

#opencl

Emu是用于GPU编程的高级语言,专门设计用于嵌入Rust代码中。它为编写函数提供了单个过程宏emu!。宏将编译时的函数转换为底层的代码(OpenCL代码),以便它们可以在GPU上运行。Emu还提供了一些旨在提升GPU编程的体验,例如内置了数学和物理常量,单元注释和隐式转换等。

emu



IOTA現在需要rust高手

IOTA是一種區塊鍊 可以遠端

要會英文,需要帶team 的程式主管職

read more