专栏首页Rust语言学习交流【Rust日报】 2019-11-12 揭开异步Rust的神秘面纱

【Rust日报】 2019-11-12 揭开异步Rust的神秘面纱

由Mozilla Servo提供的CSS 由原本的librsvg支持升级到对Rust的支持

经过大量的重构之后,librsvg现在可以在Rust中完成所有CSS解析和匹配,无需使用libcroco。另外,CSS引擎来自Mozilla Servo,因此它应该能够处理比librsvg以前复杂得多的CSS。

介绍

第一次在librsvg中引入CSS解析是2002年。为了支持当时CSS2的一小部分,它的体积被设计的尽可能的小。

Librsvg处理CSS样式表的方式不是逐行进行语法分期,取而代之的是将各个部件组成一个整体。不知何时起,g_strsplit()成为了你最好的朋友。基本的解析算法是打开一个样式表,如下所示:

rect { fill: blue; }

.classname {
    fill: green;
    stroke-width: 4;
}

从librsvg在以往遇到的各种问题中,开发团队得知“ CSS的支持太有限”,感觉使用CSS功能的SVG要么是手写的,要么是由诸如数据绘图软件之类的自定义程序自动生成的。插图程序倾向于在每个SVG元素中明确列出所有样式属性,并且不使用CSS。

但在librsvg 2.47.1中将不再需要libcroco!

详细信息前往博客网页查看。

async-std 1.0发布

async-std是Rust的标准库到异步世界的移植。它运行速度十分快,使用体验也更良好。

async-std1.0最终发布。正如开发者在第一个公告博客中所承诺的那样,稳定版本与Rust 1.39发行版相吻合,该发行版增加了async/.await。我们要感谢周围的活跃社区async-std帮助发布了该版本。

async-std的1.0版本指示所有相关的API均已就绪,将来会在这些稳定的基础上增加功能。

前往博客网页了解更多。

推荐文章:揭开异步Rust的神秘面纱

本文章的目标读者是已经对Vantage Rust经验丰富,并且希望涉足异步生态系统中的程序员。

就像标题所示,这本书与其说是关于如何使用异步Rust,还不如说是试图对幕后工作原理有一个扎实的理解。有效的使用异步rust应该是一个自然而然地开始。

因此,我们将尝试回答由任何足够复杂的技术引起的常见基本问题:

  • 我们如何以及为什么要这样做?
  • 构成堆栈的层是什么?
  • 它们各自的作用是什么?
  • 他们以什么样的方式工作以及为什么需要这样的方式?
  • 它们如何配合在一起?
  • 这种方法的优点和缺点是什么?
  • 整体执行模型的语义是什么?
  • 内存中的所有内容如何表示?
  • etc...

在回答所有这些问题的方式上,我们会遇到很多抽象的问题,一开始看起来完全像是变魔术。

在阅读本书之后,人们将能够:A)深入研究任何任意复杂的异步代码库,B)悉知编译器可能向它们抛出的任何错误消息。

本文章英文全文前往GitHub查看。


From 日报小组 @Lance

日报订阅地址:

独立日报订阅地址:

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

社区学习交流平台订阅:

  • Rust.cc论坛: 支持rss
  • Rust Force: 支持rss
  • 微信公众号:Rust语言学习交流

本文分享自微信公众号 - Rust语言学习交流(rust-china)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 解析centos7.3的hostnamectl命令

        hostnamectl 是在 centos7以上版本 中新增加的命令,它是用来修改主机名称的,centos7 修改主机名称会比以往容易许多。

    孙杰
  • 史上最烂的项目:苦撑 12 年,600 多万行代码

    你见过最烂的项目,撑了多长时间才完蛋?六个月?一年?今天介绍的这个奇葩项目,不但一开始就烂得透透的,还硬撑了12年多,直到项目负责人被逮起来丢进监狱才完事。

    五分钟学算法
  • 动态规划问题-LeetCode 120(动态内存的传递,函数指针,DP)

    在C++中,函数声明形式为:返回值 函数名称(参数类型 参数名称, 参数类型 参数名称) 其中参数名称可以省略不写,记得最后加分号!

    算法工程师之路
  • C++打造迷宫游戏,直接上代码

    题目: 通过让游戏角色自动寻找迷宫出口,走出迷宫,来练习C++面向对象之封装的基础知识。迷宫图如下所示,其中X表示墙。

    诸葛青云
  • 面试官:new一个对象有哪两个过程?

    Java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载。加载并初始化类完成后,再进行对象的创建工作。...

    Java技术栈
  • Layui 分页

    1、需要加载模块 laypage 2、 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <...

    用户5760343
  • 静默安装Oracle Database 18c

    系统环境:Oracle Linux 7(OL7) 一、首先设置主机名和ip,修改/etc/hosts (很简单,不赘述) 二、Oracle安装先决条件 执行自...

    孙杰
  • linux下的 lib文件的学习思考

    某日开发说,一台测试用虚机可以PING通SSH不能连了。运维同学就赶紧去查,SSHD_CONFIG配置文件都正确啊,一点错误都没有,那为什么呢?

    孙杰
  • Java 自定义 ClassLoader 实现 JVM 类加载

    为了能够实现类加载,并展示效果,定义一个Hello类,再为其定义一个sayHello()方法,加载Hello类之后,调用它的sayHello()方法。

    芋道源码
  • Linux防火墙iptables中mark模块分析及编写

    在linux系统中为了更好的实现网络流量的管理,使用了内核的mark来标识网络流量。这样造成了用户层再使用mark来标记多线负载,两种mark会互相覆盖,达不到...

    孙杰

扫码关注云+社区

领取腾讯云代金券