Перейти к содержимому
  • 0
hohserg

Минификатор не умеет инлайнить переменные

Вопрос

Минимальный тестовый пример:

image.png.383cdcb98f1b176970852cf5616ff905.png

А можно было бы сделать короче: 

local function a()return 1 end

Суть проблемы, думаю понятна.

Открытый ли код у минификатора? Хочу покопаться в нем, может, получится легко добавить фичу инлайна

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

2 часа назад, hohserg сказал:

А можно было бы сделать короче: 


local function a()return 1 end

Суть проблемы, думаю понятна.

 Проблема в том, что минификатор делает это всё в лоб. Он не знает, что ты будешь делать с переменной some, поэтому он не делает так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, чтобы упрощать такие вещи, тебе потребуется построить абстрактное синтаксическое дерево для исходника.

Вряд ли минификатор таким занимается. Скорее просто заменяет все неключевые слова на более короткие и убирает лишние пробелы и переносы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
21 минуту назад, Totoro сказал:

построить абстрактное синтаксическое дерево для исходника

https://github.com/mathiasbynens/luamin/blob/master/luamin.js#L627

Кажется, там именно так и делается

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Минификатор занимается тем, что из кода делает эквивалентный, но короче в записи. Инлайнинг переменных — круто, но код будет не эквивалентный. С помощью debug.getlocal/debug.setlocal если попытаться прочесть эту переменную, можно очень удивиться, что её нет.

 

То, что описывается, есть работа оптимизатора. Одного синтаксического дерева недостаточно. Нужно провести хотя бы data-flow analysis, чтобы сначала заинлайнить константу, а потом удалить мёртвый код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...