ИгратьДополнительно
![]() Логотип размещен на сайте LuaJIT. | |
![]() | |
Оригинальный автор(ы) | Майк Полл |
---|---|
Стабильная версия | 2.0.5 (позже также будет обновлена версия 2.1.ROLLING, например в 2023 году)
/ 1 мая 2017 г |
Репозиторий | github |
Написано в | С , возьми это |
Операционная система | Unix -подобный, MacOS , Windows , iOS , Android , PlayStation |
Платформа | x86 , X86-64 , PowerPC , ARM , MIPS [1] |
Тип | Компилятор «точно в срок» |
Лицензия | МОЯ лицензия [2] |
Веб-сайт | ИгратьДополнительно |
LuaJIT — это трассирующий JIT-компилятор для языка программирования Lua . Майк Полл, основной сопровождающий проекта, ушел в отставку в 2015 году, прибегая лишь к периодическому обновлению до будущей версии 2.1. [3]
История [ править ]
Проект LuaJIT был начат в 2005 году разработчиком Майком Поллом и выпущен под лицензией с открытым исходным кодом MIT. [4]
Вторая основная версия компилятора, 2.0.0, значительно увеличила производительность. [5]
Последний релиз 2.0.5 выпущен в 2017 году. Однако Майк Полл, создатель и сопровождающий, рекомендует использовать подсказку ветки v2.1 и не верит в релизы. [6]
Известные пользователи [ править ]
- ЦЕРН за программное обеспечение «следующего поколения» для методического проектирования ускорителей для описания и моделирования ускорителей частиц. [7]
- OpenResty , форк nginx со скриптами Lua. [8]
- Neovim, текстовый редактор на основе vim, который позволяет использовать Lua для плагинов и настройки. [9]
- Kong, шлюз веб-API [10]
- Cloudflare , которые используют LuaJIT в своей брандмауэра веб-приложений. службе [11]
- Многочисленные вредоносные программы-стилеры используют luajit в сочетании с обфускатором «Прометей», что делает их вредоносные программы полностью необнаружимыми. В настоящее время это одно из основных применений LuaJIT, поскольку luajit вышел за рамки использования субъектами угроз на уровне национальных государств и теперь широко используется в поддельных игровых читах. «Государственные субъекты раскрывают скрытное вредоносное ПО на основе LuaJIT» . https://www.securityweek.com/new-sandman-apt-group-hitting-telcos-with-rare-luajit-malware/ .
{{cite web}}
: Отсутствует или пусто|title=
( помощь )
Производительность [ править ]
LuaJIT часто является самой быстрой средой выполнения Lua. [12] LuaJIT также был назван самой быстрой реализацией динамического языка программирования. [13] [14]
LuaJIT включает интерфейс внешних функций , совместимый со C. структурами данных Его использование рекомендуется для численных расчетов. [15]
Отслеживание [ править ]
LuaJIT — это трассирующий JIT-компилятор . LuaJIT выбирает циклы и вызовы функций в качестве якорей трассировки, чтобы начать запись возможных «горячих» путей . Вызовы функций потребуют в два раза больше вызовов, чтобы начать запись в цикле. Как только LuaJIT начинает запись, весь поток управления, включая переходы и вызовы, встраивается в линейную трассировку. Все выполненные инструкции байт-кода сохраняются и постепенно преобразуются в LuaJIT с одним присвоением статическое промежуточное представление . Компилятор трассировки LuaJIT часто способен встраивать и удалять диспетчеризации из объектной ориентации, операторов и модификаций типов . [16]
Внутреннее представление [ править ]
LuaJIT использует два типа внутреннего представления. стековый байт-код используется Для интерпретатора , а статическая форма с одним присваиванием для JIT-компилятора — . Байт-код интерпретатора часто исправляется JIT-компилятором, часто для начала выполнения скомпилированной трассировки или для пометки сегмента байт-кода, вызывающего слишком большое количество прерываний трассировки. [14]
-- Цикл с оператором if
local x = 0
for i = 1 , 1e4 do
x = x + 11
if i % 10 == 0 then -- оператор if
x = x + 22
end
x = x + 33
end
---- TRACE 1 start Ex.lua:5
---- TRACE 1 IR
0001 int SLOAD #2 CI
0002 > num SLOAD #1 T
0003 num ADD 0002 +11
0004 int MOD 0001 +10
0005 > int NE 0004 + 0
0006 + число ADD 0003 +33
0007 + int ADD 0001 +1
0008 > int LE 0007 +10000
0009 ------ LOOP ------------
0010 число ADD 0006 +11
0011 int MOD 0007 +10
0012 > int NE 0011 +0
0013 + число ADD 0010 +33
0014 + int ADD 0007 +1
0015 > int LE 0014 +10000
0016 int PHI 0007 0014
0017 число PHI 0006 0013
--- - ТРЕЙС 1 остановка - > цикл
---- TRACE 2 start 1/4 Ex.lua:8
---- TRACE 2 IR
0001 число SLOAD #1 PI
0002 int SLOAD #2 PI
0003 число ADD 0001 +22
0004 число ADD 0003 +33
0005 int ADD 0002 +1
0006 > int LE 0005 +10000
0007 num CONV 0005 num.int
---- TRACE 2 стоп -> 1
Расширения [ править ]
LuaJIT добавляет несколько расширений к своей базовой реализации Lua 5.1, большинство из которых не нарушают совместимость. [17]
- «BitOp» для двоичных операций с 32-битными целыми числами без знака (эти операции также компилируются JIT-компилятором) [18]
- «CoCo», который позволяет полностью возобновлять работу виртуальной машины во всех контекстах. [19]
- Интерфейс внешней функции [20]
- Переносимый байт-код (независимо от архитектуры, размера слова или порядка байтов, а не версии) [21]
ДинАСМ [ править ]
Разработчики) | Майк Полл |
---|---|
Репозиторий | |
Написано в | Луа , С [22] |
Платформа | x86 , X86-64 , PowerPC , ARM , MIPS |
Тип | Препроцессор , Линкер |
Лицензия | МОЯ лицензия [2] |
Веб-сайт | ИгратьДополнительно |
DynASM — это легкий препроцессор для C, который предоставляет собственную разновидность встроенного ассемблера , независимую от компилятора C. DynASM заменяет ассемблерный код в файлах C на запись во время выполнения в «буфер кода», так что разработчик может генерировать, а затем вызывать код во время выполнения из программы C. Он был создан для LuaJIT 1.0.0, чтобы упростить разработку JIT-компилятора. [ нужна цитата ]
DynASM включает в себя простой заголовочный файл C , который используется во время компиляции для логики, генерируемой препроцессором. Фактический препроцессор написан на Lua.
Ссылки [ править ]
- ^ «ЛуаДЖИТ» . ЛуаЖИТ . Проверено 25 февраля 2022 г.
- ^ Перейти обратно: а б «LuaJIT/АВТОРСКИЕ ПРАВА на версию 2.1 · LuaJIT/LuaJIT» . Гитхаб . 7 января 2022 г.
- ^ «[ANN] Ищу новых сопровождающих LuaJIT — luajit — FreeLists» . www.freelists.org . Проверено 29 марта 2023 г.
- ^ «Проект LuaJIT» . luajit.org . Проверено 17 июня 2023 г.
- ^ Палл, Майк. «Re: [ANN] llvm-lua 1.0» . lua-users.org . Проверено 25 февраля 2022 г.
- ^ «Состояние проекта — выпуск №665 — LuaJIT/LuaJIT» . Гитхаб . Проверено 3 февраля 2023 г.
- ^ Денио, Лоран. «Lua (Jit) для расчета физики пучков ускорителей» . Сервер документов ЦЕРН . ЦЕРН . Проверено 25 февраля 2022 г.
- ^ «OpenResty® — Официальный сайт» . openresty.org .
- ^ «Луа — Документация Neovim» . neovim.io . Проверено 7 мая 2024 г.
- ^ «Конг/конг» . Гитхаб . Конг. 25 февраля 2022 г. Проверено 25 февраля 2022 г.
- ^ «Помогаем сделать Luajit быстрее» . blog.cloudflare.com . 19 октября 2017 г. Проверено 25 февраля 2022 г.
- ^ «Производительность LuaJIT» .
- ^ «Лоуренс Трэтт: Влияние мета-трассировки на проектирование и реализацию виртуальных машин» . Tratt.net . Проверено 2 марта 2022 г.
- ^ Перейти обратно: а б д'Андреа, Лоран (2019). Поведенческий анализ трассировки JIT-компилятора, встроенного в программное обеспечение для проектирования методического ускорителя (Диссертация). ЦЕРН . Проверено 31 июля 2022 г.
- ^ Палл, Майк. «Настройка численных вычислений для LuaJIT (было Re:[ANN] Sci-1.0-beta1) — luajit — FreeLists» . www.freelists.org .
- ^ Роттенколбер, Макс. «Позднее связывание: своевременная компиляция более молодого языка динамического программирования». ЭЛС. 2020 год
- ^ «Расширения» . ЛуаЖИТ . Проверено 25 февраля 2022 г.
- ^ «Семантика BitOp» . ЛуаЖИТ . Проверено 25 февраля 2022 г.
- ^ «Coco — True C Coroutines» . ЛуаЖИТ . Проверено 25 февраля 2022 г.
- ^ «Библиотека ФФИ» . ЛуаЖИТ . Проверено 25 февраля 2022 г.
- ^ «Расширения» . luajit.org . Проверено 25 августа 2022 г.
- ^ «Функции DynASM» . ДинАСМ . Проверено 25 февраля 2022 г.