
Поднимает циклы бинарных x86-64 программ в SMT-ограничения в замкнутой форме посредством страйдового интервального анализа, обеспечивая символьное исполнение за O(1) и восстановление ключей crackme.
Высокопроизводительный движок алгебраического подъёма циклов и точных рациональных рекуррентных вычислений для Python и C
Традиционные компиляторы, среды выполнения и JIT-движки (такие как GCC, Clang, PyPy или Numba) рассматривают циклы как повторяющиеся последовательности управляющего потока, выполняя инструкции шаг за шагом:
$$ \text{Runtime Cost} = \mathcal{O}(N) $$
Когда $N = 10^6$ или $10^9$, последовательное выполнение требует миллиардов циклов процессора. Strilight принципиально перестраивает выполнение циклов с помощью символического алгебраического подъёма:
$$ \vec{\mathbf{X}}(N) = \mathbf{A}^N \cdot \vec{\mathbf{X}}0 + \sum{k=0}^{N-1} \mathbf{A}^{N-1-k} \vec{\mathbf{B}} $$
Strilight не претендует на внедрение эзотерической магии; по сути это инструмент для удобства разработчика.
В физическом моделировании, научных вычислениях и численном моделировании инженеры часто сталкиваются с досадной дилеммой:
Strilight разрешает эту дилемму. Вы записываете физическую или математическую концепцию в любом удобном для вас простом, естественном синтаксисе. Strilight анализирует структуру вашего цикла, выводит точные рекуррентные формулы в замкнутой форме и ускоряет выполнение за кулисами — сохраняя полную читаемость и простоту вашей кодовой базы.
Арифметика с плавающей запятой вносит накапливающиеся ошибки усечения ($1/3 \times 3 \approx 0.9999999999999999$). Strilight выполняет аффинную индукцию и анализ шага над полем рациональных чисел $\mathbb{Q}$:
Fraction в Python, гарантируя 100% побитово точное математическое соответствие.Переменные, взаимно зависящие друг от друга (например, физические симуляции, где положение зависит от скорости, а скорость зависит от ускорения), автоматически извлекаются в матрицу связей переменных ($\mathbf{A}$). Strilight выполняет бинарное возведение в степень над $\mathbf{A}$, выполняя миллионы итераций менее чем за 2 наносекунды.
@accelerate (как это работает)Декорирование любой стандартной функции Python с помощью @accelerate запускает автоматизированный конвейер во время определения функции (без накладных расходов на анализ при каждом вызове):
for и извлекает индукционные переменные.Fraction, math), не загрязняя пространства имён модуля._loop_summary и _invariant_contract к скомпилированному объекту функции, позволяя последующим компиляторам и инструментам верификации исследовать базовую матрицу переходов $\mathbf{A}$.from strilight import accelerate
@accelerate
def compute_simulation(steps: int) -> int:
acc = 0
for i in range(steps):
acc += (i * 3) + 7
return acc
# Executes in O(1) time (~0.001 ms even if steps = 100,000,000)
result = compute_simulation(100_000_000)
#pragma strilight)В отличие от динамической рефлексии Python, преобразования кода C в Strilight строго следуют явной модели разработчика-контракта через прагма-директивы в стиле OpenMP. Движок никогда не изменяет исходный код C неявно; преобразования происходят исключительно при наличии явных контрактных клауз разработчика (contract, target, include, model):
#pragma strilight accelerate: Явно разрешает Strilight поднять аннотированный цикл for на C в эквивалентное математическое выражение в замкнутой форме.#pragma strilight fuse: Явная директива разработчика, предписывающая Strilight объединить указанные смежные циклы с идентичными доменами итерации в единое ядро бинарной матричной рекуррентности $\mathcal{O}(\log N)$.// Example of contract-guided multi-loop fusion via developer directive
int simulate_motion(int n) {
int pos = 0, vel = 10;
#pragma strilight fuse
for (int i = 0; i < n; i++) {
pos += vel;
}
for (int i = 0; i < n; i++) {
vel += 2;
}
return pos;
}
CrossFileResolver)Численные симуляции часто определяют параметры в отдельных заголовочных файлах или конфигурационных модулях. CrossFileResolver в Strilight:
#include / #define.SOLAR_MASS = 4 * PI * PI) между файлами посредством вычисления AST без выполнения произвольного кода во время выполнения и без использования небезопасного eval.table[i % P]) в предвычисленные замкнутые формулы префиксных сумм за $\mathcal{O}(1)$.memset или векторные присваивания срезов (arr[:N] = ...).