Jump to content

ИгратьДополнительно

ИгратьДополнительно
Оригинальный автор(ы) Майк Полл
Стабильная версия
2.0.5 (позже также будет обновлена ​​версия 2.1.ROLLING, например в 2023 году) / 1 мая 2017 г .; 7 лет назад ( 01.05.2017 )
Репозиторий github /PlayJIT /PlayJIT
Написано в С , Луна
Операционная система Unix -подобный, MacOS , Windows , iOS , Android , PlayStation
Платформа x86 , X86-64 , PowerPC , ARM , MIPS [1]
Тип Компилятор «точно в срок»
Лицензия МОЯ лицензия [2]
Веб-сайт ИгратьДополнительно .org

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]

-- Loop with if-statement

local x = 0

for i=1,1e4 do
    x = x + 11
    if i%10 == 0 then -- if-statement
        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 + num ADD 0003 +33
0007 + int ADD 0001 +1
0008 > int LE 0007 +10000
0009 ------ LOOP ------------
0010 num ADD 0006 +11
0011 int MOD 0007 +10
0012 > int NE 0011 +0
0013 + num ADD 0010 +33
0014 + int ADD 0007 +1
0015 > int LE 0014 +10000
0016 int PHI 0007 0014
0017 num PHI 0006 0013
---- TRACE 1 stop -> loop
---- TRACE 2 start 1/4 Ex.lua:8
---- TRACE 2 IR
0001 num SLOAD #1 PI
0002 int SLOAD #2 PI
0003 num ADD 0001 +22
0004 num ADD 0003 +33
0005 int ADD 0002 +1
0006 > int LE 0005 +10000
0007 num CONV 0005 num.int
---- TRACE 2 stop -> 1

Расширения [ править ]

LuaJIT добавляет несколько расширений к своей базовой реализации Lua 5.1, большинство из которых не нарушают совместимость. [17]

  • «BitOp» для двоичных операций с 32-битными целыми числами без знака (эти операции также компилируются JIT-компилятором) [18]
  • «CoCo», который позволяет полностью возобновлять работу виртуальной машины во всех контекстах. [19]
  • Интерфейс внешней функции [20]
  • Переносимый байт-код (независимо от архитектуры, размера слова или порядка байтов, а не версии) [21]

ДинАСМ [ править ]

ДинАСМ
Разработчик(и) Майк Полл
Репозиторий
Написано в Луна , С [22]
Платформа x86 , X86-64 , PowerPC , ARM , MIPS
Тип Препроцессор , Линкер
Лицензия МОЯ лицензия [2]
Веб-сайт ИгратьДополнительно .org /диназм .html

DynASM — это легкий препроцессор для C, который предоставляет собственную разновидность встроенного ассемблера , независимую от компилятора C. DynASM заменяет ассемблерный код в файлах C записью во время выполнения в «буфер кода», так что разработчик может генерировать, а затем вызывать код во время выполнения из программы C. Он был создан для LuaJIT 1.0.0, чтобы упростить разработку JIT-компилятора. [ нужна ссылка ]

DynASM включает в себя простой заголовочный файл C , который используется во время компиляции для логики, генерируемой препроцессором. Фактический препроцессор написан на Lua.

Ссылки [ править ]

  1. ^ «ЛуаДЖИТ» . ЛуаЖИТ . Проверено 25 февраля 2022 г.
  2. ^ Jump up to: Перейти обратно: а б «LuaJIT/АВТОРСКИЕ ПРАВА на версию 2.1 · LuaJIT/LuaJIT» . Гитхаб . 7 января 2022 г.
  3. ^ «[ANN] Ищу новых сопровождающих LuaJIT — luajit — FreeLists» . www.freelists.org . Проверено 29 марта 2023 г.
  4. ^ «Проект LuaJIT» . luajit.org . Проверено 17 июня 2023 г.
  5. ^ Палл, Майк. «Re: [ANN] llvm-lua 1.0» . lua-users.org . Проверено 25 февраля 2022 г.
  6. ^ «Состояние проекта — выпуск №665 — LuaJIT/LuaJIT» . Гитхаб . Проверено 3 февраля 2023 г.
  7. ^ Денио, Лоран. «Lua (Jit) для расчета физики пучков ускорителей» . Сервер документов ЦЕРН . ЦЕРН . Проверено 25 февраля 2022 г.
  8. ^ «OpenResty® — Официальный сайт» . openresty.org .
  9. ^ «Луа — Документация Neovim» . neovim.io . Проверено 7 мая 2024 г.
  10. ^ «Конг/конг» . Гитхаб . Конг. 25 февраля 2022 г. Проверено 25 февраля 2022 г.
  11. ^ «Помогаем сделать Luajit быстрее» . blog.cloudflare.com . 19 октября 2017 г. Проверено 25 февраля 2022 г.
  12. ^ «Производительность LuaJIT» .
  13. ^ «Лоуренс Трэтт: Влияние мета-трассировки на проектирование и реализацию виртуальных машин» . Tratt.net . Проверено 2 марта 2022 г.
  14. ^ Jump up to: Перейти обратно: а б д'Андреа, Лоран (2019). Поведенческий анализ трассировки JIT-компилятора, встроенного в программное обеспечение для проектирования методического ускорителя (Диссертация). ЦЕРН . Проверено 31 июля 2022 г.
  15. ^ Палл, Майк. «Настройка численных вычислений для LuaJIT (было Re:[ANN] Sci-1.0-beta1) — luajit — FreeLists» . www.freelists.org .
  16. ^ Роттенколбер, Макс. «Позднее связывание: своевременная компиляция более молодого динамического языка программирования». ЭЛС. 2020 год
  17. ^ «Расширения» . ЛуаЖИТ . Проверено 25 февраля 2022 г.
  18. ^ «Семантика BitOp» . ЛуаЖИТ . Проверено 25 февраля 2022 г.
  19. ^ «Coco — True C Coroutines» . ЛуаЖИТ . Проверено 25 февраля 2022 г.
  20. ^ «Библиотека ФФИ» . ЛуаЖИТ . Проверено 25 февраля 2022 г.
  21. ^ «Расширения» . luajit.org . Проверено 25 августа 2022 г.
  22. ^ «Функции DynASM» . ДинАСМ . Проверено 25 февраля 2022 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 62388bcd7b58d1a10042c1c04f95f28a__1718926800
URL1:https://arc.ask3.ru/arc/aa/62/8a/62388bcd7b58d1a10042c1c04f95f28a.html
Заголовок, (Title) документа по адресу, URL1:
LuaJIT - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)