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

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

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

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

將其Android應(yīng)用的Java代碼遷移到Kotlin

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

如何處理遷移

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

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

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

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

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

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

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

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

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

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

審核編輯 :李倩

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

    關(guān)注

    12

    文章

    3986

    瀏覽量

    133070
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2997

    瀏覽量

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

    關(guān)注

    30

    文章

    4941

    瀏覽量

    73151

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

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

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

    Arm Neoverse CPU上大代碼Java應(yīng)用的性能測試

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

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

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

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

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

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

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

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

    請問將項目從RT1024遷移到RT1064的最快方法是什么?

    我正在將我的項目從基于 RT1024 遷移到基于 RT1064 的下一代產(chǎn)品,是否有快速的方法,或者我只能手動完成? 謝謝!
    發(fā)表于 03-31 06:15

    如何將項目從IAR遷移到Embedded Studio

    本文描述如何將IAR EWARM項目遷移到SEGGER Embedded Studio(簡稱SES)中。
    的頭像 發(fā)表于 02-25 17:11 ?1056次閱讀
    如何將項目從IAR<b class='flag-5'>遷移到</b>Embedded Studio

    Spire.XLS for Android via Java組件說明

    Spire.XLS for Android via Java 是一款專業(yè)的 Android Excel 組件,用于在 Android 手機(jī)應(yīng)用程序中創(chuàng)建、操作和轉(zhuǎn)換 Excel 工作表
    的頭像 發(fā)表于 01-24 12:16 ?818次閱讀
    Spire.XLS for <b class='flag-5'>Android</b> via <b class='flag-5'>Java</b>組件說明

    AKI跨語言調(diào)用庫神助攻C/C++代碼遷移至HarmonyOS NEXT

    /C++代碼快速遷移至HarmonyOS NEXT。憑借卓越的兼容性,AKI已成為廠商與開發(fā)者打造鴻蒙原生應(yīng)用過程中廣泛使用的跨語言調(diào)用解決方案。 AKI是一款專為鴻蒙原生開發(fā)設(shè)計的FFI(外部函數(shù)接口
    發(fā)表于 01-02 17:08

    龍智直播預(yù)告:揭示現(xiàn)代化數(shù)據(jù)管理與版本控制優(yōu)勢、從SVN遷移到Helix Core的實踐指導(dǎo)、遷移步驟等

    2025年1月9日(周四)14:00-14:45,Perforce中國授權(quán)合作伙伴-龍智將在線直播,分享為何您的傳統(tǒng)數(shù)據(jù)管理與版本控制系統(tǒng)需要升級、Perforce Helix Core的顯著優(yōu)勢,以及如何遷移到Helix Core等實用見解,以為您的數(shù)據(jù)管理與版本控制系統(tǒng)現(xiàn)代化轉(zhuǎn)型提供有力支持。
    的頭像 發(fā)表于 12-16 15:35 ?626次閱讀
    龍智直播預(yù)告:揭示現(xiàn)代化數(shù)據(jù)管理與版本控制優(yōu)勢、從SVN<b class='flag-5'>遷移到</b>Helix Core的實踐指導(dǎo)、<b class='flag-5'>遷移</b>步驟等