- Модуль Sift для Roblox предоставляет утилиты для работы с неизменяемыми данными в проектах на Luau и roblox-ts.
- Рекомендуемая установка выполняется через Wally, npm, Roblox Creator Store или синхронизированную копию из GitHub.
- Главное преимущество — предсказуемое обновление состояния без изменения исходной таблицы.
- Поддержка TypeScript встроена, а API разработан в соответствии с версией для Luau.
- Примечание по обслуживанию: репозиторий больше не поддерживается активно, поэтому тщательно проверяйте форки.
Что такое модуль Sift для Roblox?
Модуль Sift для Roblox — это библиотека неизменяемых данных, предназначенная для разработки на Luau и roblox-ts. Она подходит для проектов Roblox, которым нужны более безопасные преобразования таблиц и словарей, особенно при работе с состоянием, объектами конфигурации, данными игроков или коллекциями, которые не следует изменять напрямую.
Sift во многом основан на библиотеке Llama, но использует встроенные типы Luau вместо проверки типов во время выполнения. Благодаря этому Sift полезен в кодовых базах, где информация о типах обрабатывается во время разработки и проверяется языком или инструментальной цепочкой, а не отдельным слоем времени выполнения.
Библиотека не является игрой Roblox, игровым опытом, персонажем или системой прогрессии. Это утилита разработчика, которая становится частью дерева исходного кода проекта или его пакетных зависимостей.
| Область | Роль Sift | Практическое применение |
|---|---|---|
| Язык | Luau и roblox-ts | Использование общих концепций преобразования данных в обоих рабочих процессах |
| Основной принцип | Работа с неизменяемыми данными | Создание обновлённых значений без изменения исходной таблицы |
| Интеграция с Roblox | Wally, Creator Store, релизы GitHub, Rojo | Добавление библиотеки в Studio или синхронизированный проект |
| Поддержка типов | Встроенные типы Luau и совместимость с TypeScript | Улучшение обратной связи от редактора и компилятора |
| Статус проекта | Больше не поддерживается активно | Оценка форков перед долгосрочным использованием |
Неизменяемые обновления
Создавайте новую таблицу на основе существующих данных вместо прямого изменения исходного значения. Это упрощает отслеживание переходов состояния.
Сначала Luau
Sift использует встроенные типы Luau и не требует отдельной библиотеки проверки типов во время выполнения для собственных операций.
Готовность к TypeScript
API roblox-ts разработан в соответствии с аналогом для Luau, что помогает командам применять похожие шаблоны в разных языках.
Рассматривайте Sift как слой утилит для работы с данными. Он не заменяет архитектуру состояния, сетевую модель, правила валидации или структуру папок проекта.
Полезно воспринимать каждую операцию как создание заменяющего значения. Ваш код может сохранять старую таблицу для сравнения, логики отмены, отладки или проверки ссылок, одновременно присваивая возвращённую таблицу следующему состоянию.
Этот подход особенно ценен в крупных проектах Roblox. Прямое изменение может затруднить определение того, какая система изменила общую таблицу. Неизменяемые операции устанавливают более ясные границы: входные данные поступают в функцию, преобразованный результат выходит из неё, а исходное значение остаётся доступным для проверки.
Варианты установки модуля Sift для Roblox
Sift можно добавить в проект Roblox несколькими способами. Лучший выбор зависит от того, использует ли ваша команда Wally, roblox-ts, Rojo или ручной рабочий процесс в Studio.
| Способ установки | Лучше всего подходит для | Основное действие | Примечания |
|---|---|---|---|
| Wally | Проектов на Luau с управлением пакетами | Добавьте Sift = "csqrl/sift@x.x.x" в wally.toml, затем выполните wally install | Зависимости остаются определёнными в конфигурации проекта |
| npm | Проектов на roblox-ts | Выполните npm install @rbxts/sift | Предоставляет интерфейс пакета для TypeScript |
| Creator Store | Рабочих процессов, ориентированных на Studio | Скопируйте библиотеку в проект из Roblox Creator Store | Полезно, если управление пакетами не входит в рабочий процесс |
| Релизы GitHub | Ручной или контролируемой установки исходников | Скачайте релиз и поместите его в проект | Перед выбором долгосрочной версии проверьте состояние репозитория |
| Синхронизация Rojo | Файловой разработки | Синхронизируйте модель или исходный код Sift со Studio через Rojo | Хорошо работает с репозиториями, управляемыми вне Studio |
Выберите рабочий процесс проекта
Определите, основан ли проект преимущественно на Luau, roblox-ts, управлении через Studio или синхронизации с Rojo. Используйте Wally для проекта на Luau с управлением пакетами, а npm — для roblox-ts.
Добавьте зависимость
Для Wally разместите зависимость Sift в wally.toml. Для roblox-ts установите @rbxts/sift из терминала проекта. Пользователи ручной установки могут получить библиотеку через Creator Store или релизы GitHub.
Установите или синхронизируйте файлы
Выполните команду менеджера пакетов, если это применимо. При использовании файла модели поместите его в Studio или настройте Rojo для синхронизации библиотеки в ожидаемое расположение.
Проверьте импорт
Откройте небольшой тестовый модуль и импортируйте утилиту Sift. Убедитесь, что редактор, компилятор или среда Studio распознаёт зависимость, прежде чем интегрировать её в рабочие системы.
Задокументируйте выбранную версию
Запишите выбранную версию пакета и способ установки в документации проекта. Это упростит проверку будущих обновлений или перехода на форк.
Пользователям Wally следует хранить объявление зависимости в конфигурации проекта, находящейся под контролем версий. Не устанавливайте пакет вручную, забывая добавить его в манифест проекта, иначе другой разработчик может не получить ту же зависимость при настройке.
Для пользователей roblox-ts имя пакета — @rbxts/sift. API TypeScript предназначен для соответствия API Luau, что упрощает перенос примеров между двумя средами.
В репозитории указано, что Sift больше не поддерживается активно. Перед добавлением новой зависимости в проект изучите репозиторий, историю релизов и любой предлагаемый форк на предмет совместимости и ожидаемого уровня поддержки.
Источник установки не меняет основное назначение библиотеки. Wally, npm, Creator Store, GitHub и Rojo — это способы доставки; они не являются отдельными версиями модели данных Sift.
Шаблоны неизменяемых данных и операции со словарями
Sift наиболее полезен, когда проекту нужны последовательные преобразования словарей или других структурированных данных. Основной принцип прост: сохраните входные данные, создайте результат и используйте результат как следующее состояние.
Базовая операция объединения может комбинировать несколько словарей, исключая ключ с помощью Sift.None:
Dictionary.merge({ a: 1, c: 2 }, { b: 3, c: Sift.None })
Получившийся словарь — { a: 1, b: 3 }. Этот пример демонстрирует две важные идеи: значения из последующего словаря могут участвовать в результате, а Sift.None может удалить существующий ключ во время объединения.
| Шаблон | Идея входных данных | Результат | Чем это помогает |
|---|---|---|---|
| Сохранение оригинала | Существующее состояние остаётся неизменным | Новое состояние присваивается отдельно | Упрощает отладку и сравнение |
| Объединение словарей | Комбинирование нескольких источников пар «ключ-значение» | Один составной словарь | Полезно для значений по умолчанию и переопределений |
Удаление с помощью Sift.None | Пометка ключа для исключения | Ключ отсутствует в результате | Чище, чем прямое удаление из общего состояния |
| Типизированное преобразование | Применение известных форм Luau или TypeScript | Результат, удобный для редактора | Помогает обнаруживать несовместимые данные во время разработки |
| Разделение ответственности | Хранение преобразования в утилитарной функции | Вызывающие стороны получают новое значение | Уменьшает скрытые изменения в разных системах |
При использовании неизменяемых утилит давайте промежуточным значениям понятные имена. Такое имя, как nextConfig, updatedState или mergedProfile, показывает, что переменная представляет замену, а не изменённую ссылку.
Практический процесс обновления состояния выглядит так:
- Прочитайте текущую таблицу.
- Передайте её в функцию преобразования.
- Сохраните возвращённую таблицу.
- Сравните новое значение или опубликуйте его.
- Сохраняйте старое значение доступным, если важны откат или проверка.
Этот шаблон хорошо подходит для слоёв конфигурации. Начните со значений по умолчанию, объедините настройки для конкретной среды, затем примените переопределения игрока или сессии. Если значение необходимо удалить, используйте поддерживаемый библиотекой маркер удаления, а не полагайтесь на неконтролируемое изменение в другой части кодовой базы.
Состояние
Используйте текущую таблицу как входные данные и не превращайте её во временную глобальную область для произвольных изменений.
Преобразование
Размещайте логику объединения или работы со словарями в отдельной функции с понятными входными и выходными данными.
Проверка
Используйте инструменты Luau или TypeScript для получения информации о типах, а при необходимости проверок во время выполнения добавьте отдельную библиотеку валидации.
Публикация
Присваивайте или возвращайте новую таблицу только после завершения и проверки преобразования.
Используйте Sift на границах, где изменяются данные: в редьюсерах состояния, при сборке конфигурации, обновлении профилей и других функциях, которым полезны явно создаваемые заменяющие значения.
Sift самостоятельно не выполняет проверку типов во время выполнения. Если игре необходимо проверять данные, полученные от клиентов, из постоянного хранилища или внешних систем во время работы, отдельно добавьте подходящую библиотеку валидации. Неизменяемость и валидация решают разные задачи.
В документации проекта GreenTea и t указаны как примеры библиотек, которые можно установить вручную для проверки типов. Выбирайте инструмент валидации с учётом реальных требований проекта во время выполнения, а не предполагая, что Sift выполняет проверку входных данных.
Luau, roblox-ts и обслуживание проекта
Sift поддерживает два тесно связанных пути разработки. Команды Luau могут использовать встроенные типы Luau и рабочие процессы с пакетами, предназначенные для разработки Roblox. Команды roblox-ts могут использовать npm-пакет и API, совместимый с TypeScript.
| Тип проекта | Путь к пакету | Стратегия типизации | Рекомендуемая проверка |
|---|---|---|---|
| Luau с Wally | csqrl/sift через Wally | Встроенные типы Luau | Подтвердите разрешение пакета и структуру сгенерированных исходников |
| Luau с Rojo | Синхронизированная модель или исходные файлы | Встроенные типы Luau | Проверьте соответствие путей Studio структуре репозитория |
| roblox-ts | @rbxts/sift через npm | Встроенные определения типов TypeScript | Проверьте вывод компилятора и пути импорта |
| Ручная установка в Studio | Копия из Creator Store или GitHub | Стратегия типизации, определённая проектом | Задокументируйте скопированную версию и процесс обновления |
Концептуально API должен оставаться согласованным между Luau и TypeScript. Такая согласованность полезна для команд, в которых системы разделены между серверным кодом, клиентским кодом, инструментами или сгенерированными скриптами.
Однако идентичный API не означает идентичность окружающей инструментальной цепочки. Импорты, команды сборки, сгенерированный вывод, lock-файлы пакетов и настройки синхронизации по-прежнему относятся к рабочему процессу конкретного языка.
Перед внедрением Sift в новую рабочую кодовую базу проверьте следующие вопросы обслуживания:
- Требуются ли проекту активные исправления от основной команды?
- Совместим ли выбранный релиз с текущей инструментальной цепочкой Luau или roblox-ts?
- Готова ли команда самостоятельно исправлять ошибки, если потребуется форк?
- Зафиксированы ли версии пакетов в системе контроля версий?
- Готов ли проект заменить Sift, если возникнет неподдерживаемый особый случай?
Репозиторий распространяется по лицензии MIT, а его публичная страница содержит информацию о релизах, участниках и пакетах. Используйте репозиторий Sift на GitHub как основной источник сведений о пакетах, проверки исходного кода и текущего статуса обслуживания.
Если вы зависите от форка, зафиксируйте URL его репозитория, идентификатор коммита или релиза, а также все изменения API. Краткая заметка о миграции поможет избежать неопределённости, когда исходный пакет перестанет обновляться.
Проверка проекта Sift:
- Выберите Wally, npm, Creator Store, GitHub или Rojo для установки
- Зафиксируйте и задокументируйте версию зависимости
- Проверьте импорт Luau или roblox-ts в небольшом тесте
- Определите, требуется ли отдельная валидация во время выполнения
- Оцените требования к обслуживанию перед использованием в рабочем проекте
Практический рабочий процесс для новой интеграции Sift
Небольшой изолированный тест — наиболее безопасная отправная точка. Не начинайте с замены всех операций с таблицами в крупном проекте. Сначала выберите один объект конфигурации, редьюсер состояния или преобразование профиля и сравните старое и новое поведение.
| Этап | Действие | Признак успеха |
|---|---|---|
| Исследование | Определите одно повторяющееся преобразование словаря | Входные данные и ожидаемый результат чётко определены |
| Установка | Добавьте Sift обычным для проекта способом управления зависимостями | Пакет разрешается без ручных исправлений |
| Прототип | Воссоздайте преобразование с помощью неизменяемых операций | Исходные данные остаются доступными для сравнения |
| Тестирование | Проверьте добавления, переопределения и удаления | Результаты соответствуют заданному контракту данных |
| Внедрение | Перенесите связанные преобразования в общие утилиты | Команды используют единый последовательный шаблон |
Начните с предсказуемых данных. Словари конфигурации часто проще тестировать, чем сетевые полезные нагрузки или постоянные профили, поскольку их структура известна до начала выполнения.
Затем протестируйте конфликты ключей. Если два словаря содержат один и тот же ключ, определите, какой источник должен иметь приоритет, и убедитесь, что результат соответствует этому правилу. После этого проверьте поведение удаления, используя поддерживаемый маркер Sift.None, если это уместно.
Наконец, протестируйте окружающую систему. Неизменяемый результат всё равно можно неправильно присвоить, отправить не тому получателю или сохранить под неверным ключом. Sift делает преобразования понятнее, но проект по-прежнему должен определять владение данными и их поток.
Сделайте первую интеграцию Sift небольшой. Узко сфокусированную утилиту с понятными тестами проще проверить, чем масштабную переработку не связанных между собой операций с таблицами.
К распространённым ошибкам относятся восприятие Sift как фреймворка валидации, установка пакетов Luau и TypeScript без необходимости или копирование зависимости в Studio без документирования её источника. Такие решения могут привести к путанице, даже если сами операции работают правильно.
Командам, переходящим с Llama, следует внимательно сравнить каждую существующую операцию. Sift во многом основан на Llama, но имеет собственные решения в отношении типов и документации. Проверяйте импорты, возвращаемые типы, тесты и поведение в особых случаях, а не предполагайте, что все окружающие соглашения проекта перенесутся автоматически.
Часто задаваемые вопросы о модуле Sift для Roblox
Q: Для чего используется модуль Sift для Roblox?
Sift — это библиотека неизменяемых данных для Luau и roblox-ts. Она помогает разработчикам создавать обновлённые словари и структурированные значения без прямого изменения исходной таблицы.
Q: Как установить Sift в проект Roblox?
Можно использовать Wally, npm для roblox-ts, Roblox Creator Store, релизы GitHub или копию, синхронизируемую через Rojo. Выберите способ, соответствующий рабочему процессу проекта, и задокументируйте выбранную версию.
Q: Предоставляет ли Sift проверку типов во время выполнения?
Нет. Sift использует встроенные типы Luau и не включает проверку типов во время выполнения. Если проект должен проверять данные во время работы, установите и настройте отдельную библиотеку валидации.
Q: Поддерживается ли Sift активно в 2026 году?
В репозитории указано, что Sift больше не поддерживается активно, и предлагается рассмотреть форк для внесения изменений. Перед использованием в новом рабочем проекте изучите официальный репозиторий и любой выбранный форк.
Перед публикацией проекта, зависящего от Sift, проверьте совместимость пакета, протестируйте неизменяемые обновления и определите, как команда будет заниматься дальнейшим обслуживанием.
Лучшее применение Sift — осознанное и целенаправленное: устанавливайте его через задокументированный рабочий процесс, используйте неизменяемые преобразования там, где они проясняют изменения состояния, и разделяйте валидацию и долгосрочное владение зависимостями. Такой подход позволяет командам Luau и roblox-ts пользоваться согласованными утилитами для работы со словарями, сохраняя реалистичный план поддержки проекта.