chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

將其Android應用的Java代碼遷移到Kotlin

OSC開源社區(qū) ? 來源:OSC開源社區(qū) ? 作者:OSC開源社區(qū) ? 2022-10-28 15:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Meta 發(fā)布了一篇博客表示,正在將其 Android 應用的 Java 代碼遷移到 Kotlin,并分享了這一過程中的一些經(jīng)驗。

該公司認為,Kotlin 是一種流行的 Android 開發(fā)語言,與 Java 相比具有一些關(guān)鍵優(yōu)勢?!耙虼?,在我們努力使我們的開發(fā)工作流程更加高效的過程中,將 Meta 的 Android 開發(fā)轉(zhuǎn)向 Kotlin 是非常合理的。..。..Kotlin 通常被認為是一種比 Java 更好的語言,在年度 Stack Overflow 開發(fā)者調(diào)查中,它的好感度要高于 Java?!?/p>

除了受歡迎程度外,Meta 還將最新的 Kotlin 版本與 Java 11(可用于 Android 開發(fā)的最新版本)進行了比較,并得出了 Kotlin 的一些主要優(yōu)勢:可空性、函數(shù)式編程、更短的代碼、以及領(lǐng)域特定語言 (DSL) / 類型安全構(gòu)建器等。

Facebook 軟件工程師 Omer Strulovich 指出,Meta 旗下幾個流行的 Android 應用 --Facebook、Instagram、Messenger、Portal 和 Quest 都已經(jīng)開始從 Java 轉(zhuǎn)向 Kotlin。截至目前,F(xiàn)acebook、Messenger 和 Instagram 的 Android 應用程序都有超過 100 萬行 Kotlin 代碼,并且轉(zhuǎn)換率正在提高。Meta 的 Android 代碼庫總共已包含有超過 1000 萬行的 Kotlin 代碼。作為此次遷移的一部分,Meta 透露其也正在開源用于操作 Kotlin 代碼的各種示例和實用程序。

不過,采用 Kotlin 也有一些不能忽視的缺點。博客內(nèi)容指出,比如:兩種語言的混合代碼庫需要長時間的處理維護;以及 Kotlin 與 Java 相比,流行度還是存在明顯的差距,這意味著 Kotlin 可用的工具也更少。更糟糕的是所有 Kotlin 工具還都需要考慮 Kotlin 和 Java 的互操作性,這使得它們的實現(xiàn)就變得復雜。

最大的問題還在于構(gòu)建時間?!拔覀儚囊婚_始就知道 Kotlin 的構(gòu)建時間會比 Java 的要長。該語言及其生態(tài)系統(tǒng)更加復雜,Java 在優(yōu)化其編譯器方面領(lǐng)先了 20 年。由于我們擁有多個大型應用程序,較長的構(gòu)建時間可能會對我們的開發(fā)人員體驗產(chǎn)生負面影響?!?/p>

如何處理遷移

Meta 稱,遷移到 Kotlin 既簡單又非常復雜。因為 Kotlin 的設計允許從 Java 進行簡單的轉(zhuǎn)換,并具有經(jīng)過深思熟慮的互操作性。這種設計使 JetBrains 能夠為開發(fā)人員社區(qū)提供 J2K,即 IntelliJ/Android Studio 中的 Java 到 Kotlin 轉(zhuǎn)換器。但 J2K 不是萬能的,遷移中的有些情況仍然很復雜。

遷移之前,該公司考慮了兩個選擇:

一個是可以使用 Kotlin 在 Meta 上編寫新代碼,但將大部分現(xiàn)有代碼保留在 Java 中。

還有一個是可以嘗試將幾乎所有內(nèi)部代碼轉(zhuǎn)換為 Kotlin。

第一個選項的優(yōu)勢很明顯,即少得多的工作量;但是這種方法也有兩個明顯的缺點。首先,在 Kotlin 和 Java 代碼之間實現(xiàn)互操作性引入了 Kotlin 中 platform types 的使用。platform types 會導致運行時空指針取消引用,從而導致崩潰,破壞了純 Kotlin 代碼提供的靜態(tài)安全優(yōu)勢。在一些復雜的情況下,Kotlin 的空檢查省略還可能漏掉空值通過,進而引發(fā)空指針異常。例如,如果 Kotlin 代碼調(diào)用由 Java 接口實現(xiàn)的 Kotlin 接口,就會發(fā)生這種情況。其他問題包括 Java 無法將類型參數(shù)標記為可空性(直到最近才修復),以及 Kotlin 的重載規(guī)則考慮了可空性,而 Java 的重載規(guī)則卻沒有。

第二個缺點是考慮到 Meta 的大多數(shù)軟件開發(fā)都需要修改現(xiàn)有代碼。“如果我們的大部分代碼都是用 Java 編寫的,我們就無法讓我們的開發(fā)人員充分享受 Kotlin 的樂趣。由于遷移是一個漫長的過程,期望每個工程師在接觸文件之前將文件轉(zhuǎn)換為 Kotlin 既費力又低效。”

