FastScript — скрипты, которые компилируются¶
FastScript — оптимизированная альтернатива Skript для серверов Paper 1.21.8+
и Leaf. Скрипты пишутся на собственном лаконичном DSL, а при загрузке
JIT-компилируются в байткод JVM (через ASM) — по одному Java-классу на скрипт.
Дальше события обрабатывает уже не интерпретатор, а обычный скомпилированный код:
вызов готового MethodHandle без поиска по именам, без рефлексии и без боксинга
там, где тип удалось вывести статически.
Как это работает (коротко)¶
- Парсинг —
Lexerпревращает текст в токены (с синтетическимиINDENT/DEDENT),Parserстроит AST. - Вывод типов —
Compiler.kindOfопределяет kind каждого выражения.number+numberпревращается в примитивные инструкцииDADD/DCMPL, всё динамическое уходит в хелперыValues.*. - Генерация — на триггер, команду и функцию эмитится статический метод; состояние циклов живёт в JVM-локалах, а не в словарях.
- Загрузка —
ScriptLoaderопределяет классы в дочернемClassLoader,ScriptEngineрезолвитMethodHandleодин раз и дальше только вызывает их.
Подробнее: Быстрый старт, Синтаксис, Эксплуатация и бенчмарки.
Что где в вики¶
| Раздел | Содержание |
|---|---|
| Быстрый старт | Сборка, установка, первый скрипт, перезагрузка |
| Синтаксис и лексика | Отступы, комментарии, строки, числа, переменные |
| Триггеры, команды, функции | on, command, function, события, where |
| Операторы и выражения | if, циклы, присваивания, stop/return |
| Выражения и типы | Приоритет, тернарник, вызовы, вывод типов |
| Встроенные функции | Полный каталог с сигнатурами |
| Игроки и переменные | Свойства игрока, $/#, variables.yml |
| Примеры скриптов | Разобранные готовые скрипты |
| Эксплуатация | Админ-команды, plugin.yml, бенчмарки, FAQ |
Требования¶
- Сервер Paper 1.21.8+ / Leaf, сборка против
paper-api 1.21.8-R0.1-SNAPSHOT. - Java 21+ (
--release 21). Gradle/Maven не нужны.