• 【Rust日报】2022-09-07 Wasmtime 将在 9月20 号 发布 1.0 版本


    Wasmtime 将在 9月20 号 发布 1.0 版本

    这篇文章主要讲述了怎样使编译器生成更快的代码,使编译器本身运行得更快,使 Wasmtime 更快地实例化已编译的模块,并在模块运行后使 Wasmtime 的运行时尽可能高效。

    ReadMore:https://bytecodealliance.org/articles/wasmtime-10-performance

    WebAssembly 的 风险

    来自 fermyon 官方博客的文章,介绍了 WebAssembly 现存的一些风险和应对方法:

    • 标准化进展非常缓慢。为此 Fermyon 加入了 字节码联盟 亲自推动标准化进程,并通过构建 Spin 代码实现来充分利用标准

    • 语言支持。Fermyon 认为前 20 种语言中至少有 15 种必须完全支持 WebAssembly 以及 WASI 和组件,才能正确地认为 WebAssembly 被很好地采用。Fermyon 采取的立场是将注意力集中在最受欢迎的语言上,这就是为什么使用 Rust 而不是 C 或Zig 这方面也有一些好消息:1. 语言支持正在迅速增长,今年C#、Python和Ruby都增加了支持 2. wasi 支持现在是进入 wasm 游戏领域的筹码 3. 在主流实现语言未能发挥作用的地方,该语言的替代实现正在加紧发展,比如 tinygo 对于 wasm 的支持就超越了 go

    • 生态系统不是可选的。WebAssembly 有望成为下一波计算浪潮,但除非 Fermyon 能围绕它建立生态系统,所以 Fermyon 正在努力联合相关其他企业合作共建社区。

    • 社区实现碎片化。(比如 deno 和其他非标准化实现,文章没有明说)。可悲的是,有时这仅仅是由于无知和不参与:“我们不知道有一个标准为此而出现。” ,所以目前发布的组件规范(正在进行中,但正在迅速成熟)旨在解决这类问题,这个标准使得在不同的主机实现之间共享 WebAssembly 二进制文件成为可能。还有一个不幸的趋势,即一些开发人员选择与组件模型相反的工作,创建与他们自己的主机运行时的强链接。走这条路一方面会导致平台锁定,另一方面会毫无意义地重新编写相同的代码(针对略有不同的主机进行工具化)。幸运的是,那些准备最好的人(Fastly、Mozilla、Microsoft)反而选择推动互操作性标准以造福所有人。这是正确的第一步。为了阻止破坏性的碎片化“手榴弹”,我们必须增加社会压力,不要我行我素,而要坚持互操作性标准。做到这一点的一个关键方法是彼此公开合作(通过字节码联盟、W3 和 CNCF 等组织),不仅要创建和实施标准,还要创建对话论坛。

    Fermyon 的愿景是,在五年内,WebAssembly 将成为常态,而不是小众市场。新一波应用程序将能够利用 WebAssembly 的速度、安全性和组件模型。为了实现这一目标,我们每个人都可以发挥作用。

    ReadMore:https://www.fermyon.com/blog/risks-of-webassembly

    Dune 一个 JS 和 TS 的runtime

    一个简单的例子。

    1. import shortid from 'https://cdn.skypack.dev/shortid';
    2. console.log(shortid()); //=> "lXN1aGba2"

    一个使用网络模块的示例。

    1. import net from 'net';
    2. const server = net.createServer(async (socket) => {
    3. console.log('Got new connection!');
    4. await socket.write('Hello! 👋\n');
    5. await socket.destroy();
    6. });
    7. server.listen(3000, '127.0.0.1', () => {
    8. console.log('Server is listening on port 3000...');
    9. });

    ReadMore:https://github.com/aalykiot/dune

    bstr - 一个字节字符库

    示例:检测无效的 UTF-8

    在这个非常简短的示例中将演示来检测无效的 UTF-8,将以十六进制形式打印无效的 UTF-8 字节

    1. $ mkdir badutf8
    2. $ cd badutf8
    3. $ touch main.rs
    4. $ cargo init --bin
    5. $ cargo add anyhow bstr termcolor

    首先,让我们编写一个帮助程序函数,该函数将负责打印无效的 UTF-8 字节。也就是说,它以十六进制形式打印无效字节并着色。

    1. /// Write each byte in the slice in its hexadecimal form,
    2. /// and with bold coloring.
    3. fn write_invalid_utf8(
    4. mut wtr: W,
    5. slice: &[u8],
    6. ) -> io::Result<()> {
    7. use termcolor::{Color, ColorSpec};
    8. let mut color = ColorSpec::new();
    9. color.set_fg(Some(Color::Red)).set_bold(true);
    10. wtr.set_color(&color)?;
    11. for &byte in slice.iter() {
    12. write!(wtr, r"\x{:X}", byte)?;
    13. }
    14. wtr.reset()?;
    15. Ok(())
    16. }

    下面的函数负责迭代所有行,查找无效的UTF-8并打印行:main

    1. use std::io::{self, Write};
    2. use bstr::{io::BufReadExt, ByteSlice};
    3. use termcolor::{ColorChoice, WriteColor};
    4. /// Usage:
    5. /// badutf8 < stdin
    6. /// foo ... | badutf8
    7. fn main() -> anyhow::Result<()> {
    8. let mut bufrdr = io::BufReader::new(io::stdin().lock());
    9. let mut wtr = termcolor::StandardStream::stdout(ColorChoice::Auto);
    10. let mut lineno = 0;
    11. bufrdr.for_byte_line(|mut line| {
    12. lineno += 1;
    13. if line.is_utf8() {
    14. return Ok(true);
    15. }
    16. write!(wtr, "{}:", lineno)?;
    17. loop {
    18. let (ch, size) = bstr::decode_utf8(line);
    19. if size == 0 {
    20. break;
    21. } else if ch.is_some() {
    22. wtr.write_all(&line[..size])?;
    23. } else {
    24. write_invalid_utf8(&mut wtr, &line[..size])?;
    25. }
    26. line = &line[size..];
    27. }
    28. write!(wtr, "\n")?;
    29. Ok(true)
    30. })?;
    31. Ok(())
    32. }

    这利用了 bstr::decode_utf8 接口。它允许从字节字符串一次递增解码一个代码点。当您只想从字节字符串中的某个位置提取出代码点,并完全控制如何处理无效的 UTF-8 时,它偶尔会很有用。

    以下是如何使用该程序的示例:

    1. $ echo 'foo\xFFbar\xE2\x98quux' | badutf8
    2. 1:foo\xFFbar\xE2\x98quux
    3. $ badutf8 < gecko-dev/third_party/aom/PATENTS
    4. 60:2.1. Affiliate. \x93Affiliate\x94 means an entity that directly or indirectly
    5. 63:2.2. Control. \x93Control\x94 means direct or indirect control of more than 50% of
    6. 73:2.5. Final Deliverable. \x93Final Deliverable\x94 means the final version of a
    7. 82:2.7. License. \x93License\x94 means this license.
    8. 84:2.8. Licensee. \x93Licensee\x94 means any person or entity who exercises patent
    9. 101:2.11. Reference Implementation. \x93Reference Implementation\x94 means an Encoder
    10. 105:2.12. Specification. \x93Specification\x94 means the specification designated by

    您在此处看不到颜色,但所有十六进制数字在打印到终端时都以粗体显示并涂成红色。

    ReadMore:https://blog.burntsushi.net/bstr/


    From 日报小组 冰山上的 mook && Mike

    社区学习交流平台订阅:

    • Rustcc论坛: 支持rss

    • 微信公众号:Rust语言中文社区

  • 相关阅读:
    Web3在新加坡,叩开世界的大门
    React Redux应用示例详解
    面试题六:Promise的使用,一文详细讲解
    【修复版】2023新版塔罗 算八字测运易理风水 取名 源码平台 搭建教程
    Webpack--devServer的常用配置
    网络协议,OSI,简单通信,IP和mac地址
    Go文件布局
    浅谈代码数据安全
    TiDB 6.0:让 TSO 更高效丨TiDB Book Rush
    LeetCode 1106. 解析布尔表达式
  • 原文地址:https://blog.csdn.net/u012067469/article/details/126775029