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

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

Вопрос

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

image.png.383cdcb98f1b176970852cf5616ff905.png

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

local function a()return 1 end

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

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

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


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

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

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

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


local function a()return 1 end

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

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

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


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

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

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

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


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

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

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

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

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


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

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

 

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

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


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

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

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

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

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

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

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

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

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


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