fluent-uri:一个快速、简单和严格的URI解析器 Announcing fluent-uri: a fast, easy and strict URI parser
简介
一个严格遵守IETF
RFC 3986和RFC 6874的Rust URI解析器。
特性
- 快速:零拷贝解析,据观察,比Rust中常见的URI解析器快2-25倍;
- 简单:精心设计和文档良好的API;
- 严格:解析RFCs中定义的所有可能的URI,并拒绝其他任何东西。
rename-future: 支持无dyn或box的命名Future rename-future: Name anonymous Future from async fn without dyn or Box!
关于rename-future
由于当前编译器不支持关联类型的命名Future(解决命名impl Trait的
type_alias_impl_trait
特性还未稳定),想自定义命名Future需要依赖box和dyn特性;rename-future
提供了一种解决命名impl Future的思路:impl Service for AsyncFnService {
type Response = ();
type Error = ();
type Future = FooAsyncFnFuture;
// simply use renamed Future! no extra costs!fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll> {
Poll::Ready(Ok(()))
}fn call(&mut self, req: Request) -> Self::Future {
foo()
}
}#[rename_future(FooAsyncFnFuture)]
async fn foo() -> usize {
10
}
实现原理
#[rename_future(AsyncFnFuture)]
async fn async_fn() -> usize {
10
}
宏展开后生成代码如下:
pub const fn __internal_async_fn_sof(_: &F) -> usize
where
F: Fn() -> Fut,
{
std::mem::size_of::()
}
pub const fn __internal_async_fn_aof(_: &F) -> usize
where
F: Fn() -> Fut,
{
std::mem::align_of::()
}
struct AsyncFnFuture(
(
[u8;
__internal_async_fn_sof::<_, _>(&__internal_async_fn)],
rename_future::Align<{ __internal_async_fn_aof::<_, _>(&__internal_async_fn) }>,
),
std::marker::PhantomData<()>,
std::marker::PhantomPinned,
);
async fn __internal_async_fn() -> usize {
10
}
fn async_fn() -> AsyncFnFuture {
impl std::future::Future for AsyncFnFuture {
type Output = usize;
fn poll(
self: std::pin::Pin<&mut Self>,
cx: &mut std::task::Context<'_>,
) -> std::task::Poll {
fn call_poll<__T, __Q, __F>(
_: &__T,
fut: std::pin::Pin<&mut __F>,
cx: &mut std::task::Context<'_>,
) -> std::task::Poll<__F::Output>
where
__T: Fn() -> __Q,
__Q: std::future::Future
注意
这个项目还没有经过很好的测试!不要在生产代码中使用这个库!项目地址:https://github.com/ArtBlnd/rename-future
Rust的动态语言扩展? Dynamic language extensions for Rust?
C语言程序员使用Lua来扩展他们应用程序的功能,Rust可以使用哪些类似的语言?
以下是一个可嵌入Rust代码中的脚本语言的汇总列表:
https://arewegameyet.rs/ecosystem/scripting/
mlua 0.8.0-beta.1: 首个支持Roblox Luau的版本 Announcing mlua 0.8.0-beta with Roblox Luau support
我很高兴地宣布第一个支持Roblox Luau的mlua 0.8.0-beta.1版本。
mlua为所有Lua版本(5.1-5.4)提供了统一的高级接口,包括LuaJIT和现在的Luau,并通过
feature
flags在它们之间进行简单切换。Luau支持只在vendored模式下工作(不需要vendored特性标志),并提供所有关键的mlua特性,包括async/await和userdata值(通过仿真它们)。
同时,mlua实现了加载Luau模块的
require
函数,因为标准实现中没有这个功能。唯一值得注意的缺失功能是只读表和沙盒功能,这些功能将在下一个版本中得到支持。简单使用:
use mlua::prelude::*;
fn main() -> LuaResult<()> {
let lua = Lua::new();
let map_table = lua.create_table()?;
map_table.set(1, "one")?;
map_table.set("two", 2)?;
lua.globals().set("map_table", map_table)?;
lua.load("for k,v in pairs(map_table) do print(k,v) end").exec()?;
Ok(())
}
rs-lisp:一个用Rust编写的小型lisp解释器 Tiny lisp interpreter
使用:
cargo run [example.lisp]
项目地址:https://github.com/ktfth/rs-lisp
【python|【Rust日报】2022-03-22 fluent-uri(一个快速、简单和严格的URI解析器)】From 日报小组 odd-cat
社区学习交流平台订阅:
Rust.cc 论坛: 支持 rss
微信公众号:Rust 语言中文社区
推荐阅读
- java|【Rust日报】2022-03-21 Firefox 现在约 10% 的代码为 Rust
- c++|【Rust日报】2022-03-23 RustSBI软件发布v0.2.2版本
- java|【Rust日报】2022-01-28 Rust 编程,2022 年的展望
- java|【Rust日报】2021-12-19 Foundry(以太坊应用程序开发工具包)
- 嵌入式|【Rust 日报】2021-11-21 The RustFest Global - Rust in Arts
- 嵌入式|【Rust日报】2021-11-14 一个开源的基于Rust和Flutter的Notion替代产品
- OpenCV实战|OpenCV 图像分割--Kmean聚类
- Python从入门到精通|【Python 百练成钢】分解质因数、龟兔赛跑、时间转换、完美的代价、芯片测试
- Python从入门到精通|【Python 百练成钢】卡片游戏、铁轨问题、移动小球