< 返回版块

mook 发表于 2022-09-08 10:07

Tags:rust,日报

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

一个简单的例子。

import shortid from 'https://cdn.skypack.dev/shortid';

console.log(shortid()); //=> "lXN1aGba2"

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

import net from 'net';

const server = net.createServer(async (socket) => {
  console.log('Got new connection!');
  await socket.write('Hello! 👋\n');
  await socket.destroy();
});

server.listen(3000, '127.0.0.1', () => {
  console.log('Server is listening on port 3000...');
});

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

bstr - 一个字节字符库

示例:检测无效的 UTF-8

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

$ mkdir badutf8
$ cd badutf8
$ touch main.rs
$ cargo init --bin
$ cargo add anyhow bstr termcolor

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

/// Write each byte in the slice in its hexadecimal form,
/// and with bold coloring.
fn write_invalid_utf8<W: WriteColor>(
    mut wtr: W,
    slice: &[u8],
) -> io::Result<()> {
    use termcolor::{Color, ColorSpec};

    let mut color = ColorSpec::new();
    color.set_fg(Some(Color::Red)).set_bold(true);
    wtr.set_color(&color)?;
    for &byte in slice.iter() {
        write!(wtr, r"\x{:X}", byte)?;
    }
    wtr.reset()?;
    Ok(())
}

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

use std::io::{self, Write};

use bstr::{io::BufReadExt, ByteSlice};
use termcolor::{ColorChoice, WriteColor};

/// Usage:
///   badutf8 < stdin
///   foo ... | badutf8
fn main() -> anyhow::Result<()> {
    let mut bufrdr = io::BufReader::new(io::stdin().lock());
    let mut wtr = termcolor::StandardStream::stdout(ColorChoice::Auto);
    let mut lineno = 0;
    bufrdr.for_byte_line(|mut line| {
        lineno += 1;
        if line.is_utf8() {
            return Ok(true);
        }
        write!(wtr, "{}:", lineno)?;
        loop {
            let (ch, size) = bstr::decode_utf8(line);
            if size == 0 {
                break;
            } else if ch.is_some() {
                wtr.write_all(&line[..size])?;
            } else {
                write_invalid_utf8(&mut wtr, &line[..size])?;
            }
            line = &line[size..];
        }
        write!(wtr, "\n")?;
        Ok(true)
    })?;
    Ok(())
}

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

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

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

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

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


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

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页