其他分享
首页 > 其他分享> > 【Rust日报】2020-01-13 用rust编写的最小系统兼容服务管理器 : rustysd 更

【Rust日报】2020-01-13 用rust编写的最小系统兼容服务管理器 : rustysd 更

作者:互联网

用rust编写的最小系统兼容服务管理器 : rustysd 更新

Rustysd是一个服务管理器,复制系统行为一部分配置。它着重于服务管理器的核心功能。因此,rustysd提供的功能数量很少。如果使用musl和strip'ed构建二进制文件,则二进制文件可能会很小,但通常rust会生成相对较大的二进制文件。

这意味着只要服务知知悉rustysd可以读取systemd单元文件(的一部分)并像运行systemd一样运行它们。由于rustysd不需要是PID1,因此它可以为不使用systemd的Linux发行版以及FreeBSD提供此功能(现在还未经测试其他BSD)。另外,它可以在docker中用作PID1,因此您可以运行需要由systemd在容器中运行的服务。

rustysd的下一个目标是:

项目仓库地址: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迁移至 tokio 的消息。

git-poly:用rust编写的极简multi repo工具

帮助越跨50多个git仓库进行开发更加轻松的工具。这是一个简单、轻巧的工具,可并行处理许多git repos。

以下项目与本项目处于同一位置:


标签:rustysd,13,管理器,get,self,u64,RDBC,fn
来源: https://blog.51cto.com/u_15127605/2764563