innative功能介绍
1、inNative是跨平台的WebAssembly实现,可以内嵌到您的程序中,还可以作为单独的运行时安装。它将WebAssembly模块编译成C二进制文件,可以将其连接为静态或动态库,并可以利用简洁的C接口进行浏览。
2、尽管inNative符合规定,但它为您带来了一些选择项,可以调节要实施的标准的什么部分,进而容许您指定如何对所形成的WebAssembly二进制文件进行沙盒化(或不进行沙盒化)。这使inNative可以可靠地在主机程序中执行沙盒WebAssembly,或是像本机程序一样编译启用内核函数的模块。
3、辅助功能
该inNative默认环境带来了好多个辅助功能致力于使调试本地WebAssembly非常容易。所有这些函数都被视作具备默认启用约定的初始C函数,而且应像其他任何C函数一样导入。编译器自身还带来了一些本质函数,从WebAssembly的角度看来他们就像辅助函数。在其中一些功能并不安全,假如开启了白名单,则需要像其他C函数一样将所有白名单纳入白名单。
innative特色说明
1、迅速的渲染速度
就像AOT模式的界定所说的一样,因为declarative的编码会被事先编译,可以立即应用这些可以同时执行的imperative代码,马上给用户呈现应用。
2、更早查验出template错误
因为需要预编译,AOTcompiler会在搭建阶段就检测到template的关联错误,并把这些错误提早报告给我们写程序的人,而不是直到runtime编译才让用户发觉这些错误。
3、更高一些的client-side安全性
因为templates和components在给clientside触碰到之前就被事先编译成了JavaScript,clientside没有办法载入到templates,HTML和JavaScript的分析也不会存在很大的危险性,那样也让Client-sideinjectionattacks也会显得更加困难。
innative使用说明
静态嵌入
对于要加载WebAssembly模块的大多数应用程序,建议使用静态嵌入inNative方法。尽管依赖于平台,但所有平台都必须:
1、下载或安装SDK。
2、链接到inNative静态库
3、将include/innative头文件添加到项目
4、包含inNative Default Environment静态库
静态库不能包含其他静态库,因此您需要将其包含innative.lib在正在构建的根可执行文件或DLL中。因为您是静态嵌入库,所以您可以访问外部API中列出的所有静态函数。
Windows
静态库:innative.lib和innative-d.lib
默认环境:innative-env.lib和innative-env-d.lib
将静态库添加到项目的其他依赖项(对于Visual Studio)或构建系统的等效项。将默认环境库放在/bin/文件夹中,并确保将其随应用程序一起分发。
创建自定义环境
nNative嵌入环境实际上只是标准C库,它们将C函数公开给正在使用其进行编译的WebAssembly模块。但是,inNative还支持通过基于名称处理规则导出专门命名的函数来创建公开与WebAssembly兼容的函数的C库。
导出C函数
编译一个静态(或共享)库,该库将要公开的C函数导出到WebAssembly模块。如果您使用的是C ++,请确保使用extern "C"来防止任何C ++名称修改。然后,只需在引用库的同时编译WebAssembly模块即可。
Windows示例
./innative-cmd.exe your_module.wasm -l your_library.lib
因为Windows会.lib为DLL生成文件,所以您应该为DLL或静态库执行此操作。
Linux示例
./innative-cmd your_module.wasm -l your_library.a
或者
./innative-cmd your_module.wasm -L your_shared_library
Linux有一个特殊的-L选项,告诉它链接到应该使用的共享库。请记住,在上面的示例中,实际文件名为libyour_shared_library.so,这是链接程序将在当前路径中查找的名称。有时,链接程序可能对库路径有些挑剔,在这种情况下,您可能想指定整个绝对路径。
如果已按照上述说明进行操作,则现在可以使用基本的C导入方法来导入C函数:
(import “ ” “ your_function ”(func $ yourfunc(result i32)))
使用标准的C调用约定通常是一个好主意,但是对于C函数,您还可以使用其他调用约定
导出WebAssembly函数
也可以创建一个公开WebAssembly函数的库,但前提是它们必须遵循严格的规则集。“名称修饰”文章详细介绍了名称修饰如何将模块+函数名称对转换为单个C符号:[module]_WASM_[function]。可以相反地进行这种处理,以从C函数声明中获取WebAssembly模块+函数名称对。
再一次,extern "C"如果您使用的是C ++ ,请确保添加。如果使用此功能编译库并将其添加到inNative命令行中,则可以将其导入到WebAssembly模块中,如下所示:
(import “ your_module ” “ your_function ”(func $ functest(param i64 f64 f32 i32)(result i64)))
但是,有一些限制:函数必须具有默认的C调用约定!如果它使用任何其他调用约定,则该行为是不确定的且不安全的。此外,只能使用5种类型:
当然,您也可以替换uint32_t为int32_t,并uint64_t为int64_t没有问题。您也可以将任意指针类型替换为void*。但是,void*必须映射到i6464位体系结构,i3232位体系结构,或者cref要使用inNative的cref扩展名。在将C函数签名与WebAssembly等效项进行匹配时,请格外小心,因为签名不匹配会破坏沙箱或使程序完全崩溃。
请记住,WebAssembly函数胜过C函数-如果导出伪装为WebAssembly导入的C函数,但是存在另一个具有相同名称和函数定义的WebAssembly模块,则WebAssembly版本将获胜。在将C函数导出为WebAssembly导入时,请确保为假模块选择唯一的名称。
番茄花园温馨提示:
1.下载完成软件以后请点击安装完成安装步骤。
2 软件同时支持32位64位运行环境。
3.仅支持windows系统安装软件。
4.本软件绿色无毒,请放心使用。