分类 Rust 下的文章

mbioq_rust_refcell_ref.png
本文以RcRefCell为例,讨论Rust中的SendSync是如何保证线程安全的。

基本概念

SendSync位于标准库std::marker模块中。它们属于标记trait,也就是说,它们没有方法,也没有内置任何功能。它们的作用是:

  • 如果类型T实现了Send,则将类型T的值传递给另一个线程不会导致数据争用(data rases)或其他不安全性
  • 如果类型T实现了Sync,则将类型T的引用&T传递到另一个线程中不会导致数据争用或其他不安全性(T: Sync暗含着&T: Send

也就是说,Sync与类型跨多个线程共享时有关,而Send则讨论类型被move到另一个线程的行为方式。

Read more...


环境准备

安装Rust的方式有很多种,最简单的方式是使用官方提供的rustup工具安装。如果是Linux或者Mac直接执行curl https://sh.rustup.rs -sSf | sh即可,如果是windows,MSVC架构 需要安装Visual C++ Build Tools 2013 或者高于2013的版本。(注意:笔者windows下已切换为gnu架构) 使用rustup工具可以很容易的在stablebetanightly版本中间进行切换,同时可以方便的升级rust。rustup会安装rustc,cargo,rsutup和其他的基本工具到Cargo的bin目录下,如果使用Linux或者Mac,需要将$HOME/.cargo/bin 加入到PATH中,如果使用window,则需要将%USERPROFILE%.cargo\bin添加的path中。以后使用cargo install 安装工具的时候也会默认安装在这个目录。更多信息可以参考rustup项目。 安装成功之后可以通过rustc --version 或者rustc -v 验证安装是否成功。

Hello World

Read more...


Rust 提供了外部语言函数接口(Foreign Function Interface,FFI)到 C 语言库。外部语言函数必须声明在一个 extern 代码块,且该代码块要带有一个包含外部语言库名称的 #[link] 属性

Read more...