【Rust日报】 2019-12-20 Serverless - Rust 使用 WASM 加 Cloudflare

Rust 1.40.0 了

新增了一些新特性

  1. 不詳細的

#[non_exhaustive] structs, enums, and variants

這表示當前的屬性有缺少,要增加屬性欄位,沒增加是會出現錯誤的。

範例看到 beta 依賴 alhpa

// alpha/lib.rs:

#[non_exhaustive]
struct Foo {
    pub a: bool,
}

enum Bar {
    #[non_exhaustive]
    Variant { b: u8 }
}

fn make_foo() -> Foo { ... }
fn make_bar() -> Bar { ... }

// beta/lib.rs:

let x = Foo { a: true }; //~ ERROR
let Foo { a } = make_foo(); //~ ERROR

// `beta` will still compile when more fields are added.
let Foo { a, .. } = make_foo(); //~ OK


let x = Bar::Variant { b: 42 }; //~ ERROR
let Bar::Variant { b } = make_bar(); //~ ERROR
let Bar::Variant { b, .. } = make_bar(); //~ OK
                   // -- `beta` will still compile...
  1. macro 的改善

現在可以這樣寫 expand_to_type 是 procedural macro

type Foo = expand_to_type!(bar);

extern 裡面也可以有 macro

macro_rules! make_item { ($name:ident) => { fn $name(); } }

extern {
    make_item!(alpha);
    make_item!(beta);
}
  1. Rust 2015的借用檢查警告會變成錯誤

  2. 更多 const fn 函數進入標準庫

  3. 還有其它一些函數跟macro也穩定了

Read more

time v0.2

至少要使用 rust 1.40.0

因為使用了 non_exhaustive 特性

與標準庫具有完全的相容性。每種類型都可以執行與標準庫對應的相同算法,反之亦然。類型可以在標準庫之間自由轉換。

Read more

Signal 正在使用 rust

Signal是一個通訊軟體,類似Line, WhatApps, Telegram, QQ

本文大部份是講他們遇到的分散式儲存問題,最後他們使用Raft同步。

Signal選擇將Rust用於我們的Raft實現,他們選擇的重點是因為正確性,而不是性能,因此即使有機會加快某些操作的速度,我們也不會偏離Raft規範。

Read more

mitosis: thread::spawn

這個庫提供了 mitosis::spawn 他很像 thread::spawn

但實際上是產生了一個新的 process

但是用起來就像 thread::spawn 一樣簡單

Read more

Serverless - Rust 使用 WASM 加 Cloudflare

作者原本使用 actix-web

但因為好奇心接觸了 Cloudflare Workers

Cloudflare Workers是支持Rust和WASM的無服務器平台。

使用Cloudflare Workers的主要優勢:

  1. 地理位置分佈的託管設置(包括Kubernetes集群)是在單個地理位置上設置的。對於並行應用程序,讓代碼在Cloudflare的所有數據中心中一起運行非常棒。

  2. 比起一般的設置時間成本,Cloudflare Workers可以快速的讓我訪問Kubernetes集群。 但是對於沒有預先在服務器或群集部署服務的用戶而言,建立新的安全,高可用性部署環境的時間以及運行這些計算機的成本可能會很高。 作者目前使用Cloudflare上託管此服務,還沒有到花到錢的流量。

  3. 易於測試/部署。Cloudflare團隊在Wrangler工具方面做得很好。 部署更新是對 wrangler publish 來說很簡單。 我可以使用wrangler preview --watch進行測試。 而且發布速度很快。

主要缺點:

  1. WASM庫無法完美運行,因為大多數在WASM的庫都針對瀏覽器。例如,在Cloudflare Worker中,沒有視窗。要訪問程式,會需要一個ServiceWorkerGlobalScope。

  2. 開發週期很慢,儘管wrangler preview棒極了,但仍然需要很多時間才能看到更改。每次更改代碼都需要重新編譯Rust代碼,打包並將其發送到Cloudflare以及刷新頁面。特別是由於我使用的是經過編譯時檢查的HTML模板,因此速度非常慢。

  3. 密鑰與Kubernetes不同,Cloudflare Workers中沒有內置的密鑰管理。 Cloudflare小組的某人建議我可以將其密鑰/值存儲成檔案。我選擇了一個傻瓜方式,將機密(加密密鑰和Recaptcha機密密鑰)直接編譯為可執行文件。

  4. 調試困難 異步代碼,恐慌以及與JavaScript的橋樑的結合導致錯誤消息被完全刪除,這使得調試非常困難。

那到底要怎麼使用 Cloudflare Workers 與 rust 結合呢?請看原始文章。

Read more

採訪Zola的創建者(前身為Gutenberg)

這是一個用Rust開發的靜態網站生成器

這是一個英文音頻節目

Read more


From 日报小组 @Damody

日报订阅地址:

独立日报订阅地址:

  • Telgram Channel

  • 阿里云语雀订阅

  • Steemit

  • GitHub

社区学习交流平台订阅:

  • Rust.cc论坛: 支持rss

  • Rust Force: 支持rss

  • 微信公众号:Rust语言学习交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用 Rust 编程语言来实现一个 STUN 客户端。STUN(Simple Traversal of UDP through NATs)是一种用于网络地址转换(NAT)穿透的协议。 下面是一个简单的示例代码,演示了如何使用 Rust 和 tokio 库来实现一个基本的 STUN 客户端: ```rust use std::net::{SocketAddr, UdpSocket}; use tokio::runtime::Runtime; fn main() { // 设置 STUN 服务器的地址 let stun_server: SocketAddr = "stun.example.com:3478".parse().unwrap(); // 创建 UDP 套接字 let socket = UdpSocket::bind("0.0.0.0:0").expect("Failed to bind socket"); // 发送 STUN 请求 let mut buf = [0u8; 1024]; let request: [u8; 20] = [ 0x00, 0x01, 0x00, 0x00, 0x21, 0x12, 0xA4, 0x42, // STUN 请求头部 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // STUN 请求数据 0x00, 0x08, 0x00, 0x14, // STUN 请求数据长度 ]; socket .send_to(&request, stun_server) .expect("Failed to send STUN request"); // 接收 STUN 响应 let (recv_len, _) = socket.recv_from(&mut buf).expect("Failed to receive STUN response"); let response = &buf[..recv_len]; // 处理 STUN 响应 // 这里可以根据 STUN 协议解析 response 数据 println!("STUN response: {:?}", response); } ``` 这只是一个简单的示例,实际上你可能需要更多的代码来处理 STUN 协议的各种情况和错误处理。你可以使用其他 Rust 库来帮助解析和处理 STUN 响应数据。 请注意,这个示例使用了 tokio 库来实现异步网络编程。你需要在 `Cargo.toml` 文件中添相应的依赖,例如: ```toml [dependencies] tokio = { version = "1", features = ["full"] } ``` 希望这个示例能对你有所帮助!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值