Как выглядит IR-запрос для статического анализа JavaScript? | Митеш Калпеш Мехта | IICT'25
Автор: LLVM Social Bangalore
Загружено: 2026-02-02
Просмотров: 10
Описание:
Семинар «Инновации в компиляторных технологиях 2025», Бангалор, Индия
https://compilertech.org/
------------------------------------------------------------------------------------------------------------------
JavaScript, несомненно, интересный язык. Он используется в веб-сайтах, серверах, мобильных и настольных приложениях и многом другом.
Широкое распространение языка не случайность — по своей сути это язык с высокой степенью расширяемости. За эти годы язык был расширен и адаптирован для соответствия многим парадигмам, таким как расширения JSX для проектирования пользовательского интерфейса и синтаксис async/await, который позволяет создавать легко читаемые абстракции над асинхронными вычислениями. Новый синтаксис часто абстрагирует сложную семантику, что затрудняет задачу анализа. Промежуточный язык служит платформой для снижения этих затрат на абстракцию, раскрывая скрытую семантику, неявные преобразования и абстрактные операции системы.
Многие коды, написанные на динамических языках, как правило, выглядят, работают и ощущаются очень похоже. В этих языках естественно игнорировать технические тонкости строгой типизации и вместо этого рассуждать на более высоком уровне — например, организовывать коллбэки, которые динамически загружаются или переключаются во время выполнения. Для поддержки такого рассуждения нам необходимы инструменты анализа, которые понимают эти высокоуровневые примитивы. Наша цель проста: разработать выразительное промежуточное представление (IR) для JavaScript, которое может моделировать весь язык — и, таким образом, выявить функциональное ядро, которое может служить общей основой для анализа многих таких языков.
В настоящее время наш конвейер состоит из трех этапов: (i) исходный код JavaScript в 3JS (подмножество JavaScript, подобное трехадресному коду), (ii) 3JS в Iridium (наше основное IR) и (iii) форк виртуальной машины QuickJS с добавленной поддержкой Iridium. В прошлом году на конференции IICT мы говорили о проблемах сведения JavaScript к трехадресному кодовому представлению и о том, почему в некоторых случаях это сведение недостижимо без нарушения семантики языка. С тех пор мы неуклонно развиваем наш промежуточный язык статического анализа, Iridium. В этом докладе мы поделимся своими мыслями и опытом по разработке подобного языка, используемыми методами реализации, а также продолжающейся борьбой между абстрагированием логики и управлением многословием.
Повторяем попытку...
Доступные форматы для скачивания:
Скачать видео
-
Информация по загрузке: