在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

OSC開(kāi)源社區(qū) ? 來(lái)源:OSC開(kāi)源社區(qū) ? 作者:OSC開(kāi)源社區(qū) ? 2022-10-28 15:15 ? 次閱讀

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

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

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

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

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

最大的問(wèn)題還在于構(gòu)建時(shí)間。“我們從一開(kāi)始就知道 Kotlin 的構(gòu)建時(shí)間會(huì)比 Java 的要長(zhǎng)。該語(yǔ)言及其生態(tài)系統(tǒng)更加復(fù)雜,Java 在優(yōu)化其編譯器方面領(lǐng)先了 20 年。由于我們擁有多個(gè)大型應(yīng)用程序,較長(zhǎng)的構(gòu)建時(shí)間可能會(huì)對(duì)我們的開(kāi)發(fā)人員體驗(yàn)產(chǎn)生負(fù)面影響。”

如何處理遷移

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

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

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

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

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

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

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

此外,他們還發(fā)現(xiàn)在現(xiàn)有工具中存在的一些差異。例如代碼審查或 wiki 中缺少 Kotlin 語(yǔ)法高亮顯示。“我們更新了我們正在使用的庫(kù) Pygments,以使體驗(yàn)與 Java 相媲美。我們更新了一些內(nèi)部代碼修改工具,以便能夠處理 Kotlin。我們還構(gòu)建了 Ktfmt,這是一個(gè)基于 google-java-format 的代碼和理念的確定性 Kotlin 格式化程序。”

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

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

審核編輯 :李倩

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

    關(guān)注

    12

    文章

    3964

    瀏覽量

    129567
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2984

    瀏覽量

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

    關(guān)注

    30

    文章

    4887

    瀏覽量

    70260

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

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