因此,Meta 方面最終選擇了第二條選項,決定將幾乎所有代碼轉(zhuǎn)換為 Kotlin。而在嘗試為現(xiàn)有應用程序引入 Kotlin 時,Meta 也遇到了很多麻煩,例如需要更新 Redex 以支持 Java 不生成的字節(jié)碼模式。以及使用的某些內(nèi)部庫依賴于在編譯期間進行字節(jié)碼轉(zhuǎn)換來獲取更好的性能。而將其作為 Kotlin 編譯的一部分運行時,這部分代碼則無法生效。為此,Meta 專門構(gòu)建了解決工具。

此外,他們還發(fā)現(xiàn)在現(xiàn)有工具中存在的一些差異。例如代碼審查或 wiki 中缺少 Kotlin 語法高亮顯示?!拔覀兏铝宋覀冋谑褂玫膸?Pygments,以使體驗與 Java 相媲美。我們更新了一些內(nèi)部代碼修改工具,以便能夠處理 Kotlin。我們還構(gòu)建了 Ktfmt,這是一個基于 google-java-format 的代碼和理念的確定性 Kotlin 格式化程序?!?/p>

準備好所有工具后,Meta 就可以正式開始批量轉(zhuǎn)換大量代碼?!半S著我們工具的改進,我們已經(jīng)能夠?qū)⑾喈敶蟮囊徊糠执a轉(zhuǎn)換成 Kotlin。我們的代碼庫中已經(jīng)有超過 1000 萬行 Kotlin 代碼,而且 Meta 的大多數(shù) Android 開發(fā)人員現(xiàn)在都在編寫 Kotlin 代碼”。平均而言,此次遷移使代碼行數(shù)減少了 11%。

Meta 方面表示,其向 Kotlin 的遷移仍在進行中并在加速。“我們已經(jīng)允許 Meta 的任何想要使用 Kotlin 的 Android 開發(fā)人員這樣做,并為他們提供了工具來輕松地將現(xiàn)有代碼遷移到 Kotlin。Kotlin 仍然缺少一些我們在使用 Java 時已經(jīng)習慣的工具和優(yōu)化。但我們正在努力縮小這些差距。隨著我們?nèi)〉眠M展以及這些工具和庫的成熟,我們還將努力將它們反饋給社區(qū)?!?/p>

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    4035

    瀏覽量

    134441
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    3005

    瀏覽量

    116804
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4975

    瀏覽量

    74347

