这几天我学习了rust编程语言,怀着激动的心情来分享体会,它真的太优秀了。
c语言运行很快,通用性[注]一流,不支持面向对象。rust通用性也一流,上支持面向对象,下支持内联汇编。
c++支持面向对象,内存得手工管理。rust自动管理内存。c++语法庞大复杂,rust远没有c++庞大复杂。
java有内存回收器(GC),但是回收效率低,运行效率比c/c++低很多,java语法不如c#美。rust回收效率高,运行效率与c/c++相当。java需要运行时(JRE),rust没有这个负担。
c# 语法美[注](比python差点),需要运行时(.NET framework),跨平台也没那么彻底。rust语法也美(比python差点),跨平台,没有运行时负担。
go运行效率不错,但它的go异常机制饱受诟病,程序员容易掉坑,我个人也是难以忍受它的这个特点。rust异常机制美,运动效率比Go还快一截。
python易学、语法极简极美、组件丰富、通用性好……什么都好,就是运行太慢。rust几乎拥有python的全部优点(比python难学),还非常快。
网上找了资料,没有提到rust有什么实质缺点。个人学了两天,觉得学习难度大概可以算一个缺点。它通过“所有权”和“生命周期”来高效地解决内存管理问题,这个是学习rust的难点。但相对c++庞大且复杂的语法而言,rust的这点又算不上什么。
详细的对比实验,网上有很多资料,百度一下即可。
结论:rust适合专业人员。想编写大软件,对运行效率有要求,又不想手工管理内存,推荐rust。非专业人员,推荐python。
语言之间的对比,涉及语法、通用性、代码质量、编写效率、运行效率、组件丰富程度、社区活跃程度等很多方面。对比的重点是依据现有各种语言间的优缺点,特别是缺点,来进行。
语言的意义在于熟能生巧,至少不会由于对语言的陌生而写出bug或低效率的代码。“语言不重要”这句话在某些角度是对的,因为比语言更重要的有很多,比如算法、架构。但在某些角度又是不对的,使用一门熟悉的语言和一门陌生的语言,在表达效率、灵活度和表达质量有天壤之别。自然语言也一样。如果不理解,就看看大多数学了多年英语的中国人,使用英语和使用普通话的差别。
语言对比的意义,个人认为是为选型提供参考,避免一门语言的缺点在后期造成很大的不便和巨大的解决成本。如果在用一门语言写了不少代码之后,发现由于效率等原因,需要换一门语言重写一遍,何不在一开始就花点心思挑一门合适的语言?
说明:
1. 通用性是指能运行多种设备的能力,如:大型机、PC、手机、嵌入式,也包括能否编写OS,能否编写大型应用软件,与其它语言的互通性的能力。
2. 语法美是指易写、易读、不容易掉坑(产生Bug)。如 add(add(a, b), c) 就不如 a + b + c 美。