【轉】Kotlin 新版來了,支持跨平臺!

作者:Tamic
原文鏈接:juejin.im/post/5cd8f9…

谷歌在今年的 I/O 大會上宣布,Kotlin 編程語言現在是 Android 應用程序開發人員的首選語言(谷歌宣布 Kotlin 成為安卓開發首選)。 還有一個好消息, Kotlin 1.3.30 正式發布,做了對apple的支持。離上次發布1.3 時間過去半年。本次的該版本主要覆蓋 1.3 版本的問題修復和工具完善。版本更新的主要范圍為 Kotlin/Native、KAPT 的性能優化以及對 IntelliJ IDEA 的支持優化。 我們來回顧下 1.3的 新特性 穩定的協程 Kotlin/Native Beta 多平臺項目和工具 用于 Kotlin/Native 和多平臺的工具Ktor 1.0 Beta

本次版本帶來的牛逼特性主要對1.3完善,并且做了工具上的支持。

KAPT 支持注解處理器增量編譯

KAPT 已經支持注解處理器增量編譯,該特性仍處灰度實驗階段,你可以通過在gradle.properties中添加以下配置來啟用它: kapt.incremental.apt=true 需要指出的是,在現有版本中引入任何非增量編譯的注解處理器或者依賴的變化(截止目前,包括內部聲明的修改)都會導致該模塊的注解處理過程退化為非增量模式。 KAPT: 其他提升 引入了兩個配置來提升編譯性能。其一是使用 Gradle workers: 這個版本也對它做了優化。另一個是 1.3.20 引入的,開啟 Compile Avoidance,就是說依賴如果只有方法體發生變化,那么就跳過注解處理。只有在所有的注解處理器都顯式的在注解處理的 classpath 聲明的情況下,Compile Avoidance 才會生效。

無符號數組的擴展方法

從 1.3 開始我們可以在開發模式下使用無符號數值類型。這個版本我們對無符號類型以及其數組做了更多的支持: 需要注意的是,我們之前就可以在無符號數組上使用函數式操作例如 filter 和 map ,這是因為無符號類型的數組實際上是實現了 Collection 接口的,例如 UIntArray 實現了 Collection 接口。 不過這樣就涉及到了性能問題,因為在 UIntArray 被當作 Collection的實例使用時會額外 創建 一個對象出來。現在好了,所有新增的擴展函數都使用無符號數組類型作為 receiver 以消除額外的對象創建開銷。因此不用擔心,現在無符號數組和常規數值類型的數組從使用的角度來講沒有什么兩樣,不會有任何額外的開銷了。

Kotlin/Native

Kotlin/Native 支持的目標平臺有: Windows 32 位(mingw_x86)。除此之外,Windows 和 macOS 用戶也可以混合編譯 Kotlin/Native 程序到 Linux x86-64、arm32 以及 Android 和 Raspberry PI 環境上。

Kotlin/Native 對 Apple 平臺的支持

對 Apple 平臺的支持也有提升。iOS 上未處理的異常信息會被輸出到 iOS 崩潰日志當中,iOS 和 macOS 上的異常堆棧(調試模式)也會包含符號信息。 現在也可以使用命令行參數 -Xstatic-framework 或者以下 Gradle 腳本來構建靜態庫: 需要注意的一點,現階段官方表示拉取和編譯這些依賴仍然需要一個 Xcode 工程。

Kotlin/Native IDE 支持

接下來我們同步下我們的 IDE 對 Kotlin/Native 的支持工作的進展。 除 IntelliJ IDEA 之外,我們也將發布 Kotlin/Native 插件支持 CLion 2019.1、AppCode 2019.1。C interop 描述文件 (.def) 后續也會得到所有 IDE 的支持,盡管目前代碼補全功能還沒有上線。 對于 CLion and AppCode, 我們也支持了異常堆棧跳轉源碼的支持。

IntelliJ IDEA 支持

調試功能的提升

當你在調試協程代碼時,你可以看到有一個單獨的異步堆棧 “Async stack trace” 顯示掛起時的變量。 當程序在 suspend 函數或者 Lambda(例子的第 13行)中的斷點停止時, “Async stack trace” 顯示了變量在上一次掛起時的狀態(12行)。你可以瀏覽 suspend 函數在當前協程中從上一個掛起點的全部的堆棧 (第12、4行)并確認變量的值: 這會幫助你更方便的理解當前協程的運行狀態。 在調試 Kotlin 代碼時,可以選擇 “Kotlin” 模式來查看變量。

Eclipse IDE 插件更新

Eclipse 插件 0.8.14 主要包含以下更新:Kotlin 1.3.30 編譯器支持, 大量的問題修復和整體穩定性的提升。該版本也增加了對 Gradle 工程的實驗性質的支持。你可以用 Eclipse Buildship 導入工程,你會發現 Kotlin 會被正常配置。

指定 JVM 版本

如果你的程序運行在 JVM 9, 10, 11, 或者 12 等版本下,你可以設置 jvmTarget到對應的版本了。這個設置會影響編譯的 class 文件的字節碼版本,但它們不是后向兼容的。相比之下,新目標版本不會有任何字節碼優化也不會有任何新特性,期待后續Kotlin繼續更新。 寫在最后 無論 Google 對Kotlin 賦予什么期望,總而言之,Google提出新的系統和跨平臺方案,意味著Andorid 生態已經向不同領域發力,最近微軟的反擊也預示者,google的跨端計劃已經對微軟形成了火力壓制,坐等大安卓起飛,移動開發下一春不遠了。 于此同時微軟也在大力發展自己的.net語言的跨平臺,并且也在支持 Pyhon開發語言的各種工具,其實是在對 Flutter和Kotlin 提出了挑戰。 大家如何看待 Kotlin 的未來? 歡迎交流

掃一掃 關注我的公眾號【輝輝代碼路】

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536466.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536466.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536466.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WebSocket輕松單臺服務器5w并發jmeter實測

測試結論 nginx最多只能維持(65535*后端服務器IP個數)條websocket的長連接,如果后端websocket服務器IP只有一個,那么就只能最多支持65535條連接。瓶頸就產生在了nginx上建議采用LVS的DR模式來做負載均衡,這樣最大長連接數目就只和websocket服…

人工智能的歷史

AI(Artificial Intelligence)即人工智能,最初是在1956 年被提出,人工智能研究如何用計算機去模擬、延伸和擴展人的智能;如何把計算機用得更聰明;如何設計和建造具有高智能水平的計算機應用系統;如何設計和制造更聰明的…

nginx配置 vue打包后的項目 解決刷新頁面404問題|nginx配置多端訪問

訪問vue頁面時,/# 使url看著不美觀,使用 H5 history模式可以完美解決這個問題,但需要后端nginx幫助。接下來我們自己配置一下。 使用前端路由,但切換新路由時,想要滾動到頁面頂部,或者保持原先的滾動位置&a…

算法導論2nd 10.1-7

為什么80%的碼農都做不了架構師?>>> 思路:兩個隊列q1和q2,兩個隊列指針pusher和poper分別指向q1和q2,push時調用pusher->enqueue,然后將poper里的元素全部dequeue并enqueue到pusher,最后交換…

阿里云Windows2012 R2服務器IPV6配置記錄

要上蘋果APP,則必須要支持IPV6和HTTPS,阿里云本身沒有開放IPV6地址。因此需要進行IPV6的相關配置。查了很多IPV6的配置資料,最終選擇用HE進行IPV6設置。在這過程中遇到一些問題,以記錄下來以備注。 1、IPV6 Tunnel Broker設置 在H…

mycat 1.6.5 for mysql 8分表攻略

2019獨角獸企業重金招聘Python工程師標準>>> 簡述 mycat 對于 mysql 的支持有版本要求,目前 1.6.5 不支持 mysql 8.0 版本。因為mysql 8.0 的加密方式發生了變化。 mycat 1.6.5 連接 mysql 8.0 的兩個方式 mysql 8.0 采用兼容方式,&#xff0…

Funcode-貪吃蛇

自己編寫的一個小游戲,本來打算做貪吃蛇,結果不會使蛇的身子隨蛇頭方向改變而改變就換了種想法,最后變成了這樣一個另類的小游戲,“笑哭“,下面是程序的主要代碼,如果有興趣也可以下載完整程序代碼資源&…

mac 使用遠程連接

https://www.jianshu.com/p/9cc90361f37a轉載于:https://www.cnblogs.com/xiangsj/p/10876400.html

systemtap執行過程中報probe timer.profile registration error

probe timer.profile registration error 今天在執行火焰圖的過程中,代碼報錯,probe timer.profile registration error 經過查詢、分析可能是在該平臺該函數是不安全、不共享的。 將 probe timer.profile { 用該代碼替換即可 probe perf.sw.cpu_clock !…

(十三)java版spring cloud+spring boot+redis社交電子商務平臺-springboot集成spring cache...

電子商務社交平臺源碼請加企鵝求求:一零三八七七四六二六。本文介紹如何在springboot中使用默認的spring cache,聲明式緩存Spring 定義 CacheManager 和 Cache 接口用來統一不同的緩存技術。例如 JCache、 EhCache、 Hazelcast、 Guava、 Redis 等。在使…

搭建gitlab及部署gitlab-runner

2019獨角獸企業重金招聘Python工程師標準>>> 1、搭建gitlab,之前yum安裝gitlab,安裝后一直報502錯誤,網上百度試過還是無法使用; 所以這次部署在docker里面;如下命令: docker run --detach --hostname gitlab.forebix.com --publish 4433:443 --publish …

母牛的故事

母牛的故事 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description 有一對夫婦買了一頭母牛,它從第2年起每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。請編程實現在第n年的時候…

軟件性能測試

通常,衡量一個軟件系統性能的常見指標有: 1、響應時間(服務器端響應時間、網絡響應時間、客戶端響應時間) 那客戶感受的響應時間其實是等于客戶端服務器端網絡響應時間 2、吞吐量 軟件系統在每單位時間內能處理多少個事務/請求/單…

王小二切餅

王小二切餅 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description 王小二自夸刀工不錯&#xff0c;有人放一張大的煎餅在砧板上&#xff0c;問他&#xff1a;“餅不許離開砧板&#xff0c;切n(1<n<100)刀最多能分成多少塊&…

SmoothNLP 中文NLP文本處理工具 Python 實戰示范

SmoothNLP pythonJavaPython python interfaces for SmoothNLP 的 Python 接口&#xff0c; 支持自動下載底層jar包 &#xff0c;目前支持Python3 Pypi 官方安裝 pip3 install smoothnlp 復制代碼請注意使用python3安裝smoothnlp項目&#xff0c;當前版本 version0.2.4 如果您使…

本地緩存Caffeine

Caffeine 說起Guava Cache&#xff0c;很多人都不會陌生&#xff0c;它是Google Guava工具包中的一個非常方便易用的本地化緩存實現&#xff0c;基于LRU算法實現&#xff0c;支持多種緩存過期策略。由于Guava的大量使用&#xff0c;Guava Cache也得到了大量的應用。但是&#x…

《圖解HTTP》核心知識總結

HTTP協議的簡介 HTTP是超文本傳輸協議&#xff0c;用于客戶端和服務器端之間的通信&#xff0c;屬于TCP/IP中的應用層。 HTTP協議的基礎知識 客戶端和服務器端 客戶端是服務請求方&#xff0c;服務器端是服務提供方。 URI和URL URI:URI是統一資源標識符&#xff1b; URL:是統一…

1042: 篩法求素數

1042: 篩法求素數 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 1387 Solved: 918 [Submit][Status][Web Board] Description 用篩法求之N內的素數。 Input N Output 0&#xff5e;N的素數 Sample Input 100 Sample Output 2 3 5 7 11 13 17 19 23 29 31 37 4…

狀態機解析請求行

微信公眾號&#xff1a;鄭爾多斯關注「鄭爾多斯」公眾號 &#xff0c;回復「領取資源」&#xff0c;獲取IT資源500G干貨。升職加薪、當上總經理、出任CEO、迎娶白富美、走上人生巔峰&#xff01;想想還有點小激動關注可了解更多的Nginx知識。任何問題或建議&#xff0c;請公眾號…

GO 從零開始的語法學習二

for循環 if條件里不需要括號 err ! nil 判斷是否為空 func main(){const filename "abc.txt"contents , err : ioutil.ReadFile(filename); err ! nil{fmt.Println(err)} else{fmt.Printf("%s\n",contents)} } 復制代碼if的條件里可以進行賦值if的條件里…