rust-programming-language.png
英文版链接:Why a smart/mighty compiler is required
我从2005年开始学习编程。到现在为止的这段期间,我已经使用了非常多的语言。包括C, Java, Ruby,JavaScript, Groovy, Scala.
所有这些语言都尽可能给予程序员灵活性以及一些强大的功能特性。不过他会告诉你,你需要为你的代码负责。这就好比,某人给了你尽可能强大的武器,甚至是核武器,你可以随意使用他们,但是即使你乱用,把武器对着自己,这个给你武器的人不会阻止你。
人们如果走错了路,总是需要被纠正才好。但是现在,如果我写了不好的代码,我可能只能寄希望于有人能够告诉我哪里做错了,或者我找一些工具,这些工具会警告我不该那么做。但是最大问题是,这些都不是强制的。
随着对程序员的需求越来越大,每年会有很多新手进入程序员这个行当。他们可能因为缺少经验而写出错误的代码,但是没有人发现和组织,他们自己也不知道这些是有问题的,这些充满bug的代码可能没有测试就直接被部署,最终在线上奔溃了。
产生这些问题很大一部分原因是,编译器仅仅将代码转化为二进制可执行文件作为自己的唯一责任。但是如果编译器发现了你做的不对,能否直接阻止你编译呢? 编译器应该要这么做,而不是放任错误在那,还依然让你上线,最后奔溃。
比如我们都知道,Java/Scala里普通的HashMap是不能用在多线程环境里的,这会导致问题,但是这个误用却一次又一次的发生,最终导致的灾难也一次又一次发生。 在Rust里,这是不会发生的。因为编译器一旦发现你这么做,就会阻止你,并且更让人欢快的是,编译器还会主动告诉你,你应该怎么做。Rust团队花了很多时间去让错误变得更加清晰,同时给你提供给一个良好的解决这个问题的指导。
有了编译器的这种支持,Rust可以保证内存安全,线程安全,并且可以让帮你消灭非常多的常见bug。
Rust语言同时为编译器和用户设计。有的时候,为了让编译器具备能够帮助的用户的能力,Rust团队可能会选择去限制使用者,这也是人们总是抱怨Rust的学习曲线。因为Rust总是阻止你做这做那。试着去理解编译器的抱怨,同时听从编译器让你干的时,世界就会变得很美好的。