10 2020 档案
摘要:Source code: https://github.com/ChijinZ/VisFuzz Abstract 传统上模糊测试的一个瓶颈在于很难覆盖到被复杂的条件-比如magic number, 嵌套的条件所引导的程序支线,为此人们提出了白盒测试,然而即使这样,对复杂的条件的支持还是不够,比如ar
阅读全文
摘要:Reference Tufail Muhammad , Zahid Halim , Majid Ali Khan , Visualizing Trace of Java Collection APIs by Dynamic Bytecode Instrumentation, Journal of V
阅读全文
摘要:Function Pointers fn类型与Fn特性不一样,fn被称为function pointer,使用方法和Fn相似。但是在与C的FFI交互的时候,只能用fn。 fn add_one(x: i32) -> i32 { x + 1 } fn do_twice(f: fn(i32) -> i32
阅读全文
摘要:Fully Qualified Syntax 当多个traits和struct具有相同的方法名时,默认会调用直接实现给这个struct的方法,要调用Trait中重名的方法,最好直接使用traitname::method(...)的方式。尤其是如果只是trait中associated function
阅读全文
摘要:Placeholder Types 在trait定义中,可以使用Associated types在定义中放一些type placeholder,并用这些type placeholder作为返回值,参数等描述类型之间的关系。接着,trait的实现中就可以将这些type placehold设置为具体类型
阅读全文
摘要:Unsafe Unsafe能够绕开rust强调的内存安全保证(memory safety guarantees),Unsafe的五大功能是: 1. Dereference a raw pointer,获取一个裸指针对应的数据 2. 调用其他unsafe的代码 3. 获取或者修改可变的static变量
阅读全文
摘要:Rust中的Pattern能够包含以下内容: a) literal b)Destructured arrays, enums, structs, or tuples c) 变量 d) 通配符 e) placeholders 以下的都算是pattern: a) match Arms b) if let
阅读全文
摘要:继承/多态性 书中认为继承给子类分享了一些可能并不需要的代码,因此并不好。Rust中最接近继承/多态的是trait。 通过使用不同的Trait和Trait bound,可以达到类似接口的效果。我们可以要求一些参数/域实现了某种Trait而无需知道究竟这些参数/域是什么具体类型,这样的参数/域称之为T
阅读全文
摘要:使用线程来并行化任务一方面可以加快速度,避免因为IO等待耗费太久时间,另外一方面,也带来了资源竞争,死锁和潜在的难以复现的种种bug。不同的编程语言采取不同策略来生成管理调度线程,如果用户在编程语言中申请一个线程,就通过系统接口获取系统的一个线程,那么就称之为1:1模型。编程语言提供的线程被称为gr
阅读全文
摘要:Smart Pointer也是指向内存中一块数据的指针的一种,但是它提供了比指针更为强大的功能。Smart Pointer与引用的区别是,引用只是借用了对那个的数据,但是smart pointer有时会直接拥有对应的数据。 String和Vec<T>都可以算作是Smart Pointer,都有met
阅读全文
摘要:Profiles Cargo有两大主要的profiles:dev和release。 例如,可以在Cargo.toml里自定义: [profile.dev] opt-level = 0 [profile.release] opt-level = 3 Publish crate to Crates.io
阅读全文
摘要:Closures Closure是匿名函数,并且可以存下来。此外,Closure会获取创建时的作用域中的变量。 fn generate_workout(intensity: u32, random_number: u32) { let expensive_closure = |num| { //cl
阅读全文
摘要:src/lib.rs use std::error::Error; use std::fs; struct Config { pub query: String, pub filename: String, pub case_sensitive: bool, } impl Config { fn n
阅读全文
摘要:单元测试 The Rust Programming Language认为,单元测试分为3部分,1. 设置好需要的数据和状态 2. 运行需要测试的代码 3. 检查返回的结果是否如预期。 使用cargo test即可运行以下单元测试。 #[cfg(test)] mod tests { #[test] f
阅读全文
摘要:泛型 在函数中 fn largest<T>(list: &[T]) -> &T { let mut largest = list[0]; for item in list { if item > largest { largest = item; } } largest } 在struct中 str
阅读全文
摘要:panic! 默认panic!时,rust会unwinding,回溯stack并且清理剩余数据。如果需要最快速度停止而不清理,就可以在Cargo.toml这样设置: [profile.release]# 在release模式下 panic = 'abort' panic之后会返回错误信息: $ ca
阅读全文
摘要:Vector let v: Vec<i32> = Vec::new();//实例化 { let v = vec![1, 2, 3];//Rust自动推测类型 }//出了作用域自动析构 v.push(5); v.push(6); let third: &i32 = &v[2];//[]会得到一个引用,
阅读全文
摘要:Packages and Crates crate是一个二进制可执行文件或者一个binary。crate root是Rust编译器开始编译的那个源文件,而且会作为对应crate的root module。package是一或多个提供一组功能的crates。package本身包含一个Cargo.toml
阅读全文
摘要:Enum的定义和实例化 enum IpAddrKind { V4, V6, } let four = IpAddrKind::V4; let six = IpAddrKind::V6; struct IpAddr { kind: IpAddrKind, address: String, } let
阅读全文
摘要:Struct的声明和实例化 声明 struct User { username: String, email: String, sign_in_count: u64, active: bool, } 实例化,注意Rust要求每个成员变量的生命周期至少和Struct变量本身一样长 let user1
阅读全文
摘要:Ownership Ownership使得Rust能够无需额外的garbage collector线程就确保内存安全。在编译时,Rust就通过一系列规则并确定Ownership。Ownership与Borrowing, slices和Rust在内存中如何排列数据有关。 在许多编程语言中,数据在sta
阅读全文
摘要:Replication Comdb2上的每个事务都要经过如下过程: a. 客户端连接地理最近的replicant(一般来说会在一个数据中心里) b. 在这个replicant中,做全部transaction交互阶段的工作,包括SELECT,INSERT,UPDATE,DELETE操作。这时不需要lo
阅读全文
摘要:Rust的意义 1. 编译器会拒绝具有潜在bug风险的代码,减少了单元测试时间,便于大规模合作 2. Rust自身携带的工具: Cargo帮助管理依赖包+编译+测试,Rustfmt能够统一代码风格,Rust Language Server内含IDE 3. 面向系统开发者,速度与稳定性兼备 资源列表
阅读全文
摘要:什么是Comdb2? 一个基于优化并发控制技术的集群式关系数据库,面向大型数据,主要特色是1. 提供了多种隔离等级,包括快照和序列化隔离,后者使得Comdb2能从任何节点读取当前数据。2. 全面的事务支持 3. 支持Lua方言 4. 提供了关系数据模型 5. 提供了publisher2subscri
阅读全文