Replies: 1 comment
-
按照 #99 的尝试, 还需要把一些平台相关的函数改成 injection 的写法, 这个在 Nim 版本当中也尝试过的. 特别是涉及 FFI 的部分. 那么就需要把包含平台代码(不能带进 WASM)的函数处理分离到 injection 部分. 另外 WASM 编译的能力需要验证, 特别是 im 模块. 现在 Regex 移除已经引发了小问题. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
粗略的规划
背景
当前代码耦合较多, 对扩展能力有一些限制, 比如
Date
,Regex
和DualBalancedTernary
, 不打算做在语言核心当中. Rust 本身是静态类型语言, 没想到办法.经过提示, 我意识到可以用 bytes 来表示未知的数据, 比如 https://crates.io/crates/desert 将数据序列化, 以及反序列化, 这样就可以表示任何数据了. 或者用相似的动态数据 https://docs.rs/bson/0.6.0/bson/ 来表示, 理论上也可以, 甚至更方便.
考虑到体积和通用性, 我打算先尝试看看 bytes 的方案, 或者基于
Vec<u8>
自己探索.标准库拆分
如果上述方案可行, 就明确可以把一些操作放到标准库当中, 或者说只是一个库. 需要的时候通过 FFI 动态加载, 这样可以对 Calcit 的核心进行精简. 剥离出一些功能. 目前已知的主要就是前面已经提到的
Date
,Regex
和DualBalancedTernary
这三块内容. 后续再看情况.值得注意的是, 标准库用到的数据, 看情况也可以用 Cirru EDN 的方式进行传递, 作为一种比较常用的格式. 这样 JSON 模块也可以拆分出去, 进一步减小体积.
另外提及, WebSocket 模块, HTTP 模块, 如果有可能, 也要作为标准库的形态进行实现.
WASM 相关
当需要模块依赖的功能移除之后, 还可以考虑将 Calcit Core 编译到 WASM, 提供在网页当中直接执行 Calcit 代码的能力. 这块属于远的设想. 可以想象, 届时 WASM 对应的标准库也是需要提供的.
Beta Was this translation helpful? Give feedback.
All reactions