1. Dart vs Java
客觀的來(lái)講刁赖,Dart 在語(yǔ)法層面確實(shí)比 Java 更有表現(xiàn)力搁痛;在 VM 層面,Dart VM 在內(nèi)存回收和吞吐量都進(jìn)行了反復(fù)的優(yōu)化乾闰,但具體的性能對(duì)比落追,筆者沒(méi)有找到相關(guān)測(cè)試數(shù)據(jù),但在筆者看來(lái)涯肩,只要 Dart 語(yǔ)言能流行轿钠,VM 的性能就不用擔(dān)心,畢竟 Google 在 Go病苗、JavaScript(v8)疗垛、Dalvik( Android 上的 Java VM )上已經(jīng)有了很多技術(shù)積淀。值得注意的是 Dart 在 Flutter 中已經(jīng)可以將 GC(內(nèi)存垃圾回收)做到 10ms 以內(nèi)硫朦,所以 Dart 和 Java 相比贷腕,決勝因素并不會(huì)是在性能方面。
而在語(yǔ)法層面,Dart 要比 Java 更有表現(xiàn)力泽裳,最重要的是 Dart 對(duì)函數(shù)式編程支持要遠(yuǎn)強(qiáng)于 Java(目前只停留在 Lambda 表達(dá)式)瞒斩,而 Dart 目前真正的不足是生態(tài),但筆者相信涮总,隨著 Flutter 的逐漸火熱胸囱,會(huì)回過(guò)頭來(lái)反推 Dart 生態(tài)加速發(fā)展,對(duì)于 Dart 來(lái)說(shuō)瀑梗,現(xiàn)在需要的是時(shí)間烹笔。
2. Dart vs JavaScript
JavaScript 的“弱類(lèi)型”一直被詬病,所以 TypeScript (JavaScript語(yǔ)言的超集抛丽,語(yǔ)法兼容JavaScript谤职,但添加了“類(lèi)型”)才有市場(chǎng)。就筆者使用過(guò)的腳本語(yǔ)言中(筆者曾使用過(guò) Python亿鲜、PHP)允蜈,JavaScript 無(wú)疑是動(dòng)態(tài)化支持最好的腳本語(yǔ)言,比如在 JavaScript 中蒿柳,可以給任何對(duì)象在任何時(shí)候動(dòng)態(tài)擴(kuò)展屬性陷寝,對(duì)于精通 JavaScript 的高手來(lái)說(shuō),這無(wú)疑是一把利劍其馏。但是凤跑,任何事物都有兩面性,JavaScript 強(qiáng)大的動(dòng)態(tài)化特性也是把雙刃劍叛复,你可經(jīng)常聽(tīng)到另一個(gè)聲音仔引,認(rèn)為 JavaScript 的這種動(dòng)態(tài)性糟糕透了,太過(guò)靈活反而導(dǎo)致代碼很難預(yù)期褐奥,無(wú)法限制不被期望的修改咖耘。畢竟有些人總是對(duì)自己或別人寫(xiě)的代碼不放心,他們希望能夠讓代碼變得可控撬码,并期望有一套靜態(tài)類(lèi)型檢查系統(tǒng)來(lái)幫助自己減少錯(cuò)誤儿倒。
正因如此,在 Flutter中呜笑,Dart 幾乎放棄了腳本語(yǔ)言動(dòng)態(tài)化的特性夫否,如不支持反射、也不支持動(dòng)態(tài)創(chuàng)建函數(shù)等叫胁。并且 Dart 從 2.0 開(kāi)始強(qiáng)制開(kāi)啟了類(lèi)型檢查(Strong Mode)凰慈,原先的檢查模式(checked mode)和可選類(lèi)型(optional type)將淡出,所以在類(lèi)型安全這個(gè)層面來(lái)說(shuō)驼鹅,Dart 和 TypeScript微谓、CoffeeScript 是差不多的森篷,所以單從動(dòng)態(tài)性來(lái)看,Dart 并不具備什么明顯優(yōu)勢(shì)豺型,但綜合起來(lái)看仲智,Dart 既能進(jìn)行服務(wù)端腳本、App 開(kāi)發(fā)姻氨、Web 開(kāi)發(fā)坎藐,這就有優(yōu)勢(shì)了!