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解析器相关推荐

  1. 50行代码实现的一个最简单的基于 DirectShow 的视频播放器

    本文介绍一个最简单的基于 DirectShow 的视频播放器.该播放器对于初学者来说是十分有用的,它包含了使用 DirectShow 播放视频所有必备的函数. 直接贴上代码,具体代码的含义都写在注释中 ...

  2. 使用ANTLR做一个简单的Python SQL语法解析器 - 推酷

    使用ANTLR做一个简单的Python SQL语法解析器 - 推酷 使用ANTLR做一个简单的Python SQL语法解析器 - 推酷 posted on 2016-11-14 13:11 lexus ...

  3. 建立一个最简单的FLV和MP4播放器

    建立一个最简单的FLV和MP4播放器 在Flash CS3中建立一个Flash文档后 选中脚本面板 利用NetConnection和NetStream即可完成功能 代码如下: var nc:NetCo ...

  4. 人工智能 | ShowMeAI资讯日报 #2022.06.22

    ShowMeAI日报系列全新升级!覆盖AI人工智能 工具&框架 | 项目&代码 | 博文&分享 | 数据&资源 | 研究&论文 等方向.点击查看 历史文章列表, ...

  5. 目标检测第3步:如何在Windows 10系统下安装CUDA(更新时间2022.03.22)

    (请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 目录 一.自检 1.查看PC是否有NVIDIA的独立显卡 2.查看自己NVIDIA独立显卡是否支持CUD ...

  6. Atheros CSI Tool环境搭建之路由器配置记录---2022/03/22

    Atheros CSI Tool路由器配置 路由器刷入OpenWRT固件 准备工作: 刷入步骤 官网对于安装openwrt的指导 硬件准备 安装OpenWRT Install from binary ...

  7. 用HTML+CSS做一个漂亮简单的个人网页详细解析

    预览地址: https://static-32f9498d-9b46-413f-a441-4d6984c2edb5.bspapp.com/ Documenthttps://static-32f9498 ...

  8. 目标检测第5步:如何在Windows 10系统下,搭建YOLOv5(5.0)环境?保姆级,没有人比这个更详细了(更新时间2022.3.22)

    (请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 目录 一.安装Anaconda或Miniconda 二.安装CUDA 三.安装cuDNN 四.安装Pyt ...

  9. 【Rust日报】2021-10-05 Mimic: 一款用Rust语言编写的命令行Gameboy模拟器

    Mimic: 一款用Rust语言编写的命令行Gameboy模拟器 Mimic: A Gameboy emulator written in Rust that can be played on the ...

  10. rust nom 一个文本解析器的使用

    rust nom 一个文本解析器的使用 简述 版本 早期版本 新的改变 常用的几个解析器.组合器 后续 简述 nom, 是 一个Rust 的文本解析器库,它的运行消耗低.速度快,针对一些文本的解析非常 ...

最新文章

  1. Zabbix 3.2.6通过ODBC监控MySQLOracle
  2. python cocos2d菜鸟教程_(译)cocos2d菜单教程:第一部分
  3. SAP销项税多科目配置
  4. python怎么按键开始与停止_python 图形化开始与停止功能的实现
  5. 如何在ORACLE CLOUD中创建和访问容器集群丨内附官方文档链接
  6. 设计模式(一)单例模式的七种写法
  7. 阿里大数据中台12年建设经验的精华总结!一次性说清!
  8. NSCharacterSet
  9. 接口规范 6. 查看在线用户
  10. php和java的语法区别吗_php语法同java语法的基本区别(实例项目需求,php才能熟)...
  11. 网络安全中的恶意软件
  12. 小黑笔记:transe模型
  13. C语言的应用之单片机学习
  14. 中国占三分之一!CBinsights世界最新独角兽排名出炉
  15. 索尼录音笔怎么导出录音内容_搜狗AI走向产业改造:纵横捭阖术与录音笔的新声态...
  16. Debug Error :abort() has been called 报错原因及解决方法
  17. 服务器Ping值代表着什么?
  18. 数据结构与算法36-联接最大数
  19. 如何让linux自动调整时间同步,如何让Linux时间与internet时间同步(CentOS)?
  20. vim加载systemverilog语法高亮

热门文章

  1. TFT_eSPI使用
  2. PHP_VERSION的意思,php指的是_PHP_VERSION指什么
  3. c语言java是女朋友_程序猿选女朋友 你希望她是你的什么星座代码?
  4. vue-devtools安装教程(简单易上手)还不用下载
  5. 印章管理系统java_基于jsp的文章管理系统-JavaEE实现文章管理系统 - java项目源码...
  6. Servlet的生命周期(简单易懂)
  7. python打印进度条(4行代码简单使用)
  8. 微信小程序开发常用快捷键
  9. 人脸检测——MTCNN学习笔记
  10. 基于PHP的支付宝H5、APP支付