每个语言想要成功必须有自己的主场,就是核心应用场景,在这个场景下有无与伦比的优势,依托这个优势先立于不败之地,然后对外扩张。
有时候和语言本身是否设计优秀合理其实没必然关系。
比如:
Javascript,它设计上的缺陷就不用多说了,但是它有浏览器这个主场,在这里它具有不可替代性。
C的主场是操作系统内核,要求高性能可移植的算法,硬件资源紧张的嵌入式设备。
Objective-C,OSX,特别是iOS,苹果就是这么规定的,必须要用。
Java,企业级应用服务开发。
C#,微软
C++ 是十项全能冠军,它继承了C的遗产可以说是富二代,而且出道特别早,主场是应用程序开发。
当年 D language也是各种优秀,但是就是没有找到应用场景。Golang其实也面临同样的问题,虽说是适合高性能网络服务器开发,但是这个应用场景太分散。
Rust,我目前还没看到它的主场在哪里但是无论如何它想要成功,成为主流语言之一,必须要找到属于它自己的主场应用场景,或者依托某个系统,或者依托某类应用开发。这就不是纯技术问题了,这是产品市场策略问题。C++的发明者可以说是语言界最优秀的产品经理。
如果无法找到属于自己的主场,说不定两年后的语言排行榜,Swift都进入Top5了, Rust和Go都还在10名开外。
工作上写C++,从去年底开始关注Rust,至今用Rust写了一些和交易相关的小程序。总体感觉是如果有一门语言能够取代C++,那么它只可能是Rust。
为什么这么说呢?首先我们来说一下为什么很多情况下人们会选择C++。
很多人用C++的不是因为C++有多好,只是因为如果想要写一个接近实时高性能,稳健,并有足够开发效率的大程序,通常只有C++可选。这有如下几个原因:
总体上来说,就是一个高性能的静态强类型多范式语言。
但同时,C++问题很多,这些问题不是语言设计者能力不够,而多数是历史原因与当时抉择所看重的东西导致的。C++一开始的时候一个目标是与C兼容,即使C当年算是极其天才的设计(和Unix一样),它毕竟是1972年的语言,当时设计导致的问题虽然我们现在已经很清楚,C++也因为兼容性而把它保留了下来。大家都知道Python 2和Python 3的故事,甚至IA64和x86_64的故事,所以也很容易理解C++为什么要一直保持向前兼容。
Rust由于是一个新语言,所以它完全没有历史包袱。甚至在今年之前的五年中,社区一直完全肆无忌惮的做和之前完全不兼容的改动。如果发现有个新设计确实公认更好,语言作者们不会为了向前兼容而放弃改变。近30年的语言理论研究和实际软件工程的经验有足够多的优秀设计可以直接拿来使用。Rust作为一个新语言显然不会放过这个机会。在可以完全重来的前提下,Rust相对C++有哪些新特性呢?
当然,如果只有这些小改进,C++程序员可能看了看觉得,“不错哟”,然后就接者回去写C++了(比如D)。新语言必须有杀手级的特性,这才是转语言的关键动力。
这一杀手级的特性就是Ownership和Lifetime。Rust首页宣称的"prevents nearly all segfaults, and guarantees thread safety"是超级诱人的,因为这是在没有GC和runtime的情况下实现的。
C语言的野指针,和线程安全问题会导致很多极难发现,诊断和修复的bug。C++,尤其是C++11费心思去缓和了这一问题,但这仍然是没有GC讲求性能语言的核心劣势。Rust这个特性具体是如何的呢?
这一特性所导致的编程可以衍生很多新的优化可能,而这都是在保证完全的前提下。实际上,催生Rust的浏览器Servo项目一个目标就是安全问题,Rust在安全性让heartbleed问题出现的可能大大减小。
最后,Rust是一个脚踏实地(Practical)的语言。这意味着它不遵循某一个范式(paradigm)或者是为计算机科学教学而生的语言。这是一个写给开发者的语言,如果特性经过权衡发现对开发有益,语言作者不会因为它破坏了某种范式而不去加它。这种哲学有些类似于当年Linux相对Mimix选择monolithic kernel而不是结构上更干净的micro kernel,因为Linux需要性能。这样的选择会让语言更接近使用者,让使用者更开心。
所以用C++的那些人的那些要求,Rust都能达到或者甚至改善。
在语言层面上Rust无疑比C++优秀得多的一个高性能静态强类型多范式语言。
如
Rust 1.0 Announcement所说,1.0标志着Rust已经稳定。你能在1.0编译器上使用的特性都会保证继续存在,除非重大正确性(soundness)问题出现。现在已经没有“下一个版本出来,之前的代码就不能用”的顾虑了。
1.0的发布是Rust发展的一个动力。当然真正长时间的采纳率还要看语言本身质量和社区环境。对这两点我是相当看好的。要想取代C++绝不是一件容易和快速的事,这不紧只是语言的问题,而有很多不可控的其他因素,让我们拭目以待吧。
当感情成为生活的一种负担而且无力改变的时候。
与女生不同,大多数男生是不会把感情当作生活的全部的,过日子是头等大事,感情只是其中一部分。所以对于男生来说,一段好的感情是能让生活更轻松的。
一个男生可能会因为你漂亮而喜欢你,但这种喜欢无非是荷尔蒙冲动无法长时间维系,真正能让男生愿意和你一辈子走下去的,是你能够理解他,能够支持陪伴,能够默契相处。
但就这一点上,很多女生都是在逆行。她们所期望的感情都是建立在对于男生的索取之上,她们会因为男朋友没有足够专注自己而去作,会因为男朋友没满足自己的需要而去闹,会频繁吵架提分手来试探这个男人是否足够爱自己,却忽略了这个过程中,自己一步步在抛掉自己值得被爱的筹码。
当男生觉得和你在一起,不但体会不到丝毫乐趣,反而成为一种负担的时候,其实就已经在积累失望了。但这个时候男生一般不会直接放弃,他们会尝试逃避,会尝试沟通,会寄希望于你能逐渐去改变。
所以有经验的女生应该知道,男人的态度变化是有个周期的,不会因为你和他吵几次而一下子和你分手,但是会逐渐冷漠下来,这个过程中他就是在开始怀疑是否真的合适,会希望看到你有所变化。然而往往女生在这个阶段,又会因为男生的逃避而更加变本加厉去作去闹,想要控制对方,最终形成恶性循环。
等到失望积累够了,也就变成绝望。他会判断你已经不会变了,无药可救了,再相处下去只会让那自己越来越累,最终决定分开,等你意识到问题所在时已经来不及了,这种理性思考下的分手,往往挽回难度也是比较大的。
很多女生整天担心男生变心不爱自己,但同时却又是亲手在不断把他往外推,想想还挺可笑的。