Загрузка файла из файловой системы не работает со стандартной библиотекой Rust и целью wasm32-unknown-unknown
. Следовательно, эта ошибка является ожидаемой ошибкой времени выполнения для использования File::open
.
Стандартная библиотека Rust в настоящее время предоставляет единую площадь поверхности API для всех целей, независимо от того, поддерживает ли цель функциональность или нет. Оказывается, что почти все платформы реализуют в основном всю стабильную площадь поверхности стандартной библиотеки, но цель wasm32-unknown-unknown
в определенном смысле немного странная. В этой цели wasm стандартная библиотека не имеет возможности реализовывать функции в таких модулях, как std::net
или std::fs
, поэтому функции безоговорочно возвращают ошибку. Здесь вы видите, что File::open
безусловно возвращает ошибку на цели wasm32-unknown-unknown
.
Говоря конкретно о цели wasm32-unknown-unknown
, эта цель используется для представления "базового уровня совместимости для Rust and wasm". Для этой цели стандартная библиотека может принимать только набор инструкций WebAssembly, ничего больше. Поскольку WebAssembly не предоставляет никаких средств для ввода-вывода или загрузки файлов, это означает, что эти заглушки оставлены для возврата ошибок в стандартной библиотеке.
Обратите внимание, что альтернативный способ предоставления стандартной библиотеки для цели wasm32-unknown-unknown
состоит в том, чтобы просто вообще не предоставлять эти функции, что приводит к ошибке времени компиляции при попытке их использования. Мы решили не идти по этому пути, что бы там ни было, чтобы оставаться последовательными в отношении целей в Rust. Есть надежда, что что-то вроде предложенного ворса переносимости может изменить исчисление этой истории, но Rust еще не совсем там!
В то же время, вы, вероятно, все еще хотите сделать это! В проекте wasm-bindgen
есть несколько руководств по цели wasm32-unknown-unknown
, которые могут помочь вам в этом:
Примечательно, что веб-платформа в настоящее время не обеспечивает возможность загрузки файлов из файловой системы, поэтому нет прекрасного способа реализовать File::open
в качестве API в Rust для цели wasm32-unknown-unknown
, даже если используется JS. Однако, если вы используете Node.js, я рекомендую прочитать о JS interop , а также проверить wasm-bindgen
guide для импорта функций Node.js для реализации этого. ,