CSDN|Rust 让人奔溃的那些特性!
本文插图
作者 | William Woodruff 译者 | Arvin , 责编 | 屠敏 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews)以下为译文:
五年前 , 我写了一篇文章论述了我当时(至今)最喜欢的脚本语言Ruby让我讨厌的地方(https://blog.yossarian.net/2015/09/28/Five-Things-I-Hate-About-Ruby) 。
今天 , 我将对我目前最喜欢的编译型语言:Rust做同样的事情 。
就像最初写的关于Ruby的帖子一样 , 这些抱怨都是个人观点 , 反映了我目前对这个语言的最佳理解 。 就像写关于Ruby的文章一样 , 这篇也是出于对Rust的热爱而编写的 。
闲话少说 , 让我们开始主题 。
字符串地狱
我在开发过程中抱怨Rust中的字符串有两个大方向:
1.字符串类型之间的区别令人困惑
2.字符串类型之间进行转换的方法太多
字符串类型太多
我可以想到5种不同的方式来表示字符串[1] , 字符串视图或接受字符串形式的方法签名:
- &str 用于表示借来的字符串
- String用于表示自有的字符串
- &OsStr 用于表示从操作系统借用的字符串
- OsString 用于表示操作系统中自有的字符串
- AsRef用于方法签名 , 表示一个廉价的&str引用
作为Rust新手 , 这几种类型之间的区别非常令人困惑 , 也使得理解引用变得更加困难(为什么引用&String与&str不同?为什么我不能直接创建str?我从哪里得到&&str?) 。
【CSDN|Rust 让人奔溃的那些特性!】 在字符串之间进行转换的方法太多
多种字符串类型和相关特征带来多种转换功能:
- &str到String:在不考虑格式化转换或往返一个Vec或[u8]的情况下 , 至少存在这么多种 , String::from , to_string , to_owned , into
- String到&str:as_str , as_ref , Deref<Target=str> , &x[..]
- 适用于OsStr和CStr的类似(可能有损)方法
我最终习惯于根据上下文使用不同的字符串(例如into , 表示要将a &str转换为a , String以便可以将其返回 , to_owned表示稍后将拥有该字符串的所有权) 。
标准库差距
Rust标准库存在一些空白 , 这些空白使用户空间编程的各个方面都很痛苦:
- 当前没有获取用户主目录的方法 。 std::env::home_dir被明确标记为已弃用 , 并且该文档鼓励用户使用第三方库dirs(但是该库已经不再维护 , 详见GitHub链接:https://blog.yossarian.net/2020/05/20/Things-I-hate-about-rust%20/l%20fn:2)[2] 。
- 没有标准的扩展方式~ 。 std::fs::canonicalize支持.和 .. , 但不支持~ 。 这其实和上面一点有所重复 。
- 无法通过系统shell调用命令 。 我知道system[3]命令有各种问题 。 我也同意它不应该是执行其他进程的默认接口 , 甚至应该被隔离以防止意外使用 。 但所有这些都没有改变这样一个事实--即这个命令偶尔会有用 , 在标准库中实现比最终开发人员直接使用sh-c更可靠 。
这些都是公认的微小差距 , 所有这些都可以通过高质量的第三方库解决 。 但是它们会在开发过程中增加摩擦 , 鉴于Rust无摩擦的特性 , 摩擦是特别值得注意的 。
推荐阅读
- CSDN|牛!2020年,这项技术将获得99000000000元人民币“国家领投”!
- 语言最红语言Python跌落榜三,Rust最受喜爱!Stack Overflow 2020报告出炉
- CSDN|儿童节教你用 Python 画出童年回忆
- CSDN|“不要害怕 RAID!”
- 互联网乱侃秀|都说苹果没5G落后国产机了,结局却很让人扎心,销量又是第一
- CSDN|基础软件,未来只有开源一条路?
- CSDN|本来想用“{{”秀一波,结果却导致了内存溢出!
- 手机大魔王|小米又带来了惊喜,Redmi10x 真的让人酸,5G来袭我选择抄底4G
- CSDN|云计算,巨头们的背水一战
- CSDN|2020 AI 产业图谱启动,勾勒中国 AI 技术与行业生态