ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

WebAssembly 可以用来保护小程序代码吗?

2021-07-02 14:02:36  阅读:199  来源: 互联网

标签:WebAssembly 代码 JavaScript 支持 编译 wasm 程序代码 用来


今天的第一条推文中我们提到了一个技术--WebAssembly。

WebAssembly 是个啥玩意儿?

WebAssembly 是一种可以使用非 JavaScript 编程语言编写代码并且能在浏览器上运行的技术方案。

非 JavaScript 代码可以是 C、C++ 或 Rust 等。这些代码会被编译进你的浏览器,在你的 CPU 上以接近原生的速度运行。这些代码的形式是二进制文件,你可以直接在 JavaScript 中将它们当作模块来用。是不是很爽,JAVA 程序员写的应用可以跑在浏览器里。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

所以 WebAssembly 不是编程语言,它是一种中间格式,字节码,可以作为其他语言的编译目标用的。如果是这样的话,那么编译之后的二进制文件字节码实际上就很难被读懂了,也是起到了保护的作用。

那么问题来了,这种技术方案能不能用来保护小程序的代码呢?

要回答这个问题就必须先解决一个问题:
javascript 代码是否可以被编译为 wasm?

答案是比较遗憾的,js 是一种弱类型的语言,wasm 呢是强类型的,想要达到编译目的还是挺难的,虽然网上有很多尝试性的项目,但大多数还只是实验性质的,无法用于生产环境。

另外 wasm 是用来提高 js 执行效率的,适用于计算密集型的应用(比如游戏移植),对于 dom 操作、多线程、GC 还在探索阶段(Post-MVP 版本)...

所以咯,用 js 编写的小程序应用自然就无法使用这种手段来保护了。

虽然比较遗憾,但是随着 WebAssembly 不断发展。目前,已经有以下语言支持它了:

  • C / C ++-通过 EmScripten 或其他基于 LLVM 的最小工具链提供了很好的支持(可用于生产环境)
  • Rust-WebAssembly 是受官方支持的目标,周围有非常活跃的社区。
  • Go-现在已将 WebAssembly 作为正式但实验性的目标来支持
  • C#-通过 Blazor 具有实验支持,但是当前需要将.NET 运行时嵌入 Wasm。最近发布了预览版,Blazor 被 Microsoft 正式用作实验技术。
  • D-D 的“ betterC”子集可以通过 LDC(LLVM 编译器)编译为 WebAssembly。
  • TypeScript-通过 AssemblyScript,实验性强,但势头强劲。
  • Java-通过 TeaVM 或 Bytecoder
  • Haxe-刚刚宣布支持
  • Kotlin-Kotlin / Native 0.4 通过 WebAssembly 和 TeaVM 获得了实验支持
  • Python-Pyodide 是 WebAssembly 的 Python 移植,其中包括科学 Python 堆栈的核心软件包(Numpy,Pandas,matplotlib)。
  • PHP-实验性的,但具有有效的原型
  • Perl-WebPerl 是 Perl 二进制文件到 WebAssembly 的端口,允许您在 Web 上运行 Perl 脚本。
  • Scala-使用 Emscripten 编译器
  • Ruby-通过 run.rb 项目
  • Swift-使用 SwiftWasm,目前正在开发中

商业解决方案:

  • RemObjects-已宣布支持 C#,Java,Swift 和 Oxygene

关于 JavaScript,由于 WebAssembly 是一种静态类型的汇编语言,因此不太可能获得支持。

总之,希望未来会有所突破吧。

 

 

标签:WebAssembly,代码,JavaScript,支持,编译,wasm,程序代码,用来
来源: https://blog.51cto.com/u_2275708/2969378

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有