标签 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...

Published on by


环境准备

安装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...

Published on by


Published on by


关于聚类

聚类算法是这样的一种算法:给定样本数据Sample,要求将样本Sample中相似的数据聚到一类。有了这个认识之后,就应该了解了聚类算法要干什么了吧。说白了,就是归类。 
首先,我们需要考虑的是,如何衡量数据之间的相似程度?比如说,有一群说不同语言的人,我们一般是根据他们的方言来聚类的(当然,你也可以指定以身高来聚类)。这里,语言的相似性(或者身高)就成了我们衡量相似的量度了。在考虑存在海量数据,如微博上各种用户的关系网,如何根据用户的关注和被关注来聚类,给用户推荐他们感兴趣的用户?这就是聚类算法研究的内容之一了。 

Read more...

Published on by


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

Read more...

Published on by