d信任与rust不安全的区别
use std::slice;
unsafe fn f(i: usize) -> i32 {
let mut arr = [1, 2, 3];
let s = slice::from_raw_parts_mut(arr.as_mut_ptr(), 1000);
return s[i];
}
fn main() {
unsafe { println!("{}", f(3)); } // ok!
}
上面为rust
不安全版,下面为D
对应不安全版:
@safe: import std;
@system int f(size_t i) {
auto arr = [1, 2, 3];
return arr.ptr[i];
}
void main() {
() @trusted { writeln(f(3)); }(); // ok!
}
Rust
和D编译器都直接
接受了这些代码.可能在不知不觉
中,就把代码
编译到你的库中.如果bug
很难重现,你甚至找不到它.
现在,如果回顾
代码,那么D
代码比Rust
代码可读性
强得多.如果想在D代码
中找到安全
和不安全
代码之间的边界,那么可只搜索"@trusted"
属性.但是在Rust
代码中,你很难找到它,因为相同"unsafe"
关键字有多个用途.
:@trusted
与@system
没有区别
这是非常不同
的,如果把函数看作黑盒子
,那么:
@信任
函数使用起来一般是由人类审查者
,因为编译器
不能分析它,来保证安全
的.注意,函数处理其输入/输出
数据是相当简单
的.
@系统
函数可能有些危险怪癖
,很容易误用它而犯错
(泄漏
资源,输入
错误时出现段错误
,从多线程使用时出现死锁),如果用户
非常小心,可正确使用,但直接允许从@安全
代码调用会很鲁莽
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现