0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

.NET应用程序可以直接调用WebAssembly模块了

汽车玩家 来源:开源中国 作者:局长 2019-12-10 11:35 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

WebAssembly Runtime现已添加.NET Core API开发者可直接在.NET应用程序中调用WebAssembly模块。

Mozilla宣布由Bytecode Alliance创建的Wasmtime(WebAssembly runtime)现已添加处于早期预览版状态的.NET Core API,这就意味着开发者可以直接在.NET应用程序中调用WebAssembly代码。

Bytecode Alliance(字节码联盟)是由Mozilla、Fastly、Intel与Red Hat联合成立的组织,该联盟旨在通过协作实施标准和提出新标准,以完善WebAssembly在浏览器之外的生态。Mozilla提到,.NET Core作为一个跨平台的Runtime,仍提供对WebAssembly的支持主要三个好处,除了可跨平台共享更多代码之外,还能安全地隔离不受信任的代码,同时凭借着WebAssembly的接口类型(WebAssembly Interface Types),WebAssembly和.NET可相互传递复杂类型。

虽然我们能够使用.NET Core构建跨平台应用,但如果要使用诸如C或是Rust等原生函数库,这仍然是十分不方便的操作,因为需要函数库为每个平台发布特定函数库版本。不过有了WebAssembly之后,我们可以将其作为桥梁以简单满足上面的需求。原生函数库可以先编译成WebAssembly,然后包括.NET Core在内的许多平台就能使用这些WebAssembly模块,这将简化函数库的发布以及应用程序对这些函数库的依赖方式。

由于WebAssembly是面向网页设计的,网页是一种每次访问网站(读/写数据)都会执行不受信任代码的环境,WebAssembly模块只能调用从主机环境明确输入的外部函数,而且只能在主机分配的内存区域进行读写数据,这种沙盒设计方式也能被应用在.NET Core中,以增加安全性。通过支持WebAssembly,.NET Core也能使用沙盒以执行不信任代码。

另外,Bytecode Alliance力推的WebAssembly接口类型增加了WebAssembly与其他语言的互通性,.NET Core也能从中受益。Mozilla表示,WebAssembly接口类型简化了应用程序与WebAssembly模块间来回传递复杂类型所需的“胶水代码”。当Wasmtime的.NET API最终可以对接口类型进行操作,WebAssembly和.NET之间就能够无缝地传递复杂类型。

最后,Wasmtime新增加的这个.NET Core API尚处于预览阶段,Bytecode Alliance成员仍在对其积极开发中,更新将不保证向后兼容。当前目标是让Wasmtime更为稳定,因此不建议开发者将Wasmtime的.NET Core API用于正式产品开发。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • net
    net
    +关注

    关注

    0

    文章

    127

    浏览量

    57153
  • 应用程序
    +关注

    关注

    38

    文章

    3346

    浏览量

    60413
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RDMA设计56:如何设计基于RDMA的应用程序

    本博文主要交流设计思路,在本博客已给出相关博文约140篇,希望对初学者有用。 注意这里只是抛砖引玉,切莫认为参考这就可以完成商用IP 设计。 应用程序的工作流程如图 1所示,大致分为 READ 包
    发表于 04-05 09:54

    如何构建蓝牙应用程序

    应用程序使用蓝牙(blueZ)。 我已经安装了 gcc-riscv64-linux-gnu。 但是,没有安装 blueZ 标头和库。 如何构建我的蓝牙应用程序
    发表于 04-01 07:31

    系统调用和API有什么区别呢?

    其实你已经明白,操作系统本身也是一堆代码,它本身也有很多能力可以供我们使用,操作系统就像前面举例中的发动机、餐厅、游戏或者一个代码的功能模块一样,常说的系统调用system call
    发表于 12-03 06:52

    深入了解API:详解应用程序接口的作用和原理

    引言:在现代软件开发领域中, API(Application Programming Interface,应用程序接口)扮演着至关重要的角色。无论是在Web开发、移动应用还是大型软件系统中,API
    的头像 发表于 11-03 09:37 534次阅读

    深入了解系统调用API:探索操作系统底层的关键接口

    一、前言 为什么用户程序不能直接访问系统内核模式提供的服务? 在linux中,将程序的运行空间分为内核空间与用户空间(内核态和用户态),在逻辑上它们之间是相互隔离的,因此用户程序不能访
    的头像 发表于 11-03 09:20 859次阅读

    PYQT 应用程序框架及开发工具

    特点,已成为嵌入式领域的重要开发工具 PyQt 是一个创建 GUI 应用程序的工具包。它是 Python 编程语言和 Qt 库的成功融合。因为可用的类有很多,他们被分成几个模块。QtCore 模块
    发表于 10-29 07:15

    学生适合使用的SOLIDWORKS 云应用程序

    随着科技的不断发展,计算机辅助设计(CAD)技术已经成为现代工程教育的重要组成部分。SOLIDWORKS作为一款CAD软件,其教育版云应用程序为学生提供强大而灵活的设计平台。本文将探讨
    的头像 发表于 09-15 10:39 927次阅读
    学生适合使用的SOLIDWORKS 云<b class='flag-5'>应用程序</b>

    关于LABVIEW 生成EXE后 动态调用外部VI的问题

    ADD.VI :是我需要调用的VI 应用程序.EXE :是我项目里面把 \"调用DLL.VI\" 生成的exe文件 我没有编译exe前去调用add.VI是没问题的,但是我生成
    发表于 07-30 14:22

    RTOS SDK的canmv_net_mgmt网络模块如何编写连接代码?

    从最近源码更新一次后,以前的可执行文件使用出错了,请问有没有大哥知道新一版源码怎么编写代码进行操作网络模块canmv_net_mgmt。 或者是操作canmv_net_mgmt的头文
    发表于 07-25 08:14

    使用 USB CDC 下载应用程序固件,用时过长是为什么?

    我已经在PSoC™ 6 WIFI-BT Pioneer Kit 上尝试了 DFU 示例代码,发现一件奇怪的事情。 如果我使用 UART-over-USB 下载应用程序固件,则只需 20 秒。但是
    发表于 07-14 07:10

    无法将应用程序下载到串行闪存怎么解决?

    我尝试在蓝牙模块CYBT-343026-01(CYW20706)上下载应用程序到串行闪存,但失败。 第一步是按照 AIROC™ HCI UART 控制协议文档(见下文)的指示向模块
    发表于 07-04 06:49

    从 app_gatt_callback调用这个队列推送函数时,程序出现硬故障怎么解决?

    ,其大小为 intptr_t。 当我从 \" app_bt_management_c \" allback 调用队列推送 API 时,我的程序可以正常工作。 但是当我从 app_gatt_callback
    发表于 07-04 06:03

    对于具有直接反馈控制的 CCG3PA 应用程序,是否可以正确地重新使用引脚 12(负载使能控制),它有哪些限制?

    对于具有直接反馈控制的 CCG3PA 应用程序,是否可以正确地重新使用引脚 12(负载使能控制),它有哪些限制? 我们能够将其重复用于通信,但是当使用 \"
    发表于 05-26 07:23

    verilog模块调用、任务和函数

    在做模块划分时,通常会出现这种情形,某个大的模块中包含了一个或多个功能子模块,verilog是通过模块调用或称为
    的头像 发表于 05-03 10:29 1729次阅读
    verilog<b class='flag-5'>模块</b>的<b class='flag-5'>调用</b>、任务和函数

    在Vivado调用MIG产生DDR3的问题解析

    下面是调用的DDR3模块的,模块的倒数第二行是,模块的时钟输入,时钟源来自PLL产生的系统时钟的倍频。
    的头像 发表于 05-03 10:21 1743次阅读
    在Vivado<b class='flag-5'>调用</b>MIG产生DDR3的问题解析