会员
众包
新闻
博问
AI培训
云市场
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
张伯雨
Powered by
博客园
博客园
|
首页
|
新随笔
|
联系
|
订阅
|
管理
2017年9月9日
高级主题
摘要: 外部函数接口在Rust中,通过外部函数接口 (foreign function interface) 可以直接调用C语言库:extern crate libc; use libc::size_t; #[link(name = "snappy")] extern { fn snappy_max_compressed_length(source_length: size_t) -> size...
阅读全文
posted @ 2017-09-09 18:00 张伯雨
阅读(274)
评论(0)
推荐(0)
编辑
编程范式
摘要: 编程范式Rust是一个多范式 (multi-paradigm) 的编译型语言。除了通常的结构化、命令式编程外, 还支持以下范式。函数式编程Rust使用闭包 (closure) 来创建匿名函数:let num = 5; let plus_num = |x: i32| x + num;其中闭包plus_num借用了它作用域中的let绑定num。如果要让闭包获得所有权, 可以使用move关键字:let ...
阅读全文
posted @ 2017-09-09 17:58 张伯雨
阅读(770)
评论(0)
推荐(0)
编辑
内存安全
摘要: Rust推崇安全与速度至上,它没有垃圾回收机制,却成功实现了内存安全 (memory safety)。所有权在Rust中,所有权 (ownership) 系统是零成本抽象 (zero-cost abstraction) 的一个主要例子。 对所有权的分析是在编译阶段就完成的,并不带来任何运行时成本 (run-time cost)。 默认情况下,Rust是在栈 (stack) 上分配内存,对栈上空间变...
阅读全文
posted @ 2017-09-09 17:48 张伯雨
阅读(1386)
评论(0)
推荐(0)
编辑
程序测试
摘要: 程序测试测试属性在测试函数前加上#[test]属性:#[test] fn it_works() { assert!(false); }其中assert!宏接受一个参数,如果参数为false,它会导致panic!。 运行cargo test命令,可见该测试失败。如果要反转测试失败, 可以加上#[should_panic]属性:测试模块在测试模块前加上#[cfg(test)]属性:测试目录对于...
阅读全文
posted @ 2017-09-09 17:01 张伯雨
阅读(210)
评论(0)
推荐(0)
编辑
模块系统
摘要: 模块系统Rust有两个与模块 (module) 系统相关的独特术语:crate和module, 其中包装箱 (crate) 与其它语言中的 libary 或者 package 作用一样。 每个包装箱都有一个隐藏的根模块,在根模块下可以定义一个子模块树, 其路径采用::作为分隔符。包装箱由条目 (item) 构成,多个条目通过模块组织在一起。定义模块使用mod关键字定义我们的模块:// in src...
阅读全文
posted @ 2017-09-09 16:25 张伯雨
阅读(243)
评论(0)
推荐(0)
编辑
控制结构
摘要: IfIf是分支 (branch) 的一种特殊形式,也可以使用else和else if。 与C语言不同的是,逻辑条件不需要用小括号括起来,但是条件后面必须跟一个代码块。 Rust中的if是一个表达式 (expression),可以赋给一个变量:let x = 5; let y = if x == 5 { 10 } else { 15 };Rust是基于表达式的编程语言,有且仅有两种语句 (stat...
阅读全文
posted @ 2017-09-09 15:59 张伯雨
阅读(280)
评论(0)
推荐(0)
编辑
基本语法
摘要: 变量绑定在Rust中,变量绑定 (variable bindings) 是通过let关键字声明的:let x = 5; let mut x = 5; let x: i32 = 5; let (a, b) = (3, 4);其中变量类型如i32一般都是可以省略的,因为Rust使用了类型推断 (type inference)。 Rust还通过模式匹配 (pattern matching) 对变量进行解...
阅读全文
posted @ 2017-09-09 11:49 张伯雨
阅读(435)
评论(0)
推荐(0)
编辑
Go-技篇第一 技巧杂烩
摘要: Go-技篇第一 技巧杂烩一句话技巧把你面向对象的大脑扔到家里吧,去拥抱接口。@mikegehard学习如何使用Go的方式做事,不要把别的的编程风格强行用在Go里面。@DrNic多用接口总比少用好。@evanphx拥抱这种简洁、并行、工整的语言。@francesc阅读官网golang.org上所有的文档,真是棒呆了。@vbatts别忘了用gofmt。@darkhelmetlive多读源代码。@DrN...
阅读全文
posted @ 2017-09-09 11:46 张伯雨
阅读(355)
评论(0)
推荐(0)
编辑
Go-技篇第二 命名规范
摘要: 优秀的命名优秀的命名应当是一贯的、短小的、精确的。所谓一贯,就是说同一个意义在不同的环境下的命名应当一致,譬如依赖关系,不要在一个方法中命名为depend,另一个方法中命名为rely。所谓短小,不必多言,当命名过长的时候,读者可能更关注命名本身,而忽视真正的逻辑内容。所谓精确,就是命名达意、易于理解首条经验声明位置与使用位置越远,则命名应当越长。骆驼命名法Go语言应该使用 MixedCa...
阅读全文
posted @ 2017-09-09 11:37 张伯雨
阅读(254)
评论(0)
推荐(0)
编辑