原文標題:已超1000萬行代碼,Java再次輸給了Kotlin...

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    2022全新版!Java分布式架構(gòu)設計與開發(fā)實戰(zhàn)(完結(jié))

    2022全新版!Java分布式架構(gòu)設計與開發(fā)實戰(zhàn)(完結(jié)) 分庫分表實戰(zhàn):Java海量數(shù)據(jù)存儲架構(gòu)設計 在現(xiàn)代互聯(lián)網(wǎng)應用中,隨著業(yè)務規(guī)模的指數(shù)級增長,數(shù)據(jù)庫性能瓶頸已成為制約系統(tǒng)發(fā)展的關(guān)鍵因素。當單
    發(fā)表于 03-30 15:20

    深入解析rk平臺Android Bootloader核心代碼:從啟動流程到AVB驗證

    android_bootloader.c的核心代碼,帶你讀懂Android設備從Bootloader到內(nèi)核的完整啟動邏輯,以及開發(fā)者關(guān)注這些代碼的核心價值。 一、
    的頭像 發(fā)表于 01-22 07:06 ?461次閱讀
    深入解析rk平臺<b class='flag-5'>Android</b> Bootloader核心<b class='flag-5'>代碼</b>:從啟動流程到AVB驗證

    電子材料抗離子遷移方案!東亞合成 IXE/IXEPLAS,智美行科技免費試樣

    離子遷移是電子材料失效的主要原因之一,封裝材料中的 Na?、Cl?、Cu2?、Ag?等雜質(zhì)離子,在電場、溫濕度等環(huán)境因素作用下,會從材料內(nèi)部遷移到布線表面或間隙中,形成導電通路,引發(fā)布線腐蝕、電路
    的頭像 發(fā)表于 12-16 16:07 ?801次閱讀
    電子材料抗離子<b class='flag-5'>遷移</b>方案!東亞合成 IXE/IXEPLAS,智美行科技免費試樣

    無質(zhì)量損失的數(shù)據(jù)遷移:Nikon SLM Solutions信賴3Dfindit企業(yè)版

    使用轉(zhuǎn)換器將CAD數(shù)據(jù)從一個系統(tǒng)傳輸?shù)搅硪粋€系統(tǒng),但這往往會導致數(shù)據(jù)的質(zhì)量下降。因此,該公司決定使用3Dfindit企業(yè)版將CAD數(shù)據(jù)遷移到新系統(tǒng),便不會造成任何質(zhì)量損失。這樣,在保持最高數(shù)據(jù)質(zhì)量
    發(fā)表于 11-25 10:06

    如何基于開發(fā)板RK3568 Android 11強制所有應用橫屏展示

    RK3568 Android 11強制所有應用橫屏展示,1、打開frameworks/base/core/java/android/content/pm/parsing/component
    的頭像 發(fā)表于 11-07 16:07 ?863次閱讀
    如何基于開發(fā)板RK3568 <b class='flag-5'>Android</b> 11強制所有應用橫屏展示

    Arm Neoverse CPU上大代碼Java應用的性能測試

    Java 是互聯(lián)網(wǎng)領(lǐng)域廣泛使用的編程語言。Java 應用的一些特性使其性能表現(xiàn)與提前編譯的原生應用(例如 C 程序)大相徑庭。由于 Java 字節(jié)碼無法直接在 CPU 上執(zhí)行,因此通常運行時在
    的頭像 發(fā)表于 11-05 11:25 ?913次閱讀
    Arm Neoverse CPU上大<b class='flag-5'>代碼</b>量<b class='flag-5'>Java</b>應用的性能測試

    Java 25正式發(fā)布,重要特性詳解(附代碼示例):靈活構(gòu)造函數(shù)體、模塊導入聲明、AOT方法分析等

    Java 25現(xiàn)已發(fā)布,更多新特性來了!配合Perforce JRebel,代碼修改即時生效,無需重啟服務,即可實現(xiàn)“改完就看效果”。新特性+快工具,讓你的Java開發(fā)體驗雙倍提升!
    的頭像 發(fā)表于 10-29 13:16 ?1662次閱讀
    <b class='flag-5'>Java</b> 25正式發(fā)布,重要特性詳解(附<b class='flag-5'>代碼</b>示例):靈活構(gòu)造函數(shù)體、模塊導入聲明、AOT方法分析等

    如何在Keil中將NuMicro BSP從Arm編譯器5遷移到編譯器6?

    在Keil中將NuMicro BSP從Arm編譯器5遷移到編譯器6!
    發(fā)表于 08-20 06:29

    Perforce JRebel 簡介:即時加載代碼變更,加速Java應用開發(fā)

    Perforce JRebel 專為Java開發(fā)提速而生!支持跳過構(gòu)建與重新部署,實時加載代碼變更,支持100+框架,無縫集成主流IDE與應用服務器。
    的頭像 發(fā)表于 08-14 14:35 ?955次閱讀
    Perforce JRebel 簡介:即時加載<b class='flag-5'>代碼</b>變更,加速<b class='flag-5'>Java</b>應用開發(fā)

    ArkUI-X平臺橋接Bridge說明

    介紹如何通過平臺橋接編寫自定義的Android、iOS平臺代碼。ArkUI側(cè)具體用法請參考Bridge API,Android側(cè)參考BridgePlugin,iOS側(cè)參考BridgePlugin
    發(fā)表于 06-19 23:12

    ArkUI-X與Android橋接通信之方法回調(diào)

    ) => { console.error(\'error: \' + JSON.stringify(err)); }); 2.在Android側(cè)實現(xiàn)被調(diào)用的方法。 // xxx.java
    發(fā)表于 06-08 22:16

    ArkUI-X與Android消息通信

    ) => { console.log(\'error: \' + JSON.stringify(err)); }); 2.Android側(cè)接收來自ArkUI側(cè)的數(shù)據(jù)。 // xxx.java
    發(fā)表于 06-08 22:15

    Kuikly鴻蒙版正式開源 —— 揭秘卓越性能適配之旅

    、小程序Q2開源) 原生級性能體驗:得益于 KMP 跨平臺能力,Kuikly 將 Kotlin 代碼編譯成各個平臺原生產(chǎn)物,從而獲得接近原生平臺的執(zhí)行性能。 Kotlin語言驅(qū)動,純原生開發(fā)工具鏈:復用
    發(fā)表于 06-04 16:46

    從Keil MDK到IAR EWARM:通過工程遷移實現(xiàn)項目資產(chǎn)的更好管理

    對于需要統(tǒng)一開發(fā)環(huán)境或涉及多核架構(gòu)(如Cortex-A/R)的項目,越來越多的用戶選擇從Keil MDK遷移到IAR EWARM。這就會面臨著需要將之前的Keil MDK工程遷移到IAR EWARM的問題。本文將介紹如何高效完成這一遷移
    的頭像 發(fā)表于 05-08 09:03 ?1463次閱讀
    從Keil MDK到IAR EWARM:通過工程<b class='flag-5'>遷移</b>實現(xiàn)項目資產(chǎn)的更好管理

    Java開發(fā)者必備的效率工具——Perforce JRebel是什么?為什么很多Java開發(fā)者在用?

    Perforce JRebel是一款Java開發(fā)效率工具,旨在幫助java開發(fā)人員更快地編寫更好的應用程序。JRebel可即時重新加載對代碼的修改,無需重啟或重新部署應用程序,就能讓開發(fā)者即時看到
    的頭像 發(fā)表于 04-27 13:44 ?959次閱讀
    <b class='flag-5'>Java</b>開發(fā)者必備的效率工具——Perforce JRebel是什么?為什么很多<b class='flag-5'>Java</b>開發(fā)者在用?