Модуль Sift для Roblox: руководство по настройке Luau и roblox-ts - Платформа

Модуль Sift для Roblox: руководство по настройке Luau и roblox-ts

Узнайте, как установить и использовать модуль Sift для Roblox в рабочих процессах с неизменяемыми данными Luau и roblox-ts, включая этапы настройки, шаблоны и советы по обслуживанию.

2026-08-20
Команда вики Sift Roblox
Краткое руководство
  • Модуль 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Использование общих концепций преобразования данных в обоих рабочих процессах
Основной принципРабота с неизменяемыми даннымиСоздание обновлённых значений без изменения исходной таблицы
Интеграция с RobloxWally, 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
1

Выберите рабочий процесс проекта

Определите, основан ли проект преимущественно на Luau, roblox-ts, управлении через Studio или синхронизации с Rojo. Используйте Wally для проекта на Luau с управлением пакетами, а npm — для roblox-ts.

2

Добавьте зависимость

Для Wally разместите зависимость Sift в wally.toml. Для roblox-ts установите @rbxts/sift из терминала проекта. Пользователи ручной установки могут получить библиотеку через Creator Store или релизы GitHub.

3

Установите или синхронизируйте файлы

Выполните команду менеджера пакетов, если это применимо. При использовании файла модели поместите его в Studio или настройте Rojo для синхронизации библиотеки в ожидаемое расположение.

4

Проверьте импорт

Откройте небольшой тестовый модуль и импортируйте утилиту Sift. Убедитесь, что редактор, компилятор или среда Studio распознаёт зависимость, прежде чем интегрировать её в рабочие системы.

5

Задокументируйте выбранную версию

Запишите выбранную версию пакета и способ установки в документации проекта. Это упростит проверку будущих обновлений или перехода на форк.

Пользователям 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, показывает, что переменная представляет замену, а не изменённую ссылку.

Практический процесс обновления состояния выглядит так:

  1. Прочитайте текущую таблицу.
  2. Передайте её в функцию преобразования.
  3. Сохраните возвращённую таблицу.
  4. Сравните новое значение или опубликуйте его.
  5. Сохраняйте старое значение доступным, если важны откат или проверка.

Этот шаблон хорошо подходит для слоёв конфигурации. Начните со значений по умолчанию, объедините настройки для конкретной среды, затем примените переопределения игрока или сессии. Если значение необходимо удалить, используйте поддерживаемый библиотекой маркер удаления, а не полагайтесь на неконтролируемое изменение в другой части кодовой базы.

Состояние

Используйте текущую таблицу как входные данные и не превращайте её во временную глобальную область для произвольных изменений.

Преобразование

Размещайте логику объединения или работы со словарями в отдельной функции с понятными входными и выходными данными.

Проверка

Используйте инструменты Luau или TypeScript для получения информации о типах, а при необходимости проверок во время выполнения добавьте отдельную библиотеку валидации.

Публикация

Присваивайте или возвращайте новую таблицу только после завершения и проверки преобразования.

Рекомендуемый шаблон

Используйте Sift на границах, где изменяются данные: в редьюсерах состояния, при сборке конфигурации, обновлении профилей и других функциях, которым полезны явно создаваемые заменяющие значения.

Sift самостоятельно не выполняет проверку типов во время выполнения. Если игре необходимо проверять данные, полученные от клиентов, из постоянного хранилища или внешних систем во время работы, отдельно добавьте подходящую библиотеку валидации. Неизменяемость и валидация решают разные задачи.

В документации проекта GreenTea и t указаны как примеры библиотек, которые можно установить вручную для проверки типов. Выбирайте инструмент валидации с учётом реальных требований проекта во время выполнения, а не предполагая, что Sift выполняет проверку входных данных.

Luau, roblox-ts и обслуживание проекта

Sift поддерживает два тесно связанных пути разработки. Команды Luau могут использовать встроенные типы Luau и рабочие процессы с пакетами, предназначенные для разработки Roblox. Команды roblox-ts могут использовать npm-пакет и API, совместимый с TypeScript.

Тип проектаПуть к пакетуСтратегия типизацииРекомендуемая проверка
Luau с Wallycsqrl/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 пользоваться согласованными утилитами для работы со словарями, сохраняя реалистичный план поддержки проекта.