前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Rust日报】2019-09-24 Rust小程序为何会卡顿?

【Rust日报】2019-09-24 Rust小程序为何会卡顿?

作者头像
MikeLoveRust
发布2019-09-27 17:16:32
9300
发布2019-09-27 17:16:32
举报
Graphlib发布0.5.0版本

Graphlib是一个为图数据结构提供通用且易于使用的API的rust图形库,它的API与std::collections中的其他数据结构相似,它是为了在Purple协议中使用而构建的。

更新日志:

  • 现在可以在使用dot功能的时候标记图像顶点。
  • 添加了Graph::map() API,该API将Graph <T>映射到了Graph <E>

前往GitHub了解更多信息

Purple协议官方Rust已经部署

Purple是一种高度可扩展的通用去中心化分类账协议,最先进的算法和架构设计。Purple有可能达到每秒处理数以千计的事务之高效率,这或将推动去中心化分类账技术的主流应用。

Purple协议对其支持的应用程序类型是未知的,他支持的应用程序可以是任何东西,从没有属性的简单的已发行资产到成熟的去中心化保险单或KYC。

但目前这个协议仍然是实验性质的,还需要在一个大型网络上进行压力测试之后才能确定其是否能稳定使用。

前往GitHub了解更多

Ergo-pin 0.1发布

ergo-pin 21 是一个提供更符合人体工程学的堆栈固定API的实验。当前的主要用例是在异步函数中,但对于std::pin::PinAPI的其他用例(例如不稳定生成器特征的使用等)也很有用。

使用ergo-pin,您只需在一个项目上应用该属性,即可在该项目内使用 PIN! 宏来连接一切表达式:

代码语言:javascript
复制
fn get_reader() -> impl futures::io::AsyncRead + !Unpin { ... }
fn get_stream() -> impl futures::stream::Stream<Item = u32> + !Unpin { ... }

#[ergo_pin]
async fn foo() -> io::Result<[u8; 4]> {
    let mut buffer = [0; 4];
    pin!(get_reader()).read_exact(&mut buffer).await?;
    buffer
}

#[ergo_pin]
async fn bar() {
    let mut stream = pin!(get_stream());
    while let Some(value) = stream.next().await {
        dbg!(value);
    }
}

点击这里了解更多

Rust小程序为何会卡顿?

观察一个用Rust和Kotlin编写的小程序,为何Rust版本会比Kotlin的慢?主要原因就是分配了很多新的Vecs。想要提速的第一部是使用预定大小初始化Vecs,下一步是不使用Vecs,而是通过使用其他数据结构(例如Iterator)或使用预分配的缓冲区来优化这些分配。最后,进行一些格式上的修正以及一些细微的更改(例如使用u32代替usize来实现)等。

结果新版本并不完美,但至少解决了主要问题,以下是测量反映出来的结果:

代码语言:javascript
复制
// KOTLIN (JVM), Windows 10
Running Movegen depth=7 ...
319406385 // "Checksum", to make sure both programs are correct
Time: 8424ms

// RUST, Windows 10, built with cargo build --release
>>> Starting movegen...
319406385
<<< Finished. Elapsed: 16s 895ms

// KOTLIN (JVM), Ubuntu (different machine)
Running Movegen depth=7 ...
319406385
Time: 7285ms

// RUST, Ubuntu
>>> Starting movegen...
319406385
<<< Finished. Elapsed: 8s 163ms

// Windows, depth = 8
Kotlin 70s 70ms vs Rust 139s 403ms

// Ubuntu, depth = 8:
Kotlin 65s 222ms vs Rust 65s 554ms
render: 基于JSX的安全类型模板

render本身是一个特征、结构和宏的组合,它们统一并增强了构成树形数据结构的体验,最适合HTML和XML渲染,但也可以与其他例如ReasonML的Pastel终端颜色库一起使用。

前往GitHub了解更多

actix-web 修饰符 decorator

开源代码 https://github.com/gothame/rflask

两个宏可为您减少两行代码。

代码语言:javascript
复制
use actix_web::{web, App, HttpRequest, HttpServer, Responder};
use awf_help::{config, route,route_res, ServiceFactory};
#[route(GET, "/")]
fn greet(req: HttpRequest) -> String {
    let name = req.match_info().get("name").unwrap_or("World");
    format!("Hello {}!", &name)
}
struct Hello{
}
#[route_res("/api/auth")]
impl Hello {
    fn get(req: HttpRequest) -> String {
        format!("get Hello !")
    }
    fn post(req: HttpRequest) -> String {
        format!("post Hello !")
    }
}
fn main() {
        HttpServer::new(|| App::new().configure(config))
        .bind("127.0.0.1:8000")
        .expect("Can not bind to port 8000")
        .run()
        .unwrap();
}
Ndarray 0.13 发布

经历了10个月,他的最新版本终于发布上了crates.io。

ndarray为通用元素和数字提供n维数组,其实质与Python的NumPy类似。

新增功能:

集成 rayon 支持:将yanon支持移入Crate。可以从数组运行并行迭代器,并行化Zip原语,以对多个数组或其他NdProducers进行锁步迭代。

Raw 视图:如果ArrayViewMut类比于&mut T,则新的RawArrayViewMut类似于* mut T,并作为数组视图。这对于我们的内部组件来说是一个有用的低级原语,它将帮助我们编写与正在开发的不安全代码准则兼容的Rust程序。

Approx 支持:ndarray现在支持更灵活的近似比较。

改良 azip!() 语法:azip是用于在多个数组或NdProducers上编写锁步循环的宏,现在它的语法与通常的for循环更相似。

更多升级:新方法.as_standard_layout() 新数组存储类型CowArray 新方法.mean() 运行时能够检测到的SIMD支持的matrixmultiply

前往GitHub了解更多

IntelliJ Rust更新日志

https://intellij-rust.github.io/2019/09/23/changelog-106.html

DataFusion 0.15.0 支持并行查询操作

https://andygrove.io/2019/09/datafusion-0.15.0-release-notes/


From 日报小组 @Lance

日报订阅地址:

独立日报订阅地址:

  • Telgram Channel
  • 阿里云语雀订阅
  • Steemit
  • GitHub

社区学习交流平台订阅:

  • Rust.cc论坛: 支持rss
  • Rust Force: 支持rss
  • 微信公众号:Rust语言学习交流
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Graphlib发布0.5.0版本
  • Purple协议官方Rust已经部署
  • Ergo-pin 0.1发布
  • Rust小程序为何会卡顿?
  • render: 基于JSX的安全类型模板
  • actix-web 修饰符 decorator
  • Ndarray 0.13 发布
  • IntelliJ Rust更新日志
  • DataFusion 0.15.0 支持并行查询操作
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档