Стандартная библиотека Dart для работы с вводом/выводом (dart:io), а именно та ее часть, которая отвечает за работу с файловой системой, давно вызывает боль у ряда разработчиков (у меня уж точно). Все дело в том, что она:
- Сложна в использовании и разработке. Методы вроде File(...).openWrite().write(...) выглядят просто, но под капотом скрывают запутанную логику и неочевидное поведение. Например, IOSink.write() возвращает void, хотя работает асинхронно, что приводит к трудноотлавливаемым ошибкам.
- Ограничена в расширяемости. Большинство классов — интерфейсы. Добавление новых методов становится breaking change'ом. А для замены реализации (например, в тестах) приходится использовать ненадежные IOOverrides.
- Обвешана нативным C++ кодом. Почти каждый вызов уходит в нативную часть (везде торчат уши Dart VM), что делает отладку сложной, а также исключает tree shaking в местах ее использования
- Медленна. Операции часто лишний раз копируют данные , а асинхронные вызовы сопровождаются дорогими переключениями контекстов между потоками на уровне Dart VM.
К сожалению, на данный момент времени решения обозначенных проблем - не существует =( Но это не значит, что разработчики Dart забили на эту часть dart:io и чилят, попивая смузи, обсуждая с похихиваниями то, как жидко обделались в начале года с макросами 🫠С февраля 2025 года стартовала работа над новым экспериментальным пакетом - io_file.
Главная цель этого пакета - предоставить нам новую реализацию с понятной архитектурой для работы с файловой системой на чистом Dart, с минимальным использованием нативного кода. Все строится вокруг одного базового класса FileSystem, который можно легко подменить (например, на MemoryFileSystem в тестах). API — простое и предсказуемое, с прозрачной синхронной и асинхронной версией каждой операции. Производительность обещают повысить за счет shared memory и пула воркеров.
Работа над этим пакетом была вдохновлена подходами в Rust (std::fs) и Java (java.nio.file.Files), где используется модульная архитектура, независимая от платформы логика и легкая подмена реализаций.
Более подробно про задумки разработчиков относительно этого пакета можно почитать тут
Ждешь изменений в API работы с файловой системой?
- 👍 – О, да, детка!!!
- 👌 – Сомнительно, но Окей
- 👎 – Отстой! (кайфую от текущей реализации)

Дискуссия