因为所有的主流网页浏览器都支持WebAssembly,开发者们现在可以寻找一个新的平台来部署他们的应用程序。由WebAssembly团队提供的标准工具链仅能将C、C++编译成为WebAssembly,然而这对使用其他编程语言的开发者们并没有什么帮助。C#开发者就幸运的多了,Mono项目提供了两种不同的方法来对WebAssembly进行支持。

第一种方法是通过使用Mono IL解释器在运行时(runtime)运行托管代码(例如C#)。这种方法的目标是支持快速原型化和快速开发。当应用程序已经准备交付给客户时,最好使用第二种方法。该方法使用静态编译生成一个WASM文件,该文件能够被支持WebAssembly的浏览器于本地进行执行。

为了能够创建这些WASM文件,Mono项目中引入了一个叫做mono-wasm的新工具。它将C#语言作为输入,并且生成LLVM二进制代码,将其用于LLVM WebAssembly的后端。由mono-wasm生成的目标WASM文件包含C#程序执行所需的所有依赖,包括mscorlib.dll、C库文件以及Mono运行时文件。由于LLVM链接器于近日增加了对WebAssembly的支持,因此mono-wasm支持增量式编译。这种方式能够大大减少编译时间,当你进行开发时,对于那些没有改变的代码(例如mscorlib.dll、Mono运行时文件等等)不需要进行重新编译。

虽然该项目已经完成了非常多的工作,但是其首席开发人员Laurent Sansonetti指出,该项目依然处于测试前版本(pre-alpha)。在最近的短期开发阶段中,该项目主要的目标是修复垃圾回收机制以及准备推出正式的alpha测试版本。该项目长期开发阶段的目标将着眼于减少WASM可执行文件的大小(一个hello world示例程序的大小是10MB)以及对Mono编译器进行更新,使其能够直接编译成为WASM32,另外就是改进与C#、JavaScript之间的交互性。

该项目当前处于非常活跃的开发状态,好奇的开发者们以及想要为该项目贡献代码的人们可以在GitHub上找到当前该项目的代码。

原文地址:http://www.infoq.com/cn/news/2018/02/mono-cs-webassembly


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

使用Mono将C#编译运行至WebAssembly平台相关推荐

  1. 怎么让termux运行Java_在安卓手机上通过 Termux 运行编译/运行 .NET 应用

    V2 上玩 Termux 的大佬挺多的,但是没有关于 .NET 的, 我来发一篇吧. Termux 简介 Termux 可谓安卓上的开发神器, 注意, 不是开发安卓应用, 是在安卓手机上做开发的神器, ...

  2. TVM yolov3优化代码修改(编译运行OK)

    TVM yolov3优化代码修改(编译运行OK) yolov3_quantize_sample.py 附https://github.com/makihiro/tvm_yolov3_sample代码: ...

  3. 命令行编译运行CSharp文件

    命令行编译运行CSharp文件 找到csc.exe所在的路径.如我本机上为"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" 在环境变量 ...

  4. [笔记]用VS2010编译运行项目时报“LINK : fatal error LNK1104:...

    为什么80%的码农都做不了架构师?>>>    参考:http://hi.baidu.com/%CE%C2%BF%AA%D4%B4/blog/item/e92c0e82c9ae4ec ...

  5. linux eclipse-JAVA_从 Linux 终端编译运行 Eclipse Java 项目

    假如你在linux系统下使用Eclipse开发一个Java项目,你可能会有从其他地方远程连接这个项目的需求.或许 你可以使用teamviewer远程连接linux桌面,但那经常会非常龟速.你也可以从常 ...

  6. Linux环境中Visual Studio Code的配置使用----编译运行C/C++(良心教程)

    之前的博文分享了下载安装[VS code]的详细教程, 有需要速戳–>Linux环境中Visual Studio Code 安装配置及其卸载(详细教程) 本篇博文分享本人初次使用[VS code ...

  7. VTK Example代码编译运行

    在VTK源码包的Example中,每个模块的例子都有一个CMakeList文件,可之间编译运行.  但VTK版本更新快,模块经常小改,而对于VTK6.x的Example的CMakeLists却没有改动 ...

  8. Windows/Linux下引用jar包,并用javac/java编译运行

    Windows/Linux下引用jar包,并用javac/java编译运行,有需要的朋友可以参考下. 1> Windows 假设要引用的jar放在D:/test目录下,名字为t1.jar, ja ...

  9. linux下软件编译终止,[2018年最新整理]linux下编译运行程序命令大全.ppt

    [2018年最新整理]linux下编译运行程序命令大全 1. 项目课题引入 2. Vi编辑器的使用方法 3. Linux中C语言程序的编辑 4. Linux中C语言程序的运行 5. 现场演示案例 课题 ...

最新文章

  1. 大家都在讨论裁员,我只想聊聊成长 !
  2. python装饰器原理-python装饰器原理与用法深入详解
  3. 3、4TP之url和路由
  4. AndroidStudio中提示:Failed to resolve: com.github.CymChad:BaseRecyclerViewAdapterHelper:
  5. php接收16进制数据,PHP_PHP 通过Socket收发十六进制数据的实现代码,最近在php下做关于Socket通讯的 - phpStudy...
  6. 索尼电脑娱乐(SCE)公司周一宣布
  7. c#中out、ref和params的用法与区别
  8. html优美界面左侧下拉,一组时尚的侧边栏菜单和下拉列表UI设计
  9. PHP按比例生成縮略圖片
  10. PX4 CMakeLists.txt 文件剖析
  11. 打工好,还是创业好?
  12. 中国 IT 行业平均工资再次碾压金融业,意味着什么?
  13. c++,为什么要引入虚拟继承
  14. MySQL — 创建表,插入数据,更新数据,删除数据
  15. OpenCV-特征提取与检测(03、自定义角点检测器)
  16. 中文金融情感词典发布啦 | 附代码
  17. 三代终端容器 KUN 的首次大考【架构演进】
  18. 基于OpenCV的简单机读卡识别
  19. 单模多模还傻傻分不清楚?关于光模块介绍,看这一篇就够啦!
  20. 《运筹学基础》的思维导图

热门文章

  1. 浅谈SQL注入风险 - 一个Login拿下Server(转)
  2. NSInteger,NSUInteger,NSNumber
  3. 分布式拒绝服务攻击(DDoS)原理及防范
  4. 2009从知到行知识管理培训公开课最后一期
  5. Natasha 4.0 探索之路系列(一) 概况
  6. VS扩展CodeMaid代码整理插件
  7. Uno 平台 一 WinUI终极跨平台方案(二)
  8. 通过Dapr实现一个简单的基于.net的微服务电商系统(八)——一步一步教你如何撸Dapr之链路追踪
  9. NET问答:如何理解 IEnumerableT 和 IQueryableT
  10. 数据写入规则IBufferWriterT