收藏 人收藏

    評(píng)論

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

    如何將項(xiàng)目從IAR遷移到Embedded Studio

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

    Spire.XLS for Android via Java組件說(shuō)明

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

    從INA219遷移到INA232

    電子發(fā)燒友網(wǎng)站提供《從INA219遷移到INA232.pdf》資料免費(fèi)下載
    發(fā)表于 11-14 14:17 ?1次下載
    從INA219<b class='flag-5'>遷移到</b>INA232

    從USCI模塊遷移到eUSCI模塊

    電子發(fā)燒友網(wǎng)站提供《從USCI模塊遷移到eUSCI模塊.pdf》資料免費(fèi)下載
    發(fā)表于 10-18 10:39 ?0次下載
    從USCI模塊<b class='flag-5'>遷移到</b>eUSCI模塊

    從TMS320VC5509遷移到TMS320VC5509A

    電子發(fā)燒友網(wǎng)站提供《從TMS320VC5509遷移到TMS320VC5509A.pdf》資料免費(fèi)下載
    發(fā)表于 10-17 10:38 ?0次下載
    從TMS320VC5509<b class='flag-5'>遷移到</b>TMS320VC5509A

    從TMS320C64x遷移到TMS320C64x+

    電子發(fā)燒友網(wǎng)站提供《從TMS320C64x遷移到TMS320C64x+.pdf》資料免費(fèi)下載
    發(fā)表于 10-16 10:26 ?0次下載
    從TMS320C64x<b class='flag-5'>遷移到</b>TMS320C64x+

    從OMAP3530遷移到AM37x

    電子發(fā)燒友網(wǎng)站提供《從OMAP3530遷移到AM37x.pdf》資料免費(fèi)下載
    發(fā)表于 10-14 11:39 ?0次下載
    從OMAP3530<b class='flag-5'>遷移到</b>AM37x

    從TMS320DM6467遷移到TMS320DM6467T

    電子發(fā)燒友網(wǎng)站提供《從TMS320DM6467遷移到TMS320DM6467T.pdf》資料免費(fèi)下載
    發(fā)表于 10-14 11:30 ?0次下載
    從TMS320DM6467<b class='flag-5'>遷移到</b>TMS320DM6467T

    從TMS320DM6446 594MHz遷移到810MHz

    電子發(fā)燒友網(wǎng)站提供《從TMS320DM6446 594MHz遷移到810MHz.pdf》資料免費(fèi)下載
    發(fā)表于 10-14 11:18 ?0次下載
    從TMS320DM6446 594MHz<b class='flag-5'>遷移到</b>810MHz

    從TMS320C6455遷移到TMS320C6474

    電子發(fā)燒友網(wǎng)站提供《從TMS320C6455遷移到TMS320C6474.pdf》資料免費(fèi)下載
    發(fā)表于 10-14 09:20 ?0次下載
    從TMS320C6455<b class='flag-5'>遷移到</b>TMS320C6474

    從TMS320C5515/05遷移到TMS320C5535/34/33/32

    電子發(fā)燒友網(wǎng)站提供《從TMS320C5515/05遷移到TMS320C5535/34/33/32.pdf》資料免費(fèi)下載
    發(fā)表于 10-12 10:53 ?0次下載
    從TMS320C5515/05<b class='flag-5'>遷移到</b>TMS320C5535/34/33/32

    從TMS320C5515遷移到TMS320C5517

    電子發(fā)燒友網(wǎng)站提供《從TMS320C5515遷移到TMS320C5517.pdf》資料免費(fèi)下載
    發(fā)表于 10-12 10:40 ?0次下載
    從TMS320C5515<b class='flag-5'>遷移到</b>TMS320C5517

    從OMAP3530遷移到AM35x

    電子發(fā)燒友網(wǎng)站提供《從OMAP3530遷移到AM35x.pdf》資料免費(fèi)下載
    發(fā)表于 10-12 09:26 ?0次下載
    從OMAP3530<b class='flag-5'>遷移到</b>AM35x

    IT資源遷移到云服務(wù)器的關(guān)鍵因素

    隨著云計(jì)算技術(shù)的不斷成熟和普及,越來(lái)越多的企業(yè)選擇將他們的IT資源遷移到云服務(wù)器上。這種轉(zhuǎn)變不僅可以降低成本、提高靈活性,還可以提升安全性和效率。本文將深入探討將IT資源遷移到云服務(wù)器的重要性、優(yōu)勢(shì)
    的頭像 發(fā)表于 09-18 11:21 ?532次閱讀

    遷移到基于Arm STM32的MSPMO指南

    電子發(fā)燒友網(wǎng)站提供《從遷移到基于Arm STM32的MSPMO指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-07 11:17 ?0次下載
    從<b class='flag-5'>遷移到</b>基于Arm STM32的MSPMO指南
    主站蜘蛛池模板: 黄色福利站 | 欧美一区亚洲 | 欧美福利精品 | 视频在线播放免费 | 久久www免费人成看片色多多 | 午夜性影院 | 欧美一区二区三区激情啪啪 | 黄色刺激网站 | 久久久中文 | 欧美在线视频看看 | 乱妇伦小说 | 美女被免费网站91色 | 亚洲人成a在线网站 | 午夜影网 | 2017天天干夜夜操 | 男操女视频网站 | 日韩午夜精品 | 黄网免费 | 久久婷婷国产一区二区三区 | 日韩一二三级 | 日日摸夜夜爽夜夜爽出水 | 乱高h亲女| 国产欧美日韩在线人成aaaa | 亚洲涩综合 | 欧美黄色片免费看 | 狠狠操狠狠操 | 99热一区 | 夜夜欢视频 | 日本网络视频www色高清免费 | 啪啪免费观看 | 色婷婷精品大全在线视频 | 在线精品91青草国产在线观看 | 啊用力太猛了啊好深视频免费 | 经典三级一区二区三区视频 | 午夜色视频在线观看 | 亚洲色吧 | 天天躁夜夜躁狠狠躁躁88 | 日本电影在线观看黄 | 日韩毛片高清免费 | 亚洲专区一路线二 | 久久综合社区 |