< 返回版块

ChaosBot 发表于 2018-10-26 22:20

Tags:rustnews

「Rust每日新闻」调查问卷

还没有提交问卷的小伙伴,来填写一下问卷。

回头会把统计结果给大家分享,目前的统计结果很有意思,但是样本有点少,需要大家的配合。到时候把结果放出来,大家也可以对国内的Rust社区有一个了解。

来填问卷喽


「官方」Rust 1.30 稳定版发布

一大片Rust 2018 edtion功能登陆了stable。

简要:

  • Procedural Macros 新的过程宏功能发布。之前的过程宏只能写派生属性,在1.30稳定版里,过程宏也可以写像函数一样可以调用的宏了,也可以把它叫Bang(因为感叹号)宏(Rust源码里也用Bang来区分)。
  • 从第三方导入宏,无需使用#[macro_use]属性了,而是直接使用use
  • 模块系统改进:引入第三方库的现在不需要使用"::"前缀了,库名可以直接作为前缀。而"::"则代表模块相对路径的外层路径。同时,增加了crate关键字,代表当前包的根路径。
  • r#原生标识符, 可以使用r#前缀,将关键字作为函数名来使用。这个语法的意义在于,使用FFI的时候,可以使用和Rust关键字、保留字重名的函数。
  • 可以使用no_std来构建应用程序了。之前只能构建库,因为#[panic_handler]属性已经稳定,可以用它来处理运行时panic了。
  • #[used]属性稳定,用来阻止编译器优化静态变量。

更多详细

Read More


「社区」大家还记得Atom吗?

Atom 1.32发布,携带了新的Tree-sitter解析系统,用来改进语法的高亮显示和代码折叠功能。并且Atom 1.33 Beta版将内置对Rust编程语言的支持。

Read More


「小工具」cargo-with

cargo的子命令,可以方便开发者使用cargo配合其他工具,比如gbd、rr等执行build

cargo-with


「讨论」大型Rust项目的可扩展问题

85000行代码,一共分了48个crate,而且大多数crate还是包含了测试的可执行文件。现在这些可执行文件的总大小正以平方递增,目前有4.2G可执行文件。现在这些可执行文件严重拖累了Gitlab CI,因为它们必须在构建和测试阶段通过网络进行复制。作者现在不知道该如何处理这个问题?

可以关注下reddit讨论贴,看看后续。

reddit讨论贴


缓存Docker build

作者在Docker上使用Rust,但是他的Dockerfile文件是这样配置的:

COPY . /opt/my_build_dir
RUN cargo build

所以当他每次修改代码以后,重新构建docker,都需要重新下载依赖包,时间会占用很久。所以他想找一个办法解决这个问题。

他考察了Docker的构建原理,这里使用COPY,是告诉docker,整个my_build_dir如果有任何变化,请复制数据。Docker是分层缓存,COPY以后已经算是新的目录了,之前缓存的已经无效。所以build的时候必须重新下载一遍依赖。

但是作者需要的只是在Cargo.toml文件修改之后再重新构建。所以他对Dockerfile文件做了一些更改:

# We'll get to what this file is below!
COPY dummy.rs /your_work_dir
# If this changed likely the Cargo.toml changed so lets trigger the
# recopying of it anyways
COPY Cargo.lock /your_work_dirCOPY Cargo.toml /your_work_dir
# We'll get to what this substitution is for but replace main.rs with
# lib.rs if this is a library
RUN sed -i 's/src/main.rs/dummy.rs/' Cargo.toml
# Drop release if you want debug builds. This step cache's our deps!
RUN cargo build --release
# Now return the file back to normal
RUN sed -i 's/dummy.rs/src/main.rs/' Cargo.toml
# Copy the rest of the files into the container
COPY . /your_work_dir
# Now this only builds our changes to things like src
RUN cargo build --release

然后在crate根目录创建一个dummy.rs文件,里面只包含下面代码:

fn main() {}

仅此而已,它只是为了让Docker构建一遍,得到第三方crate依赖的缓存,而不是构建正式代码。

魔法主要是由sed命令来激活的,该命令先用dummy.rs替换main.rs掉,把依赖编译完,在继续用此命令,把正式的main.rslib.rs替换回来,然后再复制src中的其他文件。通过这样的构建,就可以让Docker缓存那些第三方库的依赖了,除非是Cargo.toml文件发生变化。

群友指出,可以使用cargo fetch命令来下载依赖,代替dummy.rs这种方式。

Read More


每日新闻订阅地址:

欢迎通过GitHub issues投稿。

评论区

写评论

还没有评论

1 共 0 条评论, 1 页