这篇文章主要讲述了怎样使编译器生成更快的代码,使编译器本身运行得更快,使 Wasmtime 更快地实例化已编译的模块,并在模块运行后使 Wasmtime 的运行时尽可能高效。
ReadMore:https://bytecodealliance.org/articles/wasmtime-10-performance
来自 fermyon 官方博客的文章,介绍了 WebAssembly 现存的一些风险和应对方法:
Fermyon 的愿景是,在五年内,WebAssembly 将成为常态,而不是小众市场。新一波应用程序将能够利用 WebAssembly 的速度、安全性和组件模型。为了实现这一目标,我们每个人都可以发挥作用。
ReadMore:https://www.fermyon.com/blog/risks-of-webassembly
一个简单的例子。
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
示例:检测无效的 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