-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Safety
Dictionary::load() пропускает только строгий ISO-формат ^[a-z]{2,3}$ —
path traversal исключён по построению, включая изощрённые обходы
(a/../../data/ru с валидным хвостом). Негативные сценарии закреплены
security-тестами.
Dictionary::load('../etc', WordClass::Noun); // UnknownDictionaryException
Dictionary::load('RU', WordClass::Noun); // UnknownDictionaryExceptionФайлы data/*/*.php содержат только declare + return [...] — без вызовов
функций и побочных эффектов (закреплено токен-анализом в тестах). Формат PHP
выбран сознательно: данные попадают в opcache и загружаются без парсинга
JSON/YAML на каждый процесс.
- словарь загружается при первом
load()и кэшируется на процесс; - обратный индекс форм строится при первом
find()по не-лемме; - плоский индекс
formOf()— при первом вызове, с shared-ссылками на карты форм (память не дублируется).
Все шесть бенч-сценариев — за словарём, включая победу над мемоизацией
doctrine на нерегулярном множественном. Полные таблицы — в
Сравнении; бюджеты производительности закреплены
perf-тестами (100k formOf < 1 с с запасом на порядок).
CloudCastle Dictionary · · PHP 8.1+
GitHub · Packagist · Releases · Discussions
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)