1. 程式人生 > >AS負責人說不必用Kotlin重寫,但OkHttp拿Kotlin重寫了一遍,就發了OkHttp 4.0!

AS負責人說不必用Kotlin重寫,但OkHttp拿Kotlin重寫了一遍,就發了OkHttp 4.0!

雖然 Android Studio 的負責人 Jeffery 已經澄清,只是 Kotlin-First 而不是 Kotlin-Must,並不需要將 App 用 Kotlin 重寫一遍。但是 OkHttp 已經開始用 Kotlin 重寫的工作,我們來看看這次重寫後帶來的差異。

一. 序

在今年的 Google I/O 大會上,Google 宣佈將以 Kotlin 作為 Android 開發的一級程式語言。而同天,Google 就開源了只支援 Kotlin 的 Jetpack Compose,以藉此呼應這一戰略。

訊息一出,不少 Android 開發就擔心以後是不是隻能用 Kotlin 開發了。Android Studio 的負責人 Jeffery Van Gogh,立刻發文表示,"Kotlin-First" 只是表示 Kotlin 將比 Java 在 Android 中佔據更重要的地位,但是並不需要將現有 Java 開發的 Android App 使用 Kotlin 重寫一遍。

Jeffer 也表示,在 Android Studio 的十幾萬程式碼中,大約只有 10% 的 Kotlin 程式碼,也只會用 Kotlin 來編寫新功能。

只是 Kotlin-First,而非 Kotlin-Must。

雖說 Google 也不建議我們將現有的 App 用 Kotlin 重寫一遍,但是 OkHttp 這個 Android 下最火的網路框架開源庫,已經開始著手用 Kotlin 將整個庫重寫一遍。

接下來我們看看這次升級的細節吧。

二. Kotlin 版的 OkHttp

Kotlin 是由 JetBrains 公司開發,與 Java 100% 互通,並且具備諸多 Java 尚不支援的新特性。就我個人的使用體驗來說,Kotlin 還是非常不錯的,唯一有問題的可能就是寫 Kotlin 太爽了,導致在同項目中編寫 Java 程式碼時,有那麼零點幾秒的恍惚。

近期 Jesse Wilson 表示,已經使用 Kotlin 語言,把 OkHttp 3.0 全部重寫一遍,並將其命名為 OkHttp4。

此次升級主要是受到了 Okio 2 的啟發,而 OkHttp 4 的功能和邏輯,與 OkHttp 3.0 完全一致,等於只是用 Kotlin 將之前的 Java 版本,復刻了一遍。

在僅用 Kotlin 將原專案重寫一遍,帶來了一些資料指標的變化,我們一起來看看。

2.1 程式碼量的比較

從程式碼行數,可以看到,Kotlin 的編寫程式碼量在減少。

  • Java: 25,775 行
  • Kotlin:24,114 行

程式碼行減少了 7%,但是如果嚴格利用 Kotlin 的特性,類似 ConnectionSpec 這個類,可以減少 40% 的程式碼。

2.2 編譯時間

Kotlin 的編譯時間是增加了。

  • Java :2.4 秒
  • Kotlin:10.2 秒

可以看到,Kotlin 的編譯速度,相較於 Java 是變慢了。這主要是因為 Kotlin 的編譯器比通用 Java 編譯器要慢的緣故。

2.3 二進位制大小

因為編譯器的差異,也將導致 Kotlin 編譯後的檔案,會比 Java 編譯後的程式碼要大。

  • Java:415 KiB
  • Kotlin:670 KiB

大約大了 60%,這還是挺令人驚訝的。通過反編譯可以發現,這些額外的程式碼,主要來自 JVM 過載、Kotlin 元資料、空檢查以及伴生物件的程式碼。

三. 小結時刻

作為 Android 開發,現在是時候使用 Kotlin 了。在 Android 開發中,Kotlin 將比 Java 獲得更重要的地位,更多的線上培訓中以及官方 Demo 都會優先使用 Kotlin 做支援,而對 Java 只是 “儘量滿足”,並且有一些功能,可能只提供 Kotlin 的支援,例如本次開源的 Jetpack Compose。

從 OkHttp 的重寫這個事情上來看,Kotlin 編寫的程式碼,雖然編譯速度更慢、編譯的二進位制檔案更大,但是我們開發人員編寫的程式碼將更少。

這些也符合趨勢,程式設計師做的更少,機器做的更多,不過我相信 Google 在後期應該也會針對這些情況做一些優化,以達到滿足生產的需求。

reference:

github-issues

metrics-for-okhttps-kotlin-upgrade

本文對你有幫助嗎?留言、轉發、收藏是最大的支援,謝謝!


公眾號後臺回覆成長『成長』,將會得到我準備的學習資料,也能回覆『加群』,一起學習進步;你還能回覆『提問』,向我發起提問。

相關推薦

AS負責人不必Kotlin重寫OkHttpKotlin重寫OkHttp 4.0!

雖然 Android Studio 的負責人 Jeffery 已經澄清,只是 Kotlin-First 而不是 Kotlin-Must,並不需要將 App 用 Kotlin 重寫一遍。但是 OkHttp 已經開始用 Kotlin 重寫的工作,我們來看看這次重寫後帶來的差異。 一. 序 在今年的 Googl

為了練好口語你敢不敢每天讀堅持一個月

What are you trying to say?(你到底想說什麼?) Don't be silly.(別胡鬧了。) How strong are your glasses?(你近視多少度?) Just because.(沒有別的原因。) It isn't the way I hoped it w

我們做不到刀劈死它能夠先切斷它的根腳趾頭

基於web 設計 方式 做人 能夠 類別 logo -m data- 最先取名“殺死Excel”,後來認為做人應該低調。就取名“面對Excel和Google docs,我們照樣創新”。 Chrome顛覆IE。 iPhone顛覆微軟Windows Mobile

Qt容器類的對象模型及應用(線性結構篇:對於QList來說sharable默認是false的對於接下來講的QVector來說sharable默認是true)

連續 ble begin 當我 保存 img article net 內容 用Qt做過項目開發的人,肯定使用過諸如QList、QVector、QLinkList這樣的模板容器類,它們雖然名字長的不同,但使用方法都大致相同, 因為其使用方法都大體相同,很多人可能隨便拿一個容器

兩個物件值相同(x.equals(y) == true)卻可有不同的 hash code這句話對不對?

答:不對,如果兩個物件 x 和 y 滿足 x.equals(y) == true,它們的雜湊碼(hash code)應當相同。Java 對於 eqauls 方法和 hashCode 方法是這樣規定的:(1)如果兩個物件相同(equals 方法返回 true ),那麼它們的 hashCode

機器翻譯雖然火距離取代人工翻譯還有段距離

智造觀點 對現在發展迅猛的人工智慧來說,大多數人們很容易誤讀和高估其取得的成就。而這一點在人類語言領域中尤為明顯,因為在這個領域,一些表象的進步就很容易被錯誤的暗示成AI具備更深層的能力。   過去的一年,很多像聊天機器人等這類的應用程式,已經可以像人類

C語言陣列1. 簡單約瑟夫環問題: N個人編號從1~N圍成輸入個數T從1號開始報數報到T的人出圈;下人又從1開始報數下一個報到T的人出圈輸出出圈順序。 考慮問實現約瑟夫環問題

1. 簡單約瑟夫環問題: N個人,編號從1~N圍成一圈,輸入一個數T,從1號開始報數,報到T的人出圈;下一人又從1開始報數,下一個報到T的人出圈,輸出出圈順序。 考慮問題: 報到T的人出圈,怎麼表示出圈?要麼刪除對應的標號,其他的標號前移(如果是陣列結構,要依次移動

網路連線正常訪問網路上的共享檔案時報“計算機已從網路斷開”錯誤

日常工作中,有的時候我們會用到ftp輸入網址,來訪問網路上的貢獻資源,但有時會遇到如下報錯:大多數時候,遇到報錯,一般是和自己電腦的IE設定有關,雙擊IE,顯示當前為離線狀態,當然不能選擇 保持離線狀態,需要點選“連線”之後,便可進行ftp訪問網路上的共享資源,前提IE的安全

mis文件重新安裝MYSQL卡在最後卡在Starting Server刪除註冊表無效的解決方案

div user tar 註冊 分享 c盤 9.png ini 環境變量 前言 由於mis安裝包默認把MYSQL安裝在C盤,所以我想要重新安裝到其他盤,然而卸載後重新安裝就卡在了Starting Server.. 之後在網上查找了刪除註冊表的解決方案,然而還是卡在了

一個岔路口分別通向誠實國和說謊國。 來兩個人已知一個是誠實國的另一個是說謊國的。 誠實國永遠說實話說謊國永遠說謊話。現在你要去說謊國 不知道應該走哪條路需要問這兩個人。請問應該怎麼問?(

一個岔路口分別通向誠實國和說謊國。 來了兩個人,已知一個是誠實國的,另一個是說謊國的。 誠實國永遠說實話,說謊國永遠說謊話。現在你要去說謊國, 但不知道應該走哪條路,需要問這兩個人。請問應該怎麼問?

晚上小白Python寫一個股票提醒系統

碼農小馬七夕節去相親了,見了一個不錯的姑娘,長的非常甜美!聊著聊著很投緣!通過介紹人瞭解到,對方也很滿意~~想著自己單身多年的生活就要結束啦,心裡滿是歡喜,美美噠!但是突然想起年初還有幾萬塊在股市裡面,一直被套著,心裡難受! 為了以後能多一點娶老婆的本錢,日子過的好一點,怎

開發者請注意:Python2 的最後版本將於 4 月釋出它確實是在 1 月 1 日壽命終止

2020 年 1 月 1 日是 Python2 的壽命終止日,這個日期在兩年前經"Python之父" Guido van Rossum 宣佈,此後一直成為開發者社群翹首以盼的一天。 昨天就是這個大快人心的日子,各種變了花樣的喜慶報道不絕於目。調侃的玩笑也不少,比如這個: 還有這個(別信!): 然而

張圖玩內外網不會求高手指點

face process priority down 協議 cto 技術分享 ima 界面 配置使用協議:vlanvrrp vrrp vrid 1 ip 192.168.10.250 虛擬網關 vrrp vrid 1 priority 150 優先

學習自然語言處理張圖

自然語言處理一張圖看懂自然語言處理技術框架 一、前言 正在針對《人工智能產品經理最佳實踐請添加鏈接描述》視頻課程第三部分,關鍵技術篇,進行相關的內容重構,今天整理的部分是自然語言處理技術框架,特地繪制了一張自然語言處理的技術框架圖,在此分享給大家。 二、正文 三、未完待續 個人梳理,未盡之處,歡迎指正。QQ

字串包含n個字元。寫函式將此字串中從第m個字元開始的全部字元複製成為另一個字串。

import java.util.Scanner; public class Main {     public static void main(String[] args) {         Scanne

徹底理解Netty篇文章

Netty到底是什麼 從HTTP說起  有了Netty,你可以實現自己的HTTP伺服器,FTP伺服器,UDP伺服器,RPC伺服器,WebSocket伺服器,Redis的Proxy伺服器,MySQL的Proxy伺服器等等。   我們回顧一下傳統的HTTP伺服器的原理  &n

Android BLE BluetoothAdaper BluetoothLeScanner 為了一個不存在的Bug忙活下午F!

BluetoothLeScanner could not find callback wrapper Skipped 121 frames! The application may be doing too much work on its main thread. 昨天應用剛上

安裝pytorch一直提示下面類似的錯誤忙活晚上後來終於解決 出錯修改 ninja

ERROR conda.core.link:_execute(502): An error occurred while installing package '<unknown>::ninja-1.7.2-0'. PermissionError(13, 'Permission deni

如何在Ubuntu虛擬機器安裝VMware tools調節檢視大小?超簡單的3步可以

一開始學習使用虛擬機器,就覺得檢視太小,看久了螢幕眼睛疼,於是就想著如何擴大檢視。 在瞭解到VMware tools的用處之後,就開始查教程來安裝,可是網上的教程魚龍混雜,各種亂七八糟,可能是每個人的版本不一樣吧,或者是很多資源已經不存在了。 於是弄了很多次都不成功,今天早上剛好看到一個Yo

文中提到的書名影視名去過然後刪除。

楊超越是王思聰內心最深的恐懼 - 烏有之鄉http://www.wyzxwk.com/Article/zatan/2018/08/392921.html   對於這些“二代”們,最形象的展現,莫過於姜文的電影《一步之遙》,我之前也寫過相關的文章:《讓子彈飛》《一步之遙》與《邪不壓正》。這裡面幾個