1. Dart vs Java
客觀的來講,Dart 在語法層面確實比 Java 更有表現(xiàn)力;在 VM 層面,Dart VM 在內(nèi)存回收和吞吐量都進行了反復的優(yōu)化,但具體的性能對比,筆者沒有找到相關測試數(shù)據(jù),但在筆者看來,只要 Dart 語言能流行,VM 的性能就不用擔心,畢竟 Google 在 Go、JavaScript(v8)、Dalvik( Android 上的 Java VM )上已經(jīng)有了很多技術積淀。值得注意的是 Dart 在 Flutter 中已經(jīng)可以將 GC(內(nèi)存垃圾回收)做到 10ms 以內(nèi),所以 Dart 和 Java 相比,決勝因素并不會是在性能方面。
而在語法層面,Dart 要比 Java 更有表現(xiàn)力,最重要的是 Dart 對函數(shù)式編程支持要遠強于 Java(目前只停留在 Lambda 表達式),而 Dart 目前真正的不足是生態(tài),但筆者相信,隨著 Flutter 的逐漸火熱,會回過頭來反推 Dart 生態(tài)加速發(fā)展,對于 Dart 來說,現(xiàn)在需要的是時間。
2. Dart vs JavaScript
JavaScript 的“弱類型”一直被詬病,所以 TypeScript (JavaScript語言的超集,語法兼容JavaScript,但添加了“類型”)才有市場。就筆者使用過的腳本語言中(筆者曾使用過 Python、PHP),JavaScript 無疑是動態(tài)化支持最好的腳本語言,比如在 JavaScript 中,可以給任何對象在任何時候動態(tài)擴展屬性,對于精通 JavaScript 的高手來說,這無疑是一把利劍。但是,任何事物都有兩面性,JavaScript 強大的動態(tài)化特性也是把雙刃劍,你可經(jīng)常聽到另一個聲音,認為 JavaScript 的這種動態(tài)性糟糕透了,太過靈活反而導致代碼很難預期,無法限制不被期望的修改。畢竟有些人總是對自己或別人寫的代碼不放心,他們希望能夠讓代碼變得可控,并期望有一套靜態(tài)類型檢查系統(tǒng)來幫助自己減少錯誤。
正因如此,在 Flutter中,Dart 幾乎放棄了腳本語言動態(tài)化的特性,如不支持反射、也不支持動態(tài)創(chuàng)建函數(shù)等。并且 Dart 從 2.0 開始強制開啟了類型檢查(Strong Mode),原先的檢查模式(checked mode)和可選類型(optional type)將淡出,所以在類型安全這個層面來說,Dart 和 TypeScript、CoffeeScript 是差不多的,所以單從動態(tài)性來看,Dart 并不具備什么明顯優(yōu)勢,但綜合起來看,Dart 既能進行服務端腳本、App 開發(fā)、Web 開發(fā),這就有優(yōu)勢了!