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

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

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

3天內不再提示

重新構想前端開發!Kotlin推出新功能

jf_8lIj6kO1 ? 來源:InfoQ ? 2023-02-23 09:58 ? 次閱讀

近日,JetBrains 發布了 Kotlin 1.8.20 beta 版本,其中包括一項名為“Kotlin/Wasm”的實驗性功能,明確將 WebAssembly 設為編譯目標。據介紹,新版本依賴于原生 Wasm 垃圾收集功能 WasmGC,后者同樣處于早期開發階段。

JetBrains 總結了 Kotlin/Wasm 的優勢:

  • 與 wasm32 Kotlin/Native 目標相比,Kotlin/Wasm 的編譯速度更快,因為后者不必使用 LLVM。

  • 由于 Wasm 垃圾收集支持,與 wasm32 目標相比,Kotlin/Wasm 與 JS 的互操作性、與瀏覽器的集成更容易。

  • 與 Kotlin/JS 和 JavaScript 相比,Kotlin/Wasm 應用程序啟動時間可能更快,因為 Wasm 具有緊湊且易于解析的字節代碼。

  • 與 Kotlin/JS 和 JavaScript 相比,Kotlin/Wasm 應用程序運行時性能更快,因為 Wasm 是一種靜態類型語言。

不過,目前還沒有 IDE 為 Kotlin/Wasm 提供支持。JetBrains 在版本發行說明中提到,“我們以開箱即用的形式,為 Kotlin/Wasm 提供 Kotlin 標準庫(stdlib)和測試庫(kotlin/test)。”

7bd7c1d2-b30c-11ed-bfe3-dac502259ad0.png

瀏覽器中運行的 Kotlin/Wasm 演示

此前,通過基于 LLVM 的 Kotlin-Native 編譯指向和 LLVM Wasm 支持,Kotlin 已經能夠在某種程度上實現向 Wasm 的編譯,這種舊方法被稱為 wasm32。隨著新版本的發布,該方法將成為被棄用的多種 Kotlin/Native 編譯目標之一。

作為一種 JVM 語言,Kotlin 具備垃圾收集機制,但此前 Wasm 一直無法原生支持垃圾收集,這就要求各垃圾收集語言自行提供解決方案。Wasm-gc 就是其中一項提案,承諾“對高級語言做出有效支持”。此次,這一設計有望超越自定義解決方案,并減少應用程序的二進制文件大小。Wasm-gc 可通過瀏覽器 Flag 在最新版本的 Chrome、Firefox 和 Edge 上啟用。

Kotlin 的“通用型語言”理想

早在 2017 年,主流瀏覽器都已經支持 WebAssembly。隨著 WebAssembly 的蓬勃發展,各種編程語言也在增加對其的支持。比如,C/C++、Rust、Golang 等已支持將語言編譯到 WebAssembly 目標平臺,Lua、JavaScript、Ruby 和 Python 等支持將語言的虛擬機或解釋器編譯到 WebAssembly 平臺。

2021 年,WebAssembly 開源項目開始支持 GC(垃圾回收器),為實現 WebAssembly 支持像 Java、Kotlin 這樣的前端語言做準備。同年,Kotlin 程序語言開發團隊更新了發展路線,其中的一個重點就是增加 WebAssembly 支持。

Kotlin 總項目經理 Egor Tolstoy 表示,他們認為 WebAssembly 會成為未來創建豐富網頁應用程序的新標準,而 Kotlin 必需要能夠完美的提供支持。因此官方火力全開,組建了一個專門團隊來開發 Kotlin/Wasm 工作,并且與 WebAssembly 垃圾回收提案作者緊密合作,要實現 Kotlin 語言的基本功能、函數庫和基本 Gradle 的支持,還要添加實驗性 JavaScript 互通操作功能。

Kotlin 在 2017 Google 發表聲明后總被當成是安卓專用開發語言,但實際上,Kotlin 正在積極地向多平臺語言演進,即“通用型語言”。

如今,JetBrains 提供了多個支持多平臺的庫,如 kotlinx.coroutines、kotlinx.serialization、kotlinx-datetime。而 Kotlin 社區也緊跟著這樣的趨勢發展,出現了愈來愈多的庫、框架來支持多平臺,如 Arrow、Okio、Apollo 等在新版本中都支持了多平臺開發。

Kotlin/Wasm 究竟有什么潛力

在最初的設計中,WebAssembly 只是 C、C++ 或 Rust 這些低級語言的編譯目標。至于 Python、Ruby 甚至是 JavaScript 等動態語言,能充當解釋性的虛擬機即可。

但 WebAssembly 垃圾收集(GC)的貢獻者們正努力把它打造成垃圾收集語言(例如 Java、Kotlin 或 Dart)的編譯目標,并停止使用 JavaScript 作為 Web 字節碼。此外,他們還考慮把其他語言也都轉化成前端開發中的理想選項,而不必像 TypeScript 那樣把一切先編譯成 JavaScript。

請注意,這些語言已經能夠在各個應用程序內提供自己的自定義垃圾收集,借此實現對 WebAssembly 的編譯。這樣做的缺點就是這樣生成的工件會更大,所以也不知道 WasmGC 真正推出時,原來的這種處理方式還有沒有競爭力。

WasmGC 的實現源自 Chrome、Firefox、Edge 和 Safari 四大瀏覽器的一個持續性項目,目前需要使用 Flag 加以啟用(例如,在 Chrome 或 Edge 上,需要使用 --js-flags=--experimental-wasm-gc 命令行參數)。正是因為達不到開箱即用的程度,所以該技術目前還沒能得到廣泛采用。

但是,當 WasmGC 步入第四階段并在大多數瀏覽器中實現開箱即用后,能夠利用 WasmGC 的語言將迎來顯著的競爭優勢。

在 VMware 從事 Spring Framework 工作的 Sébastien Deleuze 稱,Kotlin/Wasm 很早就在關注 WasmGC,谷歌也在使用 J2CL 和 Dart 在 Google Sheets 中將 Java 編譯為 WasmGC。

前端(及全棧)開發

“因為要求開發者同時了解 Kotlin 和 JavaScript 兩套生態系統,所以我個人一直對 Kotlin/JS 不太感冒,但 Kotlin/Wasm 確實是個重塑前端開發面貌的好機會?!盌eleuze 表示,“當然,Kotlin/Wasm 必須要提供良好的 JavaScript 互操作性(它也確實做到了),并作為可選項。”

目前,Kotlin/Wasm 提供 DOM API,所以某些 Kotlin/Wasm 前端框架可能已經足夠成為前端開發的理想選擇。Deleuze 表示自己可能也會試試將 Kotlin/Wasm 用于前端開發,再配合 Spring Boot Kotlin/JVM 后端實現 Kotlin 中的全棧開發。

但從另一個角度來看,WebAssembly 還有更多值得發掘的亮點。如果 Compose for Web(Android 上使用的多平臺版 Jetpack Compose)能夠用 Kotlin/Wasm 代替 Kotlin/JS 來完美執行基于 Canvas 的像素渲染,結果又會如何?(稍做劇透,其實已經實現了。)

如果 Kotlin/Wasm 能夠用 WebAssembly 來取代 JavaScript,支持一種新的 Jamstack 架構,結果又會如何?

WebAssembly 組件模型

要想充分理解 Kotlin/Wasm 的巨大潛力,就不能不提 WebAssembly 組件模型。正是它的存在,讓我們能使用任意支持 WebAssembly 的語言,為 WebAssembly 開發組件。這項工作的基石正是 WIT 格式,可用于描述導入和展出并生成特定于語言的 binding。

Deleuze 親自實踐了一下,看看 WIT 是如何被轉譯成 Kotlin 的,結果看起來還不錯。例如,其嘗試將 WIT variant 定義為:

variant filter {
    all,
    none,
    some(list<string>),
 }

轉譯出的 Kotlin 代碼如下:

sealed interface Filter {
   object All : Filter
   object None : Filter
   class Some(val value: List): Filter
}

利用 String 提供的 null 安全特性,WIT option能夠被準確轉譯為 Kotlin 慣用的選項值處理方式。在 Deleuze 看來,Kotlin 協程也將成為組件模型異步支持綁定中一個強大的競爭優勢。

用 warg 實現 WebAssembly 包管理

大家可能會好奇 WebAssembly 要如何發布和使用。別擔心,面向 WebAssembly 包的標準化管理項目 Warg,有望帶來各種包 repo 實例,其中的關鍵就是 WebAssembly 包 repo 將支持多語言。

沒錯,Maven Central 或者 NPM 在 Java 和 JavaScript 之外的語言中也有使用,但無論是生產還是消費都擺脫不了“二等公民”的陰影。Warg 和 WebAssembly 將真正把多語言組件推向全新的高度。

Deleuze 預測,像 Rust/C/C++ 這樣的語言將主要用于生產 Wasm 組件(強調效率,只為非共享方法提供極小、甚至干脆不提供運行時);而 Kotlin/Wasm 這類能利用 WasmGC 的語言,則主要負責構建使用這些組件的應用程序。當然,Rust 也可以用來開發 Wasm 應用程序,但 Deleuze 猜測 WasmGC 語言才是這類用例中的主導者。

WASI

所謂 WASI,簡言之就是在定義標準化系統接口(包括文件系統、時鐘、環境變量、命令行參數或者標準輸入 / 輸出)應該如何被公開給 Wasm 應用程序。機器學習人工智能或者云存儲等其他用例也可以通過 WASI 進行標準化。

Kotlin/Wasm 目前還不支持 WASI,但開發團隊已經提供低級 API 實現。有趣的是,只需要提供 WASI 平臺中的特定部分,就能使用 Kotlin 的多平臺庫(例如 kotlinx-datetime 或 Okio)。

“ Kotlin/Wasm + WASI ”將并發出驚人的潛能:它可以提供 Kotlin/JVM 的替代方案,將應用程序部署到云端、邊緣甚至是 Serverless 函數的形式;也被大量用作容器鏡像的替代方案,能在幾微秒內完成實例化、提供更高的安全性且不依賴于任何特定硬件或操作系統。這樣的特性可能讓人想起 Java 在 1995 年提出的“一次編寫,隨處運行”(WORA)口號。

目前實現這一愿景的主要障礙在于,Wasmtime 等純 WASI 運行時還不支持 WasmGC。目前,運行 Kotlin/Wasm WASI 應用程序的主要途徑是利用 Node WASI 支持。

附:如何啟用 Kotlin/Wasm

要啟用 Kotlin/Wasm 并對其進行測試,請更新您的 build.gradle.kts 文件:

plugins {
    kotlin("multiplatform") version "1.8.20-Beta"
}


kotlin {
    wasm {
        binaries.executable()
        browser {
        }
    }
    sourceSets {
        val commonMain by getting
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test"))
            }
        }
        val wasmMain by getting
        val wasmTest by getting
    }
}

可查看包含 Kotlin/Wasm 示例的 GitHub 存儲庫

要運行 Kotlin/Wasm 項目,您需要更新目標環境的設置:

  • Chrome,對于版本 109 或更高版本:

1. 在您的瀏覽器中轉到 chrome://flags/#enable-webassembly-garbage-collection。

2. 重新啟動瀏覽器應用程序。

  • Firefox,對于版本 111 或更高版本:

3. 在您的瀏覽器中轉到 about:config。

4. 啟用 javascript.options.wasm_function_references 和 javascript.options.wasm_gc 選項。

5. 重新啟動瀏覽器應用程序。

  • Edge,對于版本 109 或更高版本:

使用命令行參數運行應用程序 -- js-flags=--experimental-wasm-gc。

審核編輯 :李倩



聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 應用程序
    +關注

    關注

    38

    文章

    3322

    瀏覽量

    58699
  • 編譯
    +關注

    關注

    0

    文章

    676

    瀏覽量

    33736
  • kotlin
    +關注

    關注

    0

    文章

    60

    瀏覽量

    4319

原文標題:重新構想前端開發!Kotlin 推出新功能:無需同時了解 Kotlin 和 JavaScript

文章出處:【微信號:玩轉VS Code,微信公眾號:玩轉VS Code】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Princetel 推出新的手動電纜卷筒在線配置器

    和定制模塊化電纜卷筒(手動和電動)。該公司近期宣布為其手動電纜卷筒產品線推出新的在線配置器 。這種用戶友好型工具使設計工程師能夠創建手動電纜卷筒的定制配置,大大簡化了設計流程,節省了寶貴的工程時間
    發表于 04-18 15:41

    Gvim工具在數字前端開發中扮演的角色和重要的意義

    Gvim是vim的圖形前端,是跨平臺的編輯器。本文介紹了Gvim工具在數字前端開發中扮演的角色和重要的意義。 Gvim在數字前端開發中的角色
    的頭像 發表于 02-20 10:21 ?336次閱讀

    熱門前端框架:引領現代 Web 開發的潮流

    在當今快速發展的前端開發領域,熱門前端框架如 React、Vue 和 Angular 等,成為了開發者構建高效、高性能 Web 應用的得力工具。它們各自具有獨特的特點和優勢,引領著現代
    的頭像 發表于 01-22 10:08 ?377次閱讀

    前端的作用

    前端的作用 在智能手機中,“前端”一詞可以指代兩個不同的概念:手機前端開發和射頻前端技術。以下是這兩個概念在智能手機中的作用: 手機
    的頭像 發表于 01-03 14:03 ?411次閱讀

    亞馬遜云科技發布Amazon Bedrock新功能

    近日,亞馬遜云科技宣布了一項重要更新——為其完全托管的Amazon Bedrock服務增添了多項創新功能。Amazon Bedrock旨在通過高性能基礎模型,助力用戶輕松構建并擴展生成式人工智能
    的頭像 發表于 12-25 15:52 ?403次閱讀

    Amazon Q Business新功能發布,助力企業提效

    近日,在備受矚目的2024年亞馬遜云科技re:Invent全球大會上,一款旨在提升企業內部工作效率的強大工具——Amazon Q Business,迎來了全新功能的發布。 Amazon Q
    的頭像 發表于 12-24 10:42 ?439次閱讀

    Amazon Q Business發布新功能 助力企業提升內部工作效率

    Business是一款強大的生成式AI助手,旨在幫助員工查找信息、獲取洞察,并在工作中采取實際行動。Amazon Q Business通過持續推出新功能,幫助員工更快地完成繁瑣耗時的
    的頭像 發表于 12-19 15:29 ?384次閱讀

    解析NVIDIA JetPack 6.1的新功能

    NVIDIA JetPack一直在不斷發展,通過提供量身定制的先進軟件滿足邊緣 AI 和機器人開發者日益增長的需求。每次發布的 JetPack 新版本都會升級性能、加入新功能與優化現有工具,以便為
    的頭像 發表于 11-28 10:41 ?851次閱讀
    解析NVIDIA JetPack 6.1的<b class='flag-5'>新功能</b>

    首批Apple Intelligence功能驚艷亮相,12月新功能值得期待

     蘋果正式推出了備受矚目的Apple Intelligence,為iPhone、iPad和Mac用戶帶來了一系列創新功能,且這些功能均通過免費軟件更新即可獲得。只要用戶的設備和Siri語言設置為美國英文,便可在全球多數地區享受這
    的頭像 發表于 10-29 14:11 ?628次閱讀

    CrewAI 獲1800萬美元融資,推出Enterprise新功能

    組成。 伴隨著融資的成功,CrewAI推出了其Enterprise平臺的新功能,包括自我迭代、性能評估、持久記憶以及多種代理協作結構等。這些新功能的加入,使得CrewAI Enterprise能夠更好
    的頭像 發表于 10-23 11:00 ?834次閱讀

    微軟推出Windows 11九月更新:增強體驗,添加多項便捷新功能

    微軟公司于9月26日正式推出了針對Windows 11系統的最新可選更新KB5043145,此次更新精心設計了多項改進與創新功能,旨在為用戶帶來更加卓越的操作體驗。具體而言,對于運行Windows
    的頭像 發表于 09-27 15:55 ?1416次閱讀

    Zigbee 3.0的新功能

    電子發燒友網站提供《Zigbee 3.0的新功能.pdf》資料免費下載
    發表于 09-26 10:45 ?3次下載
    Zigbee 3.0的<b class='flag-5'>新功能</b>

    Meta旗下社交平臺Threads推出新功能

    Meta旗下的新興社交平臺Threads近期宣布了一系列新功能推出,旨在為企業用戶和數字創作者提供更加便捷和強大的內容管理工具。此次更新不僅豐富了平臺的交互體驗,還進一步提升了數據透明度與發布效率。
    的頭像 發表于 08-16 18:00 ?1856次閱讀

    亞馬遜云科技在re:Inforce 2024全球大會上推出眾多安全服務新功能

    北京2024年6月12日?/美通社/ -- 亞馬遜云科技在re:Inforce 2024全球大會上宣布推出多項安全服務新功能,涵蓋惡意軟件防護、生成式AI驅動安全、身份訪問和管理等,幫助用戶更輕
    的頭像 發表于 06-12 17:31 ?535次閱讀

    亞馬遜云科技推出多項安全服務新功能

    在近日舉辦的re:Inforce 2024全球大會上,亞馬遜云科技(Amazon Web Services, AWS)再次彰顯了其在云計算安全領域的領先地位,推出了一系列激動人心的安全服務新功能。這些新功能不僅提升了用戶數據的安
    的頭像 發表于 06-12 15:14 ?712次閱讀
    主站蜘蛛池模板: 91视频观看免费 | 五月天丁香婷婷综合 | 亚洲人成www在线播放 | 在线永久免费观看黄网站 | www一区二区三区 | 国语对白一区二区三区 | 久久好色| 天堂最新在线资源 | 狠狠狠色丁香婷婷综合久久五月 | 国产综合成色在线视频 | 成人在线视频网址 | 人人插人人 | 亚洲国产精品丝袜在线观看 | 久久国产中文字幕 | 国产精品午夜高清在线观看 | 亚洲综合涩 | 欧美肉到失禁高h视频在线 欧美三级成人 | 天天看天天爽 | 欧洲亚洲国产精华液 | 日本三级成人午夜视频网 | 日韩美毛片 | 伊人一区二区三区 | 亚洲成人黄色网址 | 国产免费福利网站 | 中文字幕第五页 | 午夜宅男视频 | 日本免费在线一区 | 国产在线观看色 | 给我一个可以看片的www日本 | 国产午夜精品理论片免费观看 | 久久极品 | 色综合久久网女同蕾丝边 | 国产三级在线观看视频 | 欧美一级片网站 | 激情亚洲婷婷 | 香蕉视频色版在线观看 | 中文字幕一二三区乱码老 | 第四色激情网 | bt天堂在线www最新版资源网 | 精品乱码一区二区三区四区 | bt种子磁力天堂torrent |