關於現代編程語言的良好特性,我也來講說本身的一點點想法:編程
- OO範式並未過期,而是Java的OO方式太過保守和繁瑣了,總想作好,也添了很多這個那個的特性,但每每沒出力到點子上,甚至Gosling都說若是如今來設計Java,絕對不是如今這個樣子。好比Data Class(Scala裏相似的Case Class,固然更強大,特別是結合PM)、Trait,都是很是好的高效特性,但Java不支持(不過聽說11裏會考慮,僅僅還只是可能)。雖然說Python到了剛發佈的3.7版本才加入Data Class,但以前早就已經有了不錯的namedtuple替代方案。
- 有關OO的繼承特性的討論就更多了,Favor Composition Over Inheritance。
- 函數第一性是必須的,這樣纔有以後的Closure、Lambda。再看看Java,爲了支持Lambda,須要整理一堆的Functional Interface出來,實在是照虎畫皮不三不四,失去了Lambda一次性應用的樂趣與便捷。
- 併發特性。其實不論是CSP仍是Actor,個人感受是隻要有併發支持就行,都是成熟併發模型。而性能問題實在是扯不清,我的偏好也各不一樣。但併發原子特性輕量化應該是趨勢。CSP模型沒啥毛病,這是在Unix環境裏獲得充分證實的好模式。關於性能,絕大多數場景都是可以hold得住的,不僅是編程語言的事情,何況沒人能期望一門編程語言就可以應對全部業務場景。
- 類型推斷。這是必須,在「Programming in Scala」一書中開篇對「類型推斷」的闡述,可以讓人對「類型推斷之於靜態語言的意義」有清晰認識,也正是這席精闢描述,讓我當年喜歡上了Scala。能夠說,類型推斷在靜態語言中的做用非凡,類型系統設計優劣,至少從面上影響了開發效率——冗餘不是靜態語言的原罪,而是看是否在類型系統設計上下了大力氣。Java新版本也不得不開始考慮更多的類型推導設計了。
- 簡單。也許這世上就是有一小撮人對語言結構很注重細節,好比我本身。但絕大多數人仍是沒這麼投入的,其關心的是「可以很快地上手去解決問題」,因此簡單性相當重要。這裏Go就是一個很好的例子,其在工程化特性方面的執着,給其帶來了顯著收益。從這點上來看,Scala的特性又實在是多了一些。
- 小結一下,OO結合FP是趨勢,去OO重量化特性而添加輕量化特性是趨勢,更好的類型推導(系統)是趨勢,簡單化是趨勢。近期的一個編程語言大好發展時期是2010的先後五年,這是要有互聯網、移動互聯網快速發展背景來支撐的。並且這段時間不只僅是編程語言在快速發展,框架乃至更博大更宏大的技術模式都在變化。之後會不會再出現快速攻城掠寨的編程語言?我以爲難度不小,看領域業務發展可否帶來機遇。因此,TypeScript、Dart、Go、Kotlin、Swift等可能就是最近一班車的乘客,其餘更小衆的一些編程語言,可能就要騎着車奮力直追了。