【Rust日报】2022-03-22 fluent-uri:一个快速、简单和严格的URI解析器
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,并拒绝其他任何东西。
项目地址:https://github.com/yescallop/fluent-uri-rs
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<Request> 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<Result<(), Self::Error>> {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, Fut>(_: &F) -> usize
whereF: Fn() -> Fut,
{std::mem::size_of::<Fut>()
}
pub const fn __internal_async_fn_aof<F, Fut>(_: &F) -> usize
whereF: Fn() -> Fut,
{std::mem::align_of::<Fut>()
}
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<Self::Output> {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<Output = __F::Output>,__F: std::future::Future,{let fut: std::pin::Pin<&mut __Q> = unsafe { std::mem::transmute(fut) };fut.poll(cx)}call_poll::<_, _, _>(&__internal_async_fn, self, cx)}}unsafe { std::mem::transmute(__internal_async_fn()) }
}
注意
这个项目还没有经过很好的测试!不要在生产代码中使用这个库!
项目地址: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
From 日报小组 odd-cat
社区学习交流平台订阅:
Rust.cc 论坛: 支持 rss
微信公众号:Rust 语言中文社区
【Rust日报】2022-03-22 fluent-uri:一个快速、简单和严格的URI解析器相关推荐
- 50行代码实现的一个最简单的基于 DirectShow 的视频播放器
本文介绍一个最简单的基于 DirectShow 的视频播放器.该播放器对于初学者来说是十分有用的,它包含了使用 DirectShow 播放视频所有必备的函数. 直接贴上代码,具体代码的含义都写在注释中 ...
- 使用ANTLR做一个简单的Python SQL语法解析器 - 推酷
使用ANTLR做一个简单的Python SQL语法解析器 - 推酷 使用ANTLR做一个简单的Python SQL语法解析器 - 推酷 posted on 2016-11-14 13:11 lexus ...
- 建立一个最简单的FLV和MP4播放器
建立一个最简单的FLV和MP4播放器 在Flash CS3中建立一个Flash文档后 选中脚本面板 利用NetConnection和NetStream即可完成功能 代码如下: var nc:NetCo ...
- 人工智能 | ShowMeAI资讯日报 #2022.06.22
ShowMeAI日报系列全新升级!覆盖AI人工智能 工具&框架 | 项目&代码 | 博文&分享 | 数据&资源 | 研究&论文 等方向.点击查看 历史文章列表, ...
- 目标检测第3步:如何在Windows 10系统下安装CUDA(更新时间2022.03.22)
(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 目录 一.自检 1.查看PC是否有NVIDIA的独立显卡 2.查看自己NVIDIA独立显卡是否支持CUD ...
- Atheros CSI Tool环境搭建之路由器配置记录---2022/03/22
Atheros CSI Tool路由器配置 路由器刷入OpenWRT固件 准备工作: 刷入步骤 官网对于安装openwrt的指导 硬件准备 安装OpenWRT Install from binary ...
- 用HTML+CSS做一个漂亮简单的个人网页详细解析
预览地址: https://static-32f9498d-9b46-413f-a441-4d6984c2edb5.bspapp.com/ Documenthttps://static-32f9498 ...
- 目标检测第5步:如何在Windows 10系统下,搭建YOLOv5(5.0)环境?保姆级,没有人比这个更详细了(更新时间2022.3.22)
(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 目录 一.安装Anaconda或Miniconda 二.安装CUDA 三.安装cuDNN 四.安装Pyt ...
- 【Rust日报】2021-10-05 Mimic: 一款用Rust语言编写的命令行Gameboy模拟器
Mimic: 一款用Rust语言编写的命令行Gameboy模拟器 Mimic: A Gameboy emulator written in Rust that can be played on the ...
- rust nom 一个文本解析器的使用
rust nom 一个文本解析器的使用 简述 版本 早期版本 新的改变 常用的几个解析器.组合器 后续 简述 nom, 是 一个Rust 的文本解析器库,它的运行消耗低.速度快,针对一些文本的解析非常 ...
最新文章
- Zabbix 3.2.6通过ODBC监控MySQLOracle
- python cocos2d菜鸟教程_(译)cocos2d菜单教程:第一部分
- SAP销项税多科目配置
- python怎么按键开始与停止_python 图形化开始与停止功能的实现
- 如何在ORACLE CLOUD中创建和访问容器集群丨内附官方文档链接
- 设计模式(一)单例模式的七种写法
- 阿里大数据中台12年建设经验的精华总结!一次性说清!
- NSCharacterSet
- 接口规范 6. 查看在线用户
- php和java的语法区别吗_php语法同java语法的基本区别(实例项目需求,php才能熟)...
- 网络安全中的恶意软件
- 小黑笔记:transe模型
- C语言的应用之单片机学习
- 中国占三分之一!CBinsights世界最新独角兽排名出炉
- 索尼录音笔怎么导出录音内容_搜狗AI走向产业改造:纵横捭阖术与录音笔的新声态...
- Debug Error :abort() has been called 报错原因及解决方法
- 服务器Ping值代表着什么?
- 数据结构与算法36-联接最大数
- 如何让linux自动调整时间同步,如何让Linux时间与internet时间同步(CentOS)?
- vim加载systemverilog语法高亮
热门文章
- TFT_eSPI使用
- PHP_VERSION的意思,php指的是_PHP_VERSION指什么
- c语言java是女朋友_程序猿选女朋友 你希望她是你的什么星座代码?
- vue-devtools安装教程(简单易上手)还不用下载
- 印章管理系统java_基于jsp的文章管理系统-JavaEE实现文章管理系统 - java项目源码...
- Servlet的生命周期(简单易懂)
- python打印进度条(4行代码简单使用)
- 微信小程序开发常用快捷键
- 人脸检测——MTCNN学习笔记
- 基于PHP的支付宝H5、APP支付