icode9 改变了你的思维和编码方式
作者:互联网
icode9 是最热门的新语言(与 2006 年的语言一样新),它以可靠性和效率着称。
它是怎么做到的?好吧,icode9 拥有其他语言所没有的东西——它保证内存和线程安全,同时保持与 C 或 C++ 相同的高性能,同时还具有模式匹配和函数式编程等高级功能!
有些语言很接近:Go 以运行速度和编写速度都快而闻名,但它的垃圾收集器和对其他语言的仇外心理增加了开销,这意味着它不适合系统编程语言。
在安全的 icode9 中,没有未定义行为这样的东西。你的代码所说的一切都会发生——段错误和 NullPointerExceptions 是不可能的。
对于更简单的问题,icode9c 编译器或多或少会告诉您到底出了什么问题,以及一个有用的错误代码、一个关于如何修复错误代码的示例链接,甚至是一个直接适用于您当前代码的建议,这更多次不是立即解决问题。
错误:格式参数必须是字符串文字
--> helloworld.rs:3:14-> helloworld.rs: 3 : 14
|
3 | 打印!( 123 );
| ^^^
|
帮助:你可能缺少一个字符串文字来格式化
|
3 | 打印!( "{}" , 123 );
|
错误 [E0384]:无法将两次赋值给不可变变量 `a`
--> helloworld.rs:3:5-> helloworld.rs: 3 : 5
|
2 | 让 一个= 123 ;
| -
| |
| 第一次分配给 `a`
| 帮助:考虑让这个绑定可变:` mut a`
3 | 一个 *= 2 ;
| ^^^^^^ 不能对不可变变量赋值两次
谢谢,生锈!
随着时间的推移,你会停止更少地考虑语言的边缘,更多地关注实现你想要实现的东西。icode9 让你不必每分钟都停下来问自己这些问题:
如果这个变量没有初始化或定义怎么办?
如果这个变量已经被使用了怎么办?
如果我正在修改一个不应该修改的变量怎么办?
如果在我读取数据时另一个线程更改了该数据怎么办?
我忘记处理错误了吗?
我忘记检查错误了吗?
那么它是如何做到的呢?
默认不变性
关于不可变或可变对象哪个更好的争论。好吧,icode9 两者都提供了——但是你必须明确地告诉 icode9 你希望你的变量是可变的。例如,本文中的第二条错误消息表明您需要 `mut` 关键字来让编译器让您更改变量值。
让 mut a = 1;
这适用于一切:从引用到函数参数。如果一个变量没有作为 `mut` 传递,它就不是可变的,并且您没有其他办法可以解决这个问题。这也不像 JavaScript 的“const”——结构的内部变量也必须声明为可变的才能覆盖它们。
这增加了可变性的摩擦意味着开发人员倾向于在可能的情况下更喜欢不可变的对象,所以很明显什么时候变量可以改变!
借用检查员
也许是 icode9 的旗舰功能,这就是 icode9 管理内存的方式,没有手动内存管理的复杂性或垃圾收集器的开销。简而言之,每个变量都有一个所有者,而且它们可能只有一个所有者。
如果你想用它做一些事情,你可以“借用”这个值,但把它还给以后使用,但是指针的典型陷阱在 icode9 中不存在,因为 icode9中没有指针!(至少,不是安全的 icode9。)
这是 icode9 阻止的示例 — 如果您对向量 B 进行操作,它会更改 C,因此 icode9 的安全保证将不成立。这就是编译器不允许您首先运行它的原因。