用rust编写的最小系统兼容服务管理器 : rustysd 更新
Rustysd是一个服务管理器,复制系统行为一部分配置。它着重于服务管理器的核心功能。因此,rustysd提供的功能数量很少。如果使用musl和strip'ed构建二进制文件,则二进制文件可能会很小,但通常rust会生成相对较大的二进制文件。
这意味着只要服务知知悉rustysd可以读取systemd单元文件(的一部分)并像运行systemd一样运行它们。由于rustysd不需要是PID1,因此它可以为不使用systemd的Linux发行版以及FreeBSD提供此功能(现在还未经测试其他BSD)。另外,它可以在docker中用作PID1,因此您可以运行需要由systemd在容器中运行的服务。
rustysd的下一个目标是:
- 成为一个很好的工具
- 成为rustysd在VM中充当init系统
- 开发一个测试套件以能够捕获回归/错误的功能
项目仓库地址:https://github.com/KillingSpark/rustysd/tree/v0.1.0
用于Rust的Cranelift后端
目前项目正在进行中的工作是为在Cranelift 上构建的Rust创建后端,这有望大大减少调试编译耗时。
除了Rustc测试套件中的57个测试之外,其他所有测试都已通过,并取得惊人的进步。
几乎所有这些工作都是由bjorn3一手完成的。
详情前往项目GitHub仓库查看。
Rust数据库连接性(RDBC)更新
同时支持面向行和面向列的数据实际上非常简单。RDBC API应该支持将成批数据提取到实现RowSet
特征的行集中,从而提供面向行和面向列的访问。
因为列中的所有值都具有相同的数据类型,所以我们可以使用类型安全的特征来访问这些值。
pub trait ColumnAccessor<T> {
fn get(&self, i: u64) -> Result<Option<T>>;
}
行通常包含混合类型,因此这里我们将在方法而不是特征上指定泛型。
pub trait RowAccessor {
fn get<T>(&self, i: u64) -> Result<Option<T>> where Self: Sized;
}
RowSet
特征示例
pub trait RowSet {
/// get meta data about this row set
fn meta_data(&self) -> Result<Box<dyn RowSetMetaData>>;
/// Get an accessor for a row containing mixed types
fn get_row(&self, i: u64) -> Result<Box<dyn RowAccessor>>;
/// Get a column as a type-safe accessor
fn get_column<T>(&self, i: u64) -> Result<Box<dyn ColumnAccessor<T>>>;
}
支持的数据RowSet
将是面向行的或面向列的,始终可以同时以行和列的形式访问数据,但是其中一种方法肯定比另一种方法更有效。对于大多数用例来说这可能并不太重要,但是在某些用例中却很重要,因此元数据应公开有关本机格式的信息。
pub trait RowSetMetaData {
fn row_oriented(&self) -> bool;
fn num_rows(&self) -> u64;
fn num_columns(&self) -> u64;
fn column_name(&self, i: u64) -> String;
fn column_type(&self, i: u64) -> DataType;
}
RDBC只是底层数据访问和查询执行API。它不打算取代像Diesel这样的ORM,尽管很快将有可能使用RDBC代替Diesel构建应用程序。
前往博客了解有关RDBC连接与RDBC迁移至东京的消息。
git-poly:用rust编写的极简multi repo工具
帮助越跨50多个git仓库进行开发更加轻松的工具。这是一个简单、轻巧的工具,可并行处理许多git repos。
以下项目与本项目处于同一位置:
-
git repo
-
git subtree
-
git slave
-
git submodule
前往Gitlab了解项目详情。
From 日报小组 @Lance
日报订阅地址:
独立日报订阅地址:
社区学习交流平台订阅:
评论区
写评论还没有评论