Open atty303 opened 6 months ago
@atty303,
Could you elaborate more? "it would be beneficial to have a generic ZenFS (or Node asynchronous API) backend" is generic and ambiguous...
Do you mean a backend that uses another backend, and translates the calls to the ZenFS FileSystem
?
Emscripten JS FS --[node:fs Sync API] --> ZenFS
Emscripten WASMFS NodeFS Backend --[node:fs Async API]--> ZenFS
The current option is (1), but I meant that it would be nice to have (2).
My implementation is (2), but I have made the Emscripten WASMFS NodeFS Backend
part tightly coupled with the project.
I said "generic" in the sense of making it loosely coupled and encapsulating it in the Emscripten side.
Is this an explanation?
So, you would like a C++ API for ZenFS? I think that would be really cool, though potentially a longer term goal. If your talking about a way to use ZenFS from Emscripten in general, src/plugin.ts has what you are looking for.
Emscripten has an experimental WASM-based FS implementation in addition to the current JS-based FS implementation. The main difference that I am aware of is that JS-FS only allows synchronous processing, while WASM-FS allows asynchronous processing. If you can do asynchronous processing, you can use ZenFS's asynchronous API and avoid all the problems associated with synchronizing asynchronous APIs.
I have implemented WASMFS Backend which uses ZenFS asynchronous API in my project.
atty303/pob-web:packages/driver/src/c/wasmfs/nodefs_js.cpp
It is closely tied to the user project and is not cut out to be generic. However, we thought it would be beneficial to have a generic ZenFS (or Node asynchronous API) backend. I think its implementation would need to be coordinated with the Emscripten project. Not sure if this is ZenFS work, but I'll leave it as an idea.