Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hi! I'm @hackwaly, a MoonBit core developer.
We deprecated
Arrayat the JavaScript FFI boundary ahead of the planned changeto
Array's runtime layout, and I'm going through the ecosystem to help packagesmigrate before that lands. This PR does that for this repo.
Disclosure: AI assistance was used to scan the ecosystem for affected
declarations and prepare this patch. I reviewed the resulting diff. Please
double-check anything that looks off.
Background
On the JS backend,
Array[T]andFixedArray[T]are both plain JS arrays today.This migration removes reliance on that shared representation: once
Array'sruntime layout changes, an
extern "js"declared in terms ofArraywill nolonger line up with the plain arrays JavaScript produces or expects.
FixedArrayis the representation we ask FFI code to use.
moon check --target jsreportsWarning: [0020] Warning (deprecated): Using 'Array' in JavaScript FFI is deprecated. Use 'FixedArray' instead.for thedeclarations below.
Changes
Each migrated FFI keeps its JavaScript body unchanged. The boundary now uses
FixedArray, and a thin wrapper keeps the original signature and converts, so nocall site and no public signature changes.
Declarations touched:
fs_readdir_ffi,node_readdir_safe_ffi,scan_readdir_ffi,idb_fs_list_ffi,r2_list_ffiFiles:
src/core/fs_storage.mbtsrc/core/git_loader.mbtsrc/core/idb_git_fs.mbtsrc/core/r2_storage.mbtWarning
This checkout does not build cleanly before this change either.
On the base commit,
moon check --target jsalready reports 15 errors. Afterthis change it reports 15 — the same set. I verified this by running the
identical command on the unmodified base commit, so the migration introduces no
new diagnostics.
14 of them are inside
.mooncakes/(dependency/toolchain mismatch); the restare in this repository's own code.
So if this PR shows as failing, that is pre-existing and not something this change
brings in. I'm opening it anyway because the migration itself is independent of
that breakage — feel free to park it until the build is green again, and I'll
rebase.
Scope note: the compiler's
[0020]check only inspects the direct parameter andreturn types of an
extern "js"declaration. AnArrayhidden behind a structfield crosses the same boundary without a warning; I checked this repository for
that pattern too and found none.