Выбираем бесплатный компилятор для C / C++

C — это простой процедурный язык программирования общего назначения. Он достаточно прост в освоении. В то же время он мощный, чтобы его можно было использовать для создания любой компьютерной программы.

C++ — это объектно-ориентированный язык программирования, который изначально был создан как надмножество C. Языки C и C++ являются одними из самых популярных технологий, используемых для написания программ.

Эта статья призвана помочь вам выбрать бесплатный компилятор для C / C++ для различных операционных систем.

  • Open Watcom V2 Fork
  • Microsoft Visual Studio Community
  • Clang: Фронтенд языка программирования C для LLVM
  • MinGW-w64
  • AMD x86 Open64 Compiler Suite
  • Компилятор C/C++ Open Source Watcom / Open Watcom
  • Компилятор Digital Mars C/C++ (замена Symantec C++)
  • UPS Debugger (интерпретатор C)
  • The BDS C Compiler
  • Компилятор C / C++ Bloodshed Dev
  • Компилятор C Orange
  • DeSmet C
  • Apple Xcode для Mac OS X
  • Tiny C Compiler — самый компактный Linux C компилятор
  • Portable Object Compiler
  • C & C++ компиляторы Mingw32
  • Компилятор C / C++ GNU
  • Компилятор C Pelles
  • Компилятор C Compaq
  • Интерпретатор C / C++ Ch Embeddable (стандартная версия)
  • Компиляторы C и C++ DJGPP
  • Cilk — ANSI компилятор на основе C
  • Sphinx — компилятор C—
  • Компилятор C LSI C-86
  • Кросс-компилятор C SDCC
  • Компилятор C LADSoft CC386
  • Проект Cygwin (компиляторы C и C ++)
  • Компилятор C LCC-Win32
  • LCC — перенанаправляемый компилятор для ANSI C
  • Cyclone C

Он может работать и создавать исполняемые файлы под Windows (16-разрядные, 32-разрядные и 64-разрядные версии), Linux (32-разрядные и 64-разрядные версии), OS / 2 и MS-DOS (16-разрядные и 32-разрядные режимы). Стоит пояснить, что Watcom — это был известный коммерческий компилятор, пока первоначальные разработчики не прекратили его продажи и не опубликовали исходный код (в соответствии с публичной лицензией Sybase Open Watcom).

Для индивидуальных или начинающих программистов Microsoft Visual Studio Community включает в себя много важных инструментов из коммерческих версий проекта. Вы получите в свое распоряжение IDE, отладчик, оптимизирующий компилятор, редактор, средства отладки и профилирования. С помощью этого пакета можно разрабатывать программы для настольных и мобильных версий Windows, а также Android. Компилятор C++ поддерживает большинство функций ISO C++ 11, некоторые из ISO C++ 14 и C++ 17. В то же время компилятор C уже безнадежно устарел и не имеет даже надлежащей поддержки C99.

Программное обеспечение также поставляется с поддержкой построения программ на C#, Visual Basic, F# и Python. В то время, когда я писал эту статью, на сайте проекта утверждалось, что Visual Studio Community 2015 «бесплатный инструмент для индивидуальных разработчиков, проектов с открытым исходным кодом, научных исследований, образовательных проектов и небольших профессиональных групп».

Clang — компилятор C, C++, Objective C и Objective C++, разработанный под Apple. Это часть проекта LLVM. Clang реализует различные стандарты ISO C и C++, такие как C11, ISO C++ 11, C++ 14 и частично C++ 1z.

Он также поддерживает расширения, которые можно найти в семействе компиляторов C GNU. Компилятор C для Windows выпущен под лицензией BSD. К сожалению, на момент написания этой статьи, он предоставляется только в исходной форме, и вам придется собирать его самостоятельно.

Проект MinGW-w64 предоставляет библиотеки, заголовки, необходимые компиляторам C и C++ GNU для работы в системе Windows. В случае MinGW-w64 эти файлы поддержки позволяют создавать 64-битные программы в дополнение к 32-битным. Проект также предоставляет кросс-компиляторы, так что можно скомпилировать программу Windows из системы Linux.

Это версия набора компиляторов Open64 (описанного ниже), которая была настроена для процессоров AMD и имеет дополнительные исправления ошибок. Компилятор C / C++ соответствует стандартам ANSI C99 и ISO C++ 98, поддерживает межъязыковые вызовы (так как он включает в себя компилятор Fortran), 32-битный и 64-битный код x86, векторную и скалярную генерацию кода SSE / SSE2 / SSE3, OpenMP 2. 5 для моделей с разделяемой памятью, MPICh3 для моделей с распределенной и разделяемой памятью; содержит оптимизатор, поддерживающий огромное количество оптимизаций (глобальную, цикл-узел, межпроцедурный анализ, обратную связь) и многое другое. Набор поставляется с оптимизированной AMD Core Math Library и документацией. Для этого набора компиляторов требуется Linux.

Является бесплатным компилятором для Windows 7 с открытым исходным кодом. Он генерирует код для Win32, Windows 3.1 (Win16), OS / 2, Netware NLM, MSDOS (16-битный и 32-битный режим) и т. д. Watcom был очень популярным компилятором несколько лет назад до тех пор, пока Sybase не закрыла его. Он также включает в себя довольно известный STLport (реализация библиотеки стандартных шаблонов C++). Обновление: этот проект, похоже, застопорился, и в настоящее время запущен новый проект Open Watcom V2 Fork (описан выше).

Digital Mars C / C ++ является заменой Symantec C++ с поддержкой компиляции программ для Win32, Windows 3. 1, MSDOS и 32-разрядных расширенных MSDOS. Если используемый ПК не имеет процессора с плавающей запятой (машины pre-Pentium), можно связать эмуляцию с плавающей запятой в вашей программе. Компилятор поддерживает определение C++ из аннотированного руководства по C++ (ARM) и расширенные функции языка AT & T версии 3.0, включая шаблоны, вложенные классы, вложенные типы, обработку исключений и идентификацию типа во время выполнения.

Это графический отладчик уровня исходного кода для X Window, который содержит встроенный интерпретатор языка C. Он может обрабатывать один или несколько исходных файлов. Можно использовать его для создания исполняемого файла с байтовым кодом и выполнения интерпретатора в этом исполняемом файле. Если вам нужен интерпретатор для отладки или создания прототипов программ, или просто для изучения языка, попробуйте этот инструмент. Он поддерживает следующие платформы: Solaris, SunOS, Linux, FreeBSD, BSD / OS и некоторые другие Unix-платформы.

Помните старый (популярный) компилятор C BDS для систем CP / M 8080 / Z80? В настоящее время этот компилятор языка C находится в публичном доступе, в комплекте с исходным кодом языка ассемблера. Пакет представляет собой розничную версию компилятора с компоновщиком и руководством пользователя. Его можно использовать для простой генерации кода 8080/8085 / Z80 для встраиваемых систем (то есть создавать собственные процедуры для замены любого кода библиотеки, который обращается к функциям операционной системы).

Это интегрированная среда разработки Win32, включающая в себя компилятор C++ egcs и отладчик GNU из среды Mingw32. А также редактор и другие средства, облегчающие разработку программ с использованием компилятора Mingw32 gcc на платформе Windows. Он также содержит программу установки для приложений.

Он работает как в Windows, так и в DOS, имеет интегрированную среду разработки с редактором программ (с подсветкой синтаксиса и автоматическим завершением кода). Он может генерировать программы для Win32 и MSDOS, а также файлы Intel и Motorola hex (что полезно, если вы пишете программы для встроенных систем). Для вывода MSDOS ваши программы будут использовать расширитель DOS.

DeSmet C должен быть знаком тем, кто программировал на C в 1980-х годах. Это компилятор C для MSDOS. Он был выпущен под лицензией GNU GPL и поставляется с руководствами, редактором и сторонним оптимизатором.

Xcode — это интегрированная среда разработки Apple, которая включает в себя редактор с подсветкой синтаксиса, систему управления сборкой, отладчик, компилятор C GNU (gcc), конструктор интерфейса, AppleScript Studio, поддержку разработки на Java, инструменты разработки WebObjects. Чтобы получить в свое распоряжение данные инструменты необходимо быть участником Apple Developer Connection (ADC). Но онлайн-членство является бесплатным.

Этот небольшой компилятор C для Linux и Windows генерирует оптимизированные двоичные файлы x86. Утверждается, что он собирает, компонует и связывает код в несколько раз быстрее, чем GCC. В настоящий момент разработчики стремятся обеспечить соответствие ISO C99. Компилятор также включает необязательную проверку границ. Он обрабатывает файлы скриптов C (просто добавьте в Linux shebang код #!/usr/local/bin/tcc -run в первую строку исходного кода на C, чтобы он выполнялся напрямую). TCC распространяется под лицензией GNU General Public License.

Это набор библиотек классов и компилятор Objective C, который преобразует код Objective C в простой C-код. Работает на Windows, Linux, OS / 2, Macintosh и т. д.

Эта система поставляется с компилятором GNU C / C++, который можно использовать для создания исполняемых файлов Win32. Она содержит собственный <windows.h>, который находится в открытом доступе. Предполагается, что приложения, созданные с использованием этой системы, будут быстрее, чем, те которые созданы с помощью Cygwin32, и они не ограничиваются положениями лицензии GNU. Mingw32 поставляется с инструментами для обработки текста (sed, grep), генератором лексического анализатора (flex), генератором парсеров (bison) и т. д. Mingw32 также поставляется с компилятором ресурсов Windows.

На странице компилятора C GNU можно получить ссылки на бинарные файлы и исходный код для компилятора GNU C. Также можно использовать приведенные в этой статье ссылки на наиболее часто запрашиваемые бинарные версии (MSDOS и Win32).

Еще один компилятор C, основанный на LCC (смотрите также LCC-Win32). Он включает в себя компилятор C, компоновщик, компилятор ресурсов, сообщений, утилиту make и другие инструменты. Он компилирует код для Windows и Pocket PC.

Пользователи Linux / Alpha теперь могут бесплатно скачивать и использовать компилятор Compaq, просто заполнив форму и приняв лицензионное соглашение. Компилятор может использоваться для генерации любых программ, коммерческих или иных. Он включает в себя математическую библиотеку и отладчик (ladebug), перенесенный из True64 Unix. Он поставляется с обычными справочными страницами, а также справочником по языку и руководством программиста.

Интерпретатор C / C++, поддерживающий стандарт ISO 1990 C (C90), основные функции C99, классы C++, а также расширения к языку С, такие как вложенные функции, строковый тип и т. д. Он может быть встроен в другие приложения и аппаратные средства, использоваться в качестве языка сценариев. Код C / C++ интерпретируется напрямую без компиляции промежуточного кода. Поскольку этот интерпретатор поддерживает Linux, Windows, MacOS X, Solaris и HP-UX, созданный вами код можно перенести на любую из этих платформ. Стандартная версия бесплатна для личного, академического и коммерческого использования. Для загрузки пакета необходимо зарегистрироваться.

Это система разработки, основанная на хорошо известном компиляторе C / C++ GNU. Она генерирует 32-разрядные исполняемые файлы MSDOS, которые являются файлами с длинными именами Windows 95. Это очень функциональная система с IDE, графическими библиотеками, генераторами лексического анализатора (flex), генераторами парсеров (bison), утилитами обработки текста и так далее. Компилятор языка C, утилиты и библиотеки поставляются с исходным кодом.

Cilk — это язык на основе ANSI C, который может использоваться для многопоточного параллельного программирования. Это особенно эффективно для использования динамического, высоко асинхронного параллелизма в стиле параллельных данных или передачи сообщений. На официальном сайте упоминается, что Cilk уже используется для разработки трех шахматных программ мирового класса: StarTech, Socrates и Cilkchess.

Это своего рода сочетание компилятора C и ассемблера, который позволяет «создавать программы с возможностями и читабельностью C, сохраняя при этом эффективность языка ассемблера». Он может создавать исполняемые файлы MSDOS или файлы .OBJ, которые можно применять вместе с другими компоновщиками для создания исполняемого файла. По приведенной выше ссылке можно найти исходный код и документацию для компилятора. Если вы хотите получить предварительно скомпилированный бинарный файл, это можно сделать на неофициальном сайте компилятора C— Sphinx.

Сайт этого компилятора написан на японском языке. Он выглядит как кросс-компилятор, позволяющий генерировать код для ROM. Старая версия компилятора (3.30c) предоставляется бесплатно. Бесплатная версия работает только на MSDOS.

Это кросс-компилятор C, предназначенный для микропроцессоров Intel 8051, DS390, Z80, HC08 и PIC. Он также может быть переназначен для других 8-битных микроконтроллеров или ОСТО. SDCC поставляется с перенастраиваемым ассемблером и компоновщиком, отладчиком исходного уровня и симулятором. Библиотеки совместимы со стандартом C99. Исходный код для компилятора доступен под лицензией GPL. Поддерживаются такие платформы, как Linux, Windows, Mac OS X, Alpha, Sparc и другие.

Это компилятор ANSI C для MSDOS / DPMI и Win32, который поставляется с библиотекой среды выполнения, компоновщиком, отладчиком, DOS-расширителем (версия MSDOS), IDE (версия Win32) и утилитой make. Также доступен исходный код. При работе в режиме совместимости с C99 он компилирует большинство конструкций C99.

Этот «проект» включает в себя коммерческий компилятор (GNU C / C++), который генерирует графический интерфейс Win32 и консольные приложения. Предоставляется исходный код компилятора, библиотек и инструментов. Обратите внимание, что опция по умолчанию в этом пакете требует от вас распространять исходный код, если вы компилируете и связываетесь со своими библиотеками. Существует также специальная вызываемая опция, которая задает возможность связи с альтернативными библиотеками, позволяя распространять свои приложения без источников.

Это компилятор C для Windows, который генерирует графический интерфейс Win32 и консольные приложения. Он поставляется со своим собственным компоновщиком, IDE, отладчиком, редактором и компилятором ресурсов. LCC-Win32 основан на компиляторе LCC и является бесплатным только для некоммерческого использования.

LCC — это компилятор C (только исходный код), который генерирует код для Alpha, Sparc, MIPS R3000 и Intel x86. Он является основой как минимум для двух других компиляторов Win32 C (также описанных выше).

Cyclone C не является компилятором ANSI C в строгом значении, а представляет собой компилятор «безопасного диалекта» C. Он обеспечивает безопасность типов, имеет множество проверок для защиты от переполнения буфера, связанных с массивами нарушений и т. д. В настоящее время он работает на Linux и Windows (в последнем случае через Cygwin), для него требуется наличие в системе инструментов компиляции GNU.

Это IDE на базе Macintosh, компилятор и отладчик для программ на C. Он включает в себя редактор с подсветкой синтаксиса, ANSI C компилятор, компилятор для языка визуализации ALPHA, редактор графов, обратимый виртуальный процессор и т. д.

Обратите внимание, что программы в код, который будет выполняться для виртуального ЦПУ. Виртуальная машина и отладчик позволяют выполнять код вперед и назад и поддерживать многозадачность. IDE поставляется с анимированными алгоритмами, примерами исходного кода таких игр, как Tetris, Checkers и других. IDE полезна для проверки и отладки исходного кода, поиска процессов, неэффективно использующих память и т. д.

Примечание: этот проект был прекращен.

Старый, но проверенный Turbo C 2.01 для DOS доступен бесплатно по решению новых владельцев Borland. Это был популярный компилятор C во времена MSDOS, известный своей быстрой сборкой, интегрированной средой разработки («IDE») и графической библиотекой (DOS).

Вадим Дворниковавтор-переводчик статьи «Free C/C++ Compilers and Interpreters»

c++ — Как создать простой компилятор для простого языка (например, brainfuck)?

Вопрос задан

Изменён 9 месяцев назад

Просмотрен 10k раза

В общем хочу написать компилятор brainfuck или своего собственного языка (простого). Как это сделать?
P.S.
Интерпретатор (для brainfuck) я осилил сам, как сделать компилятор я даже не догадываюсь.
Желательно найти литературу.

  • c++
  • компилятор
  • brainfuck

для brainfuck я когда то сам писал компилятор. Лучше для начала написать траслятор, который переведет код в с/с++/java/любой другой любимый язык. Это очень просто. Вот пример траслятора в Java. После того, как получится написать такое, никто не мешает написать похожее для ассеблера (для fasm или masm). Последней ступенькой будет генерирование сразу исполнимого файла. О том, что нужно знать ассемблер, я думаю вопросов нет.

И ещё немного интересного материала — http://habrahabr.ru/blogs/development/113339/

Есть такая книжка, Marc-André Cournoyer, «How To Create Your Own Freaking Awesome Programming Language» (по ссылке — продается, но ищущий название и слово «pdf» всегда найдет и где взять менее цивлизованно, ЕВПОЧЯ). Показывают основы на пальцах, этакая «Драконья Книга для самых маленьких». Начинают с лексера и парсера, затем интерпретатор, и затем — компилятор под LLVM и, на всякий случай, собственную игрушечную виртуальную машину. Все, правда, на Ruby, но общие идеи от языка не зависят. Так что если есть интерес — можете поискать и посмотреть, рекомендую.

Было уже.

Давайте создадим компилятор

3

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Запустить простой (возможно, самый простой) компилятор C?

Это мое мнение (и предположение), что будет сложно написать компилятор без понимания структур данных, которые обычно изучаются на курсах информатики бакалавриата (после окончания средней школы). Это не означает, что вы не можете, но вам необходимо знать основные структуры данных, такие как связанные списки и деревья.

Вместо того, чтобы писать полный или совместимый со стандартами компилятор языка C (по крайней мере, в начале), я бы предложил ограничиться базовым подмножеством языка, таким как общие операторы, поддержка только целых чисел и основные функции и указатели. Одним из классических примеров этого был Small-C Рона Кейна, ставший популярным благодаря серии статей, написанных в Dr. Dobbs Journal в 19 веке.80-е годы. Они издают компакт-диск с вышедшей из печати книгой Джеймса Хендрикса «Компилятор Small-C».

Я бы предложил следовать учебнику Crenshaw, но написать его для компилятора C-подобного языка и любого целевого процессора (Crenshaw нацелен на процессор Motorola 68000), который вы хотите настроить. Чтобы сделать это, вам нужно знать базовую сборку того, на какой цели вы хотите запускать скомпилированные программы. Это может включать эмулятор для 68000 или MIPS, которые, возможно, на лучше, чем набор инструкций сборки, чем почтенный набор инструкций CISC Intel x86 (16/32-бит).

Существует множество потенциальных книг, которые можно использовать в качестве отправной точки для изучения теории (и практики) компилятора/транслятора. Прочтите часто задаваемые вопросы о comp.compilers и обзоры различных интернет-магазинов книг. Большинство вводных книг написаны как учебники для второкурсников и старших курсов бакалавриата по компьютерным наукам, поэтому их чтение может быть медленным без опыта работы с компьютерными науками. Одна старая книга, которая может быть более вводной, но ее легче читать, чем «Книга дракона» , это Введение в построение компилятора Томаса Парсонса. Она старше, поэтому вы сможете найти подержанную копию в интернет-магазинах книг по разумной цене.

Итак, я бы сказал, попробуйте начать с учебника Джека Креншоу «Давайте создадим компилятор», напишите свой собственный, следуя его примерам в качестве руководства, и создайте основы простого компилятора . Как только вы это заработаете, вы сможете лучше решить, что вы хотите сделать с этой точки зрения.

Добавлено:

Что касается процесса начальной загрузки. Поскольку существующие компиляторы C существуют в свободном доступе, вам не нужно беспокоиться о начальной загрузке. Напишите свой компилятор с помощью отдельных существующих инструментов (GCC, Visual C++ Express, Mingw/djgpp, tcc), и вы можете беспокоиться о самостоятельной компиляции вашего проекта на гораздо более позднем этапе. Я был удивлен этой частью вопроса, пока не понял, что вы пришли к идее написания собственного компилятора, прочитав речь Кена Томаса о награде ACM Turing, Reflections on Trusting Trust, которая действительно входит в процесс начальной загрузки компилятора. Это модерируемая продвинутая тема, а также просто много хлопот. Я нахожу даже загрузку компилятора GCC C в более старых системах Unix (Digital OSF/1 на 64-битной версии Alpha), которые включали компилятор C, медленным и трудоемким процессом, подверженным ошибкам.

Еще один вопрос касался того, что на самом деле делает такой компилятор, как Yacc. Yacc (Yet Another Compiler Compiler или Bison от GNU) — это инструмент, разработанный для облегчения написания синтаксического анализатора компилятора (или транслятора). На основе формальной грамматики для вашего целевого языка, которую вы вводите в yacc, он генерирует анализатор , который является частью общей конструкции компилятора. Далее идет Lex (или flex от GNU), который используется для генерации лексического анализатора или сканера, который часто используется в сочетании с парсером, сгенерированным yacc, для формирования скелета внешнего интерфейса компилятора. Эти инструменты значительно упрощают написание внешнего интерфейса по сравнению с написанием лексического анализатора и синтаксического анализатора самостоятельно. В учебнике Crenshaw эти инструменты не используются, да и вам они не нужны, многие разработчики компиляторов не всегда их используют. Конечно, Креншоу признает, что синтаксический анализатор учебника довольно прост.

Учебник Crenshaw также пропускает создание AST (абстрактного синтаксического дерева), что упрощает, но также ограничивает компилятор учебника. В нем отсутствует большая часть, если не вся оптимизация, и он очень привязан к конкретному языку программирования и конкретному языку ассемблера, испускаемому «внутренней частью» компилятора. Обычно AST — это промежуточная часть, в которой может быть выполнена некоторая оптимизация, и служит для разделения внешнего и внутреннего интерфейса компилятора в дизайне. Для новичка без опыта в области компьютерных наук я бы посоветовал не беспокоиться о том, что у вас нет AST для вашего первого компилятора (или, по крайней мере, его первой версии). Я думаю, что если он будет небольшим и простым, это поможет вам закончить написание компилятора в его первой версии, и вы сможете решить, как вы хотите действовать дальше.

Как компилятор C может быть написан на C?

Задавать вопрос

спросил

Изменено 7 лет, 2 месяца назад

Просмотрено 57 тысяч раз

74

Новинка! Сохраняйте вопросы или ответы и организуйте свой любимый контент.


Узнать больше.

Этот вопрос может возникнуть из-за непонимания составителей с моей стороны, но вот…

В предисловии к первому изданию K&R (страница xi) можно найти следующее утверждение:

Операционная система, компилятор C и практически все прикладные программы UNIX (включая все программное обеспечение, использованное для подготовки этой книги) написаны на C.

(курсив мой)

Вот чего я не понимаю: разве этот компилятор C не должен быть скомпилирован сам, прежде чем он сможет скомпилировать какой-либо код C? И если этот компилятор C написан на C, разве для его компиляции не потребуется уже существующий компилятор C?!

Единственный выход из этой загадки бесконечной регрессии (или проблемы курицы и яйца) состоит в том, что компилятор C, написанный на C, на который ссылается K&R, был на самом деле скомпилирован с помощью уже существующего компилятора C, написанного на языке, отличном от чем C. Компилятор C, написанный на C, затем заменил последний.

Или я совсем туплю?

  • c
  • конструкция компилятора
  • Керниган-и-Ритчи

2

Это называется Bootstrapping, цитата из Википедии:

Если кому-то нужен компилятор для языка X, чтобы получить компилятор для языка X (который написан на языке X), как был написан первый компилятор? Возможные методы решения этой проблемы с курицей или яйцом включают: 9.0003

  1. Реализация интерпретатора или компилятора для языка X в языке Ю. Никлаус Вирт сообщил, что он написал первый компилятор Паскаля в Фортран.
  2. Другой интерпретатор или компилятор для X уже написан в другой язык Y; именно так Scheme часто загружается.
  3. Более ранние версии компилятора были написаны в подмножестве X для что существовал какой-то другой компилятор; вот как некоторые суперсеты Java, Haskell и первый компилятор Free Pascal загружен.
  4. Компилятор для X перекрестно скомпилирован из другой архитектуры, где существует компилятор для X; вот как компиляторы для C обычно портируется на другие платформы. Также этот метод используется для Free Pascal после начальной загрузки.
  5. Написание компилятора на X; затем вручную скомпилировать его из исходного кода (большинство вероятно, неоптимизированным способом) и запустив его в коде, чтобы получить оптимизированный компилятор. Дональд Кнут использовал это для своей веб-грамотности. система программирования.

И если вам интересно, вот первый исходный код компилятора C Денниса Ричи.

Обычно первый компилятор пишется на другом языке (в данном случае непосредственно на ассемблере PDP11 или на C для большинства «современных» языков). Затем этот первый компилятор используется для программирования компилятора, написанного на самом языке.

Вы можете прочитать эту страницу об истории языка C. Вы увидите, что он также тесно связан с системой UNIX.

3

См. раздел «Курица и яйцо» на странице Википедии:

Если кому-то нужен компилятор для языка X, чтобы получить компилятор для языка X (который написан на языке X), как был написан первый компилятор? Возможные методы решения проблемы курицы или яйца включают:

  • Внедрение интерпретатора или компилятора для языка X в язык Y. Никлаус Вирт сообщил, что он написал первый компилятор Паскаля на Фортране.
  • Другой интерпретатор или компилятор для X уже написан на другом языке Y; именно так Scheme часто загружается.
  • Более ранние версии компилятора были написаны в подмножестве X, для которого существовал какой-то другой компилятор; именно так загружаются некоторые надмножества Java, Haskell и исходный компилятор Free Pascal.
  • Компилятор для X перекрестно скомпилирован из другой архитектуры, для которой существует компилятор для X; именно так компиляторы для C обычно переносятся на другие платформы. Также этот метод используется для Free Pascal после начальной загрузки.
  • Написание компилятора на X; затем вручную скомпилировать его из исходного кода (скорее всего, неоптимизированным способом) и запустить его в коде, чтобы получить оптимизированный компилятор. Дональд Кнут использовал это для своей системы грамотного веб-программирования.

1

Совершенно нормально, когда компилятор пишется на языке, который он компилирует.