Rust的设计者选择符号的原因是什么!/ &&/|| 而不是单词not /和/或?

O.O*_*.O. -1 language-design rust

什么是用于选择运营商的理由!/ &&/ ||not/ and/ or?背后有一些历史,还是只是偏好?

我有一些想法:

  • Rust遵循C/C++.但是,在for-each循环的情况下,使用的是更像英语的版本for x in X而不是C++ for (x: X),所以Rust不仅盲目地遵循C/C++的所有内容.

  • 符号更短.两者之间的字符数似乎相似.

  • 由于与类型规范的冲突,语法必须不同.也有区别a as u8而不是(u8)a.

由于Rust是一种新语言,我认为他们可以选择符号或单词而不会出问题.Rust选择符号而非文字的原因是什么?为什么不同时选择?

Luk*_*odt 6

早在2006年,Graydon Hoare开始研究Rust作为一个小项目.Hoare还参与了Servo浏览器引擎.他对Rust的目标是它可能有助于开发所述的浏览器引擎.由于引擎(几乎所有其他浏览器引擎)都是用C++编写的,因此Rust基本上是Hoare的C++替代品.

所以使用与C++相同的逻辑运算符似乎很自然.

GitHub存储库是在2010年创建的,&&并且||已经使用了Rust语言.见lazy-and-or.rs期间资源库中的第二次提交的测试:

if (true && x) { ... }
Run Code Online (Sandbox Code Playgroud)

随着时间的推移,语言设计过程变得更加民主,并且出现了更多的想法.但直到2016年才有人正式提议添加not,andor作为RFC.

但正如您所看到的那样,RFC已经关闭.没有船的贡献者解释如下:

如果我从一开始就设计一种语言,我可能更喜欢andor.但是我们通常反对上下文关键词,除非绝对必要,表达语境中的上下文关键词特别难以引入,并且我们倾向于避免"选择你的毒药"变种的句法糖.

重要的是,在这一点上!,&&||已经被稳定了一年多的时间.所以唯一的选择是添加替代运算符,但不能替换那些运算符.这似乎不值得.


免责声明:我在2014年才加入了Rust社区.在IRC或其他我无法搜索的媒体中,可能会有更多关于此问题的讨论.但这就是我能找到的全部.

  • 另外关于`for`循环语法与C++的区别,请注意[生锈已经在2010年有一个`for ... in ...`语法](https://github.com/rust-lang/rust/blob/d6b7c96c3eb29b9244ece0c046d3f372ff432d04/src /test/run-pass/foreach-simple.rs)而`for(...:...)`语法[仅在C++ 11中添加](https://en.cppreference.com/w/cpp/language /范围换). (3认同)
  • 这个答案可以改进.具体来说:*他对Rust*的目标 - [需要引证];*基本上是Hoare*的C++替代品 - [需要引证];*似乎很自然* - [意见].答案的后半部分得到了事实的支持,看起来很好. (2认同)