Здесь можно узнать о планируемых улучшениях Топаза и их пользе для ваших проектов. Выпущенные изменения описаны в истории.
План версии 5.21.2
5.21.2 планируется как один совместимый патч производительности. Цель патча состоит в сокращении работы компилятора с сохранением синтаксиса, допустимости программ, диагностики, порядка вычислений и результатов выполнения.
Начальный объём включает пять улучшений ниже. Измерения помогут выбрать полезные реализации. Срок выпуска и величина ускорения будут определены по фактическим результатам.
Повторное использование поиска типов и импортов
В программах с большим числом ссылок на типы и импортов компилятор может многократно искать одни объявления. Планируется повторно использовать результаты поиска в соответствующем модуле и области видимости.
Это должно сократить повторный поиск при росте проекта. Сохраняются правила доступа к закрытым объявлениям, затенения имён, номинальной идентичности типов и циклических импортов. Изменение модуля должно обновлять затронутые результаты.
Кэширование ссылок в синтаксическом дереве
Компилятор будет повторно использовать связи между узлами синтаксического дерева и объявлениями. Это сократит повторные обходы при анализе имён и выражений в одной компиляции.
Ссылки должны оставаться в пределах соответствующей программы и её редакции. Незавершённый циклический импорт нужно отличать от отсутствующего имени. Кэш не должен скрывать ошибку или менять её расположение.
Сокращение временных массивов компилятора
При чтении операндов и меток выражения могут создаваться массивы, которые сразу отбрасываются. Там, где сохраняется порядок обхода, компилятор будет читать существующие данные напрямую.
Цель состоит в сокращении выделения памяти и копирования при компиляции. Порядок операндов и диагностики, однократное вычисление и досрочное завершение должны сохраниться.
Сокращение преобразований JSON в начальном компиляторе
Начальный компилятор обменивается запросами и ответами через JSON. Планируется убрать повторный разбор и сериализацию внутри этого обмена, сохранив открытый формат ввода и вывода.
Улучшение направлено на стоимость воспроизведения компилятора из начального комплекта. Обработка UTF-8, ограничения ввода, ошибки и создаваемая программа должны сохраниться. Решение о включении будет учитывать полное время и расход памяти.
Разделение генерируемых выражений Rust на шаги
Глубокая вложенность генерируемых выражений может увеличивать работу Rust при компиляции программы на Топазе. Подходящие выражения будут разделены на явные промежуточные шаги.
Цель состоит в уменьшении вложенности синтаксиса и затрат компиляции. Нужно сохранить порядок вычислений, время жизни временных значений, заимствование, отмену и передачу ошибок. Одного форматирования длинных строк для этого недостаточно.
Улучшения, зависящие от измерений
Ещё четыре направления могут войти в патч, если измерения выявят соответствующее узкое место.
- Сократить преобразования JSON между шагами компилятора, если они обходятся дороже самих шагов.
- Сократить сортировку диагностики с сохранением первой ошибки, порядка, ограничений количества и досрочного завершения.
- Удешевить подготовку именованных аргументов с сохранением принадлежности аргументов, значений по умолчанию и однократного вычисления.
- Сократить затраты асинхронных вызовов там, где сохраняются сроки выполнения, отмена и взаимодействие с хостом. Вызовы с неизвестными эффектами сохраняют динамическую обработку.
Также рассматриваются улучшения типизированных записей, перечислений, коллекций и представления вызовов. Части с подтверждённой пользой и сохранённой совместимостью могут войти в тот же патч.
От плана к результатам выпуска
У версии и каждого улучшения на этой странице есть постоянная ссылка. После выпуска 5.21.2 запись этой версии в истории будет ссылаться на план. Включённые улучшения здесь получат ссылки на фактические результаты выпуска.
Если пункт не войдёт в выпуск или изменится его объём, текущий план будет обновлён с объяснением причины. Измерения, регрессии, требования совместимости и срочные исправления могут изменить объём работ. История описывает фактически выпущенные изменения.