Ключевые факты
- Компилятор написан всего в 700 строк кода
- Генерирует REL ELF бинарные файлы, совместимые с ESP-IDF elf_loader
- Рассматривает CPU Xtensa как стековую машину (без распределения регистров)
- Может быть скомпилирован на Mac и Linux для кросс-компиляции под ESP32
- Сборка занимает 40 мс при скорости 17 500 строк/сек
Краткая сводка
Разработчик представил xcc700 — новый самокомпилирующийся мини-компилятор C, разработанный специально для платформы ESP32. Весь компилятор написан всего в 700 строк кода, что делает его исключительно компактным инструментом для встроенной разработки.
Несмотря на свой небольшой размер, компилятор поддерживает основные функции, необходимые для самокомпиляции. Он работает как однопроходный рекурсивный спуск с прямой генерацией перестраиваемых ELF бинарных файлов. Эти бинарные файлы полностью работоспособны с использованием стандартного ESP-IDF elf_loader.
Проект был создан для развлечения и в рамках конкретного проекта кибердека. В настоящее время он может быть скомпилирован на Mac и, вероятно, на Linux, что позволяет разработчикам кросс-компилировать для ESP32 на этих системах.
Техническая архитектура и дизайн
Компилятор xcc700 использует архитектуру однопроходного рекурсивного спуска с прямой генерацией кода. Этот подход позволяет эффективно обрабатывать код без накладных расходов на несколько этапов разбора. Компилятор генерирует REL ELF бинарные файлы, которые совместимы с окружением ESP-IDF elf_loader.
Для сохранения минимального размера компилятор рассматривает CPU Xtensa как стековую машину для простоты. Этот выбор дизайна означает, что он не реализует сложное распределение регистров или использование окон, упрощая процесс компиляции.
Инструмент описывается как имеющий «только самые базовые функции, которых достаточно для самокомпиляции». Эта философия гарантирует, что компилятор остается легковесным, но при этом способен компилировать собственный исходный код.
Совместимость с платформами и использование
xcc700 был разработан с учетом универсальности в отношении хост-операционных систем. В нем прямо указано, что он может быть скомпилирован на Mac, с ожиданием, что он также будет работать на Linux. Эта кроссплатформенность распространяется и на целевую архитектуру, позволяя разработчикам кросс-компилировать специально для ESP32 со своих настольных компьютеров.
Проект возник из желания создать уникальный инструмент для проекта кибердека. Автор выразил надежду, что вилка этого компилятора может в конечном итоге вырасти в уникальный язык, адаптированный специально для платформы ESP32, который, по его мнению, недооценен в любительских проектах пользовательского пространства.
Показатели производительности
Данные о производительности, выпущенные вместе с компилятором, демонстрируют впечатляющую эффективность для такого малого кодовой базы. В примере вывода с устройства ESP32 компилятор обработал 700 строк входных данных, содержащих 7 977 токенов.
Компиляция сгенерировала конкретную статистику бинарного файла:
- Определено 69 функций и 91 глобальная переменная
- 152 литерала и 1 027 патчей в перестраиваемой секции
- Использование памяти включало 1041 Б .rodata и 17120 Б .bss
- Размер выходного бинарного файла составил 27735 Б .text, что привело к файлу ELF размером 33300 Б
Что особенно примечательно, весь процесс сборки завершился за 40 мс, достигнув пропускной способности 17 500 строк/сек.
Key Facts: 1. Компилятор написан всего в 700 строк кода 2. Генерирует REL ELF бинарные файлы, совместимые с ESP-IDF elf_loader 3. Рассматривает CPU Xtensa как стековую машину (без распределения регистров) 4. Может быть скомпилирован на Mac и Linux для кросс-компиляции под ESP32 5. Сборка занимает 40 мс при скорости 17 500 строк/сек FAQ: Q1: Что такое xcc700? A1: Xcc700 — это самокомпилирующийся мини-компилятор C для платформы ESP32 (Xtensa), написанный в 700 строк кода. Он генерирует ELF бинарные файлы и работает на Mac и Linux. Q2: Как компилятор обрабатывает архитектуру CPU? A2: Он рассматривает CPU Xtensa как стековую машину для простоты, избегая сложного распределения регистров или использования окон. Q3: Каковы производительные возможности? A3: Он может компилировать код со скоростью 17 500 строк в секунду, завершая сборку примерно за 40 миллисекунд.«Моя лучшая надежда в том, что какая-то вилка может вырасти в уникальный приятный язык, адаптированный к платформе esp32. Я думаю, он недооценен в любительских проектах пользовательского пространства.»
— Автор проекта


