(Старый мастер переехал в ветку historical/old. Это новая ветка, загруженная в сентябре 2020 года.)
Chibicc — это ещё один небольшой компилятор языка C, который реализует большинство функций C11. Хотя он, вероятно, всё ещё относится к категории «игрушечных» компиляторов, как и другие небольшие компиляторы, chibicc может компилировать несколько реальных программ, включая Git, SQLite, libpng и сам chibicc, без внесения изменений в скомпилированные программы. Сгенерированные исполняемые файлы этих программ проходят соответствующие тестовые наборы. Таким образом, chibibb действительно поддерживает широкий спектр функций C11 и способен правильно компилировать сотни тысяч строк реального кода на C.
Chibicc разрабатывается как эталонная реализация для книги, которую я сейчас пишу о компиляторе C и низкоуровневом программировании. Книга охватывает обширную тему с инкрементным подходом; в первой главе читатели будут реализовывать «компилятор», который принимает только одно число в качестве «языка», которое затем будет получать одну функцию за раз в каждом разделе книги, пока язык, принимаемый компилятором, не будет соответствовать спецификации C11. Я взял этот инкрементальный подход из статьи Абдулазиза Гулума.
Каждый коммит этого проекта соответствует разделу книги. Для этой цели не только конечное состояние проекта, но и каждый коммит был тщательно написан с учётом читаемости. Читатели должны иметь возможность узнать, как можно реализовать функцию языка C, просто прочитав один или несколько коммитов этого проекта. Например, вот так реализованы while, [], ?: и thread-local variable. Если у вас есть много свободного времени, возможно, вам будет интересно прочитать его с первого коммита.
Если вам нравится этот проект, пожалуйста, подумайте о покупке экземпляра книги, когда она станет доступна! 😀 Я публикую исходный код здесь, чтобы дать людям ранний доступ к нему, потому что я планировал сделать это в любом случае с разрешительной лицензией с открытым исходным кодом после публикации книги. Если я не буду взимать плату за исходный код, мне не имеет смысла держать его в секрете. Надеюсь опубликовать книгу в 2021 году. Вы можете зарегистрироваться здесь, чтобы получить уведомление, когда бесплатная глава будет доступна онлайн или книга будет опубликована. Я произношу chibicc как чиби си си. «Чиби» означает «мини» или «маленький» на японском языке. «CC» обозначает компилятор C.
Chibicc поддерживает почти все обязательные функции и большинство дополнительных функций C11, а также несколько языковых расширений GCC.
Функции, которые часто отсутствуют в небольшом компиляторе, но поддерживаются chibicc, включают (но не ограничиваются):
Chibicc не поддерживает комплексные числа, прототипы функций в стиле K&R и встроенную сборку в стиле GCC. Диграфы и триграфы намеренно опущены.
Chibicc выводит простое, но приятное сообщение об ошибке, когда обнаруживает ошибку в исходном коде.
Оптимизационного прохода нет. Chibicc выдаёт ужасный код, который, вероятно, в два или более раза медленнее, чем вывод GCC. У меня есть план добавить оптимизационный проход, как только фронтенд будет готов.
Я использую Ubuntu 20.04 для x86-64 в качестве среды разработки. Политика управления (или её отсутствие) выглядит очень странно, но имеет смысл для краткосрочных программ, таких как компиляторы.
DMD, компилятор для языка программирования D, использует ту же схему управления памятью по той же причине, например [1].
Я — Руи Уэяма. Я создатель 8сс — компилятора C в качестве хобби, а также первоначальный разработчик текущей версии компоновщика LLVM lld, который представляет собой компоновщик промышленного качества, используемый различными операционными системами и крупномасштабными сборочными системами.
[1] https://www.drdobbs.com/cpp/increasing-compiler-speed-by-over-75/240158941
DMD выделяет память немного хитрым способом. Поскольку компиляторы являются краткосрочными программами, и скорость имеет существенное значение, DMD просто выделяет память через malloc и никогда не освобождает.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )