当前位置: 首页 > news >正文

一起看 I/O | 将 Kotlin 引入 Web

a22a326bc3ebaa8e5282cf2efbb3d42b.png

作者 / 产品经理 Vivek Sekhar

我们将在本文为您介绍 JetBrains 和 Google 的早期实验性工作。您可以观看今年 Google I/O 大会中的 WebAssembly 相关演讲,了解更多详情:

https://youtu.be/RcHER-3gFXI?t=604

应用开发者想要尽可能地在更多平台上最大限度地吸引用户。当下,该目标意味着开发者需要针对 Android、iOS 和 Web 平台分别构建应用,并构建相应的后端服务器和基础设施来提供支持。

2c3b14116b6d89c07a6b26c8b7270ac4.png

为了减少工作量,一些开发者会使用多平台语言和框架来开发应用的业务逻辑和界面。之前,将这些多平台应用引入 Web 意味着开发者需要将共享的应用代码 "编译" 成可在浏览器中运行且速度较慢的 JavaScript 版本。相反,他们通常会使用 JavaScript 重写应用,或者直接引导 Web 用户下载原生移动应用。

得益于名为 WebAssembly GC 的新技术,Web 社区正在开发更出色的替代方案: 直接支持现代语言的 Web。这项新的 Web 功能允许使用受支持的语言编写的跨平台代码在所有主流浏览器中以接近原生的性能运行。

我们很高兴在 Web 上推出对 Kotlin 新功能的实验性支持,这将让 Android 和 Web 开发者有机会以更快的性能分享新代码。

e0f2177a34d98baf225dfac0d307e942.png

Web 上的 Kotlin 多平台开发

Kotlin 是一种高效且功能强大的语言,在排名前 1,000 的 Android 应用中使用率达到 95%。开发者表示自己在将编程语言切换至 Kotlin 之后,不仅提高了工作效率,也降低了错误的发生次数。

  • Kotlin
    https://kotlinlang.org/

  • 不仅提高了工作效率,也降低了错误的发生次数
    https://www.jetbrains.com/lp/devecosystem-2021/kotlin/#Kotlin_what-do-you-use-kotlin-for-project-type

JetBrains 开发的 Kotlin Multiplatform Mobile 和 Compose Multiplatform 框架有助于开发者在他们的 Android 和 iOS 应用之间共享代码。这些框架目前提供对 Kotlin 代码编译成 WebAssembly 的实验性支持。早期实验表明,在 Web 上使用 WebAssembly 运行 Kotlin 的速度比使用 JavaScript 快 2 倍。

f4011ded9843b593647c08f0e0e69723.png

  • Kotlin Multiplatform Mobile
    https://kotlinlang.org/lp/mobile/

  • Compose Multiplatform
    https://www.jetbrains.com/lp/compose-multiplatform/

如需了解更多内容,您可以参阅 JetBrains 所发布的 K2 编译器 1.8.20 版的版本说明,同时您也可以在文档中了解如何在自己的应用中试用 Kotlin/Wasm。

  • K2 编译器 1.8.20 版的版本说明
    https://kotlinlang.org/docs/whatsnew1820.html#new-kotlin-wasm-target

  • 文档

https://kotlinlang.org/docs/wasm-get-started.html

e44df90ef4cd7c7dd19a065faa9406be.png

大功告成

将 Kotlin 等现代移动语言引入 Web 需要解决具有挑战性的技术难题,如多语言垃圾回收和 JavaScript 互操作性。您可以在今年 Google I/O 大会的全新 WebAssembly 语言演讲视频中了解详情:

https://youtu.be/RcHER-3gFXI?t=604

在此特别感谢浏览器供应商、相关学者和 W3C WebAssembly 社区小组中不同 Web 服务提供商的开放式协作。没有大家的共同努力,这项工作不可能顺利完成。在接下来的几周,我们将在 V8 博客中分享有关这项创新工作的技术详情。

  • W3C WebAssembly 社区小组
    https://www.w3.org/community/webassembly/

  • V8 博客
    https://v8.dev/blog

2cce4819fbb2fcc500e98f407e6bcafd.png

展望未来: Web 和原生开发

几十年来,开发者一直希望将 Web 打造为一种 "通用运行时",但与此同时,开发者明白 Web 与原生平台之间还具有一定的功能或性能差距。长期以来,开发者不得不在 Web 和原生移动应用之间进行切换。

但是,我们希望您可以将 Web 和原生体验相结合。这不仅能帮您减少工作量,还可以帮助您利用 Web 的独特优势。

在开放的 Web 生态系统中,您的应用距离吸引新用户仅 "一键之遥"。没有应用商店的阻碍,也没有收益分成影响您的盈利能力,用户可以像分享网页一样轻松发现并分享您的应用。

WebAssembly 具有跨平台开发的能力、原生移动应用的性能和 Web 的开放性,这就是为什么我们喜爱 WebAssembly。

我们期待看到您的下一个杰作!欢迎您持续关注 "Android 开发者" 微信公众号,及时了解更多开发技术和产品更新等资讯动态。

6d2b905a2e3b759468ea36a1546eba2e.gif

推荐阅读

如页面未加载,请刷新重试

1a63a68cfe9bf5a2fd35a73ad5d5aadb.gif 点击屏末 阅读原文 | 即刻了解 Kotlin 更多相关内容


70553610e86346742c1a75a50266a99b.png

相关文章:

一起看 I/O | 将 Kotlin 引入 Web

作者 / 产品经理 Vivek Sekhar 我们将在本文为您介绍 JetBrains 和 Google 的早期实验性工作。您可以观看今年 Google I/O 大会中的 WebAssembly 相关演讲,了解更多详情: https://youtu.be/RcHER-3gFXI?t604 应用开发者想要尽可能地在更多平台上最大限度地吸引用户…...

极致呈现系列之:Echarts地图的浩瀚视野(一)

目录 Echarts中的地图组件地图组件初体验下载地图数据准备Echarts的基本结构导入地图数据并注册展示地图数据结合visualMap展示地图数据 Echarts中的地图组件 Echarts中的地图组件是一种用于展示地理数据的可视化组件。它可以显示全国、各省市和各城市的地图,并支持…...

第四章 模型篇:模型训练与示例

文章目录 SummaryAutogradFunctions ()GradientBackward() OptimizationOptimization loopOptimizerLearning Rate SchedulesTime-dependent schedulesPerformance-dependent schedulesTraining with MomentumAdaptive learning rates optim.lr_scheluder Summary 在pytorch_t…...

利用人工智能模型学习Python爬虫

爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。 网络爬虫(又称为网页蜘蛛,网络机器人)是其中一种类型。 爬虫可以自动化浏览网络中的信息,当然浏览信息的时候需要按照我们制定的规则进行,这些规则我们称之为网络…...

.Net泛型详解

引言 在我们使用.Net进行编程的过程中经常遇到这样的场景:对于几乎相同的处理,由于入参的不同,我们需要写N多个重载,而执行过程几乎是相同的。更或者,对于几乎完成相同功能的类,由于其内部元素类型的不同&…...

C++ 教程(10)——存储类

存储类定义 C 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C 程序中可用的存储类: autoregisterstaticexternmutablethread_local (C11) 从 C 17 开始,auto 关键字不再是 C 存储…...

vue3+vite+element-plus创建项目,修改主题色

element-plus按需引入,修改项目的主题色 根据官方文档安装依赖 ​npm install -D unplugin-vue-components unplugin-auto-import vite.config.js配置 // vite.config.ts import { defineConfig } from vite import AutoImport from unplugin-auto-import/vite …...

mysql select是如何一步步执行的呢?

mysql select执行流程如图所示 server侧 在8.0之前server存在查询语句对应数据的缓存,不过在实际使用中比较鸡肋,对于更新比较频繁、稍微改点查询语句都会导致缓存无法用到 解析 解析sql语句为mysql能够直接执行的形式。通过词法分析识别表名、字段名等…...

找到距离最近的点,性能最好的方法

要找到距离最近的点并且性能最好,一种常用的方法是使用空间数据结构来加速搜索过程。以下是两个常见的数据结构和它们的应用: KD树(KD-Tree):KD树是一种二叉树数据结构,用于对k维空间中的点进行分割和组织…...

vue基础--重点

!1、vue的特性 !2、v-model 双向数据绑定指令 (data数据源变化,页面变化; 页面变化,data数据源也变化) 1、v-model 会感知到 框中数据变化 2、v-model 只有在表单元素中使用,才能…...

HarmonyOS元服务端云一体化开发快速入门(上)

一、前提条件 您已使用已实名认证的华为开发者帐号登录DevEco Studio。 请确保您的华为开发者帐号余额充足,账户欠费将导致云存储服务开通失败。 二、选择云开发模板 1.选择以下任一种方式,打开工程创建向导界面。 如果当前未打开任何工程&#xff0c…...

leetcode 279.完全平方数

题目描述 给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 …...

Spring boot ApplicationContext

https://www.geeksforgeeks.org/spring-applicationcontext/ AnnotationConfigApplicationContext container 对象直接标注annotation: Configuration, Component ApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class, AppConf…...

【Python实战】Python采集王者皮肤图片

前言 我们上一篇介绍了,如何采集王者最低战力,本文就来给大家介绍如何采集王者皮肤,买不起皮肤,当个桌面壁纸挺好的。下面,我和大家介绍如何获取数据。 环境使用 python 3.9pycharm 模块使用 requests 模块介绍 re…...

很详细的Django开发入门详解(图文并茂)

1.Django概述 Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。 Django 框架的核心组件有: 用于创建模型的对象关系映射;为最终用户设计较好的管理界面;…...

Ansible 部署

ansible 自动化运维工具,可以实现批量管理多台(成百上千)主机,应用级别的跨主机编排工具 特性: 无agent的存在,不要在被控制节点上安装客户端应用 通过ssh协议与被控制节点通信 基于模块工作的&#xff0c…...

【操作系统】计算机操作系统知识点总结

文章目录 前言一、操作系统的概念与发展二、操作系统的结构与功能1、操作系统的结构2、操作系统的功能 三、进程管理1、进程2、进程的创建3、进程管理的实现4、进程控制块 四、内存管理1、内存2、内存管理3、内存管理的实现 五、文件系统1、文件系统2、文件系统的主要任务3、文…...

springmvc整合thymeleaf

概述 Thymeleaf提供了一组Spring集成,使您可以将其用作Spring MVC应用程序中JSP的全功能替代品。 这些集成将使您能够: Controller像使用JSP一样,将Spring MVC 对象中的映射方法转发到Thymeleaf管理的模板。在模板中使用Spring表达式语言&…...

Redis 内存管理机制

Redis作为一个内存数据库,内存资源非常珍贵。因此,Redis引入了3种内存管理机制来释放不必要的内存,包括定期删除、惰性删除和内存淘汰机制。 定期删除 定期删除是Redis内存管理机制的一种,它用于删除过期的键值对。Redis每隔 10…...

Apache Zeppelin系列教程第九篇——Zeppelin NoteBook数据缓存

背景 在使用Zeppelin JDBC Intercepter 对于Hive 数据进行查询过程中,如果遇到非常复杂的sql,查询效率是非常慢 比如: select dt,count(*) from table group by dt做过数据开发的同学都知道,在hive sql查询过程中,hive…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

MMaDA: Multimodal Large Diffusion Language Models

CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中,提供了一系列静态方法用于操作数组(如排序、搜索、填充、比较等)。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序(sort) 对数组进行升序…...

「Java基本语法」变量的使用

变量定义 变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例:声明与初始化 public class VariableDemo {publi…...

rk3506上移植lvgl应用

本文档介绍如何在开发板上运行以及移植LVGL。 1. 移植准备 硬件环境:开发板及其配套屏幕 开发板镜像 主机环境:Ubuntu 22.04.5 2. LVGL启动 ​ 出厂系统默认配置了 LVGL,并且上电之后默认会启动 一个LVGL应用 。 LVGL 的启动脚本为/etc/init.d/pre_init/S00-lv_demo,…...