Extism 是一个使用 WebAssembly (Wasm) 进行构建的轻量级框架。它支持在服务器、边缘、CLI、物联网、浏览器以及介于两者之间的所有设备上运行 Wasm 代码。 Extism 被设计为“通用”,因为它支持通用接口,无论它在哪里运行。
注意: Extism 的主要用例之一是构建可扩展的软件和插件。您希望能够执行用户的任意、不受信任的代码吗?存在主义使这一切变得安全且实用。
此外,Extism 在标准 Wasm 运行时之上添加了一些额外的实用程序。例如,我们支持持久内存/模块范围变量、无需 WASI 的安全且主机控制的 HTTP、运行时限制器和计时器、更简单的主机函数链接等等。存在主义用户构建:
选择一个 SDK 导入到您的程序中,并参考文档开始:
类型 | 语言 | 源代码 | 包裹 |
---|---|---|---|
Rust SDK | https://github.com/extism/extism/tree/main/runtime | Crates.io | |
JS SDK | https://github.com/extism/js-sdk (支持 Web、Node、Deno 和 Bun!) | 国家公共管理 | |
灵丹妙药 SDK | https://github.com/extism/elixir-sdk | 十六进制 | |
去SDK | https://github.com/extism/go-sdk | 去模组 | |
哈斯克尔软件开发工具包 | https://github.com/extism/haskell-sdk | 哈奇奇 | |
开发工具包 | https://github.com/extism/java-sdk | 索纳型 | |
.NET SDK | https://github.com/extism/dotnet-sdk (支持 C# 和 F#!) | 努盖特 | |
OCaml SDK | https://github.com/extism/ocaml-sdk | 奥帕姆 | |
Perl SDK | https://github.com/extism/perl-sdk | CPAN | |
PHP SDK | https://github.com/extism/php-sdk | 包装学家 | |
Python SDK | https://github.com/extism/python-sdk | 皮皮 | |
红宝石SDK | https://github.com/extism/ruby-sdk | 红宝石 | |
紫光SDK | https://github.com/extism/zig-sdk | 不适用 | |
软件开发工具包 | https://github.com/extism/extism/tree/main/libextism | 不适用 | |
C++ SDK | https://github.com/extism/cpp-sdk | 不适用 |
Extism 主机(运行 SDK)必须执行 WebAssembly 代码,该代码具有编译到.wasm
二进制文件中的 PDK(或插件开发工具包)库。 PDK 使插件/扩展代码作者可以轻松地从主机读取输入并返回数据、读取提供的配置、设置/获取变量、在允许的情况下进行出站 HTTP 调用等。
选择一个 PDK 导入到您的 Wasm 程序中,并参考文档开始:
类型 | 语言 | 源代码 | 包裹 |
---|---|---|---|
铁锈PDK | https://github.com/extism/rust-pdk | Crates.io | |
JSPDK | https://github.com/extism/js-pdk | 不适用 | |
Python PDK | https://github.com/extism/python-pdk | 不适用 | |
去PDK | https://github.com/extism/go-pdk | 去模组 | |
哈斯克尔PDK | https://github.com/extism/haskell-pdk | 哈奇奇 | |
AssemblyScript PDK | https://github.com/extism/ assemblyscript-pdk | 国家公共管理 | |
.NET PDK | https://github.com/extism/dotnet-pdk (支持 C# 和 F#!) | 努盖特 | |
磷酸二氢钾 | https://github.com/extism/c-pdk | 不适用 | |
C++ PDK | https://github.com/extism/cpp-pdk | 不适用 | |
齐格PDK | https://github.com/extism/zig-pdk | 不适用 |
定义一个模式来描述您想要在 Extism SDK 和 PDK 语言之间使用的函数签名和类型通常非常有用。
XTP Bindgen 是一个开源框架,用于为 Extism 插件生成 PDK 绑定。它由 XTP 平台使用,但可以在平台外部使用来定义任何 Extism 兼容的插件系统。
xtp
CLI。请参阅此处的安装说明。
version : v1-draft
exports :
CountVowels :
input :
type : string
contentType : text/plain; charset=utf-8
output :
$ref : " #/components/schemas/VowelReport "
contentType : application/json
# components.schemas defined in example-schema.yaml...
请参阅 example-schema.yaml 中的示例,或文档页面上的完整“厨房水槽”示例。
xtp plugin init --schema-file ./example-schema.yaml
> 1. TypeScript
2. Go
3. Rust
4. Python
5. C#
6. Zig
7. C++
8. GitHub Template
9. Local Template
这将创建一个完整的样板插件项目供您开始使用。实现空函数,并运行xtp plugin build
来编译您的插件。
有关 XTP Bindgen 的更多信息,请参阅 dylibso/xtp-bindgen 存储库和官方 XTP Schema 文档。
如果您遇到任何问题或有任何疑问,请加入我们的 Discord 并告诉我们。我们的社区反应非常积极,很乐意帮助您入门。
前往项目网站获取更多信息和文档。另外,请考虑阅读 Extism 及其目标和方法的概述。
感谢您考虑为 Extism 做出贡献,我们很高兴帮助您制作 PR 或找到可以做的事情!
最简单的开始方法是加入 Discord 或在extism/proposals
问题跟踪器上提出问题,最终可以成为 Extism Improvement Proposal (EIP)。
有关更多信息,请阅读贡献指南。
Extism 是来自以下团队的开源产品:
联系我们并告诉我们您正在构建什么!我们很乐意提供帮助: [email protected]