Inspirer

文章列表

理解 Rust 2018 edition 的两个新关键字 —— impl 和 dyn

Rust 2018 edition 虽然实际发布时间还没到(本文开始写的时间是 18 年七月底),但是有些 2018 edition 的特性已经随着 Rust 的新版本发布放出,这些已经进入 stable 版的特性必然是应当了解并学习的。其中就有两个本文所要讨论的关键字 —— impldyn

最先出现的 impl 是大家已经熟悉的关键字,不过这次这个关键字除了用于表示实现一个 Trait,还有新的意义,即表达一个既存类型(Existential types),我们可以理解为一个实现了一个特征的 具体对象

官方原文介绍:impl Trait https://rust-lang-nursery.github.io/edition-guide/2018/transitioning/traits/impl-trait.html

impl Trait is the new way to specify unnamed but concrete types that implement a specific trait. There are two places you can put it: argument position, and return position.

trait Trait {}

// argument position
fn foo(arg: impl Trait) {
}

// return position
fn foo() -> impl Trait {
}

不过其意义是什么?与我们另一个要介绍的 dyn Trait 又有什么关系?下面我们正式开始。

Rust 实现动态库加载和基于此功能实现的插件管理

最近开发后端 UCenter 服务,考虑到该服务核心逻辑变动相对少,稳定性要求高,单点处理能力要强,且 IO 瓶颈较少(大多缓存),有较多的校验和加解密工作,因此需要使用性能更为强劲的语言,最终考虑使用 Rust(无 GC、内存安全、性能与 C/C++ 差距不明显)以及其最近风头正劲的基于 Actor 模型的 Web 框架:Actix-web。对于框架和语言的介绍我会另起文章,先说说这个用户中心服务。

用户中心服务提供平台下属多个应用的统一授权工作,无论是第三方登录授权(如基于 OAuth 的授权或对外部以 OAuth 支持)、SSO(Single Sign-On)以及解决跨应用用户数据共享、互通等。虽然服务核心逻辑十分稳定,但对于各类子应用接入会有较多的拓展需求,例如不同应用的专用数据表的访问、多协议适配等。对于动态语言或存在虚拟机的语言而言,动态库加载相对简单,但对于 Rust 这种静态和无(或极小)运行时语言,拓展则相对困难。不过 Rust 提供了 FFI(Foreign Function Interface)支持,我们则利用这个实现我们的需求。

编程语言

各种编程语言的学习笔记、资料等,归纳了我个人学习各种语言时得到的经验和教训(所谓自己挖坑自己填)。

分类