hohserg 197 Опубликовано: 10 сентября, 2019 Минимальный тестовый пример: А можно было бы сделать короче: local function a()return 1 end Суть проблемы, думаю понятна. Открытый ли код у минификатора? Хочу покопаться в нем, может, получится легко добавить фичу инлайна Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg Автор вопроса 197 Опубликовано: 10 сентября, 2019 Нашел) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya 415 Опубликовано: 10 сентября, 2019 2 часа назад, hohserg сказал: А можно было бы сделать короче: local function a()return 1 end Суть проблемы, думаю понятна. Проблема в том, что минификатор делает это всё в лоб. Он не знает, что ты будешь делать с переменной some, поэтому он не делает так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 10 сентября, 2019 Да, чтобы упрощать такие вещи, тебе потребуется построить абстрактное синтаксическое дерево для исходника. Вряд ли минификатор таким занимается. Скорее просто заменяет все неключевые слова на более короткие и убирает лишние пробелы и переносы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg Автор вопроса 197 Опубликовано: 10 сентября, 2019 21 минуту назад, Totoro сказал: построить абстрактное синтаксическое дерево для исходника https://github.com/mathiasbynens/luamin/blob/master/luamin.js#L627 Кажется, там именно так и делается Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 12 сентября, 2019 Минификатор занимается тем, что из кода делает эквивалентный, но короче в записи. Инлайнинг переменных — круто, но код будет не эквивалентный. С помощью debug.getlocal/debug.setlocal если попытаться прочесть эту переменную, можно очень удивиться, что её нет. То, что описывается, есть работа оптимизатора. Одного синтаксического дерева недостаточно. Нужно провести хотя бы data-flow analysis, чтобы сначала заинлайнить константу, а потом удалить мёртвый код. 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Минимальный тестовый пример:
А можно было бы сделать короче:
local function a()return 1 end
Суть проблемы, думаю понятна.
Открытый ли код у минификатора? Хочу покопаться в нем, может, получится легко добавить фичу инлайна
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах