Перейти к содержанию

FastScript — скрипты, которые компилируются

FastScript — оптимизированная альтернатива Skript для серверов Paper 1.21.8+ и Leaf. Скрипты пишутся на собственном лаконичном DSL, а при загрузке JIT-компилируются в байткод JVM (через ASM) — по одному Java-классу на скрипт. Дальше события обрабатывает уже не интерпретатор, а обычный скомпилированный код: вызов готового MethodHandle без поиска по именам, без рефлексии и без боксинга там, где тип удалось вывести статически.

Как это работает (коротко)

  1. Парсинг — Lexer превращает текст в токены (с синтетическими INDENT/DEDENT), Parser строит AST.
  2. Вывод типов — Compiler.kindOf определяет kind каждого выражения. number + number превращается в примитивные инструкции DADD/DCMPL, всё динамическое уходит в хелперы Values.*.
  3. Генерация — на триггер, команду и функцию эмитится статический метод; состояние циклов живёт в JVM-локалах, а не в словарях.
  4. Загрузка — 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 не нужны.