CSDN|Rust 让人奔溃的那些特性!( 二 )
特质(Traits)
我喜欢基于特质的组合 。 但我不喜欢下面这些东西:
- 被告知我忘记了使用use std::io::Read或者use std::io::Write的方法 , 但其实原因是我正在调用的方法已经被作用域中的一些东西调用了 。 我知道为什么 Rust会这样做 , 不然就会出现编译器警告 , 但是我仍然感觉很奇怪 , 尤其是在未使用导入的情况下 。
- 为特质实现特质的语法 。 impl<T> for Trait for T where T: OtherTrait 虽然不算太糟糕 , 但它读起来不像impl Trait for OtherTrait那么自然 。
- 有时Rust编译器rustc需要我在静态函数(non-self)特质函数中添加where Self: Sized 。 我仍然不明白为什么有时需要这样做 , 而有时则不需要 。 但我相信这是有正当理由的 。
无需扩展的安全索引
给定一个固定数组x = [T; N]和类型为U(U的约束为U::MAX < N)的索引变量i , 通过x[i] 索引始终是安全的 。 尽管如此 , Rust编译器rustc希望程序员能够明确将i扩展到usize:
fn main { let lookup_table: [u8; 256] = [0_u8; 256]; let index = 5_u8; println!("{}", lookup_table[index]);}
失败结果: error[E0277]: the type `[u8]` cannot be indexed by `u8` --> src/main.rs:4:20 |4 | println!("{}", lookup_table[index]); | ^^^^^^^^^^^^^^^^^^^ slice indices are of type `usize` or ranges of `usize` | = help: the trait `std::slice::SliceIndex<[u8]>` is not implemented for `u8` = note: required because of the requirements on the impl of `std::ops::Index<u8>` for `[u8]`
虽然这可以理解 , 但要求程序员要么在索引计划中的任何位置使用as usize(冗长 , 并掩盖了索引背后为 u8的意图) , 要么将索引本身变成usize(也掩盖了意图 , 并使算术运算变得更容易超出界限) , 还是有些强求 。最后一点:cargo install 有时不能成功
我不知道这是不是一个真正的错误 , 但是由于我被它坑了几次 , 所以我将它加了进去 。
cargo install显然不知道如何发现带后缀的软件包版本 。 例如 , 如果我发布myfakepackage为version 0.0.1-alpha.0 , cargo install则会报告如下错误:
$ cargo install myfakepackageerror: could not find `myfakepackage` in registry `https://github.com/rust-lang/crates.io-index`
你必须明确传递—version参数: $ cargo install myfakepackage --version 0.0.1-alpha.0
总结
我还有其他一些想讨论的内容(对于不支持特质的核心类型的别名 , 程序包生态系统的样式有点像JS / -y) , 但是我认为这样做有可能对我非常满意的语言太过消极 。
五年过去了 , 我仍然喜欢Ruby , 并且对Rust感到乐观 。
备注说明:
1.没包括CString和&CStr , 因为它们主要用于FFI上下文 , 并且可以理解为是不同的 。 ?
2.我知道在POSIX平台上可靠地获取用户的主目录实际上非常困难 。 但这并没有改变标准库应该尝试的事实 。 ?
3.恰当的例子:CLI经常公开钩点和回调 , 这些钩点和回调能够使用shell语法编写很有用
作者:William Woodruff , 研究和工程实践者 , 开源软件参与者 , 软件库Homebrew软件开发成员 , kbsecret的首席维护者
原文:https://blog.yossarian.net/2020/05/20/Things-I-hate-about-rust
本文为 CSDN 翻译 , 转载请注明来源出处 。
推荐阅读
- CSDN|牛!2020年,这项技术将获得99000000000元人民币“国家领投”!
- 语言最红语言Python跌落榜三,Rust最受喜爱!Stack Overflow 2020报告出炉
- CSDN|儿童节教你用 Python 画出童年回忆
- CSDN|“不要害怕 RAID!”
- 互联网乱侃秀|都说苹果没5G落后国产机了,结局却很让人扎心,销量又是第一
- CSDN|基础软件,未来只有开源一条路?
- CSDN|本来想用“{{”秀一波,结果却导致了内存溢出!
- 手机大魔王|小米又带来了惊喜,Redmi10x 真的让人酸,5G来袭我选择抄底4G
- CSDN|云计算,巨头们的背水一战
- CSDN|2020 AI 产业图谱启动,勾勒中国 AI 技术与行业生态