Содержание

Интерпретаторы C/C++ / Песочница / Хабр

Интерпретаторы бывают очень полезны когда надо быстро проверить какую-то идею, для отладки или во время обучения новому языку. Когда я решил вспомнить C, я понял, что мне их не хватает. Оказалось, что существует несколько интерпретаторов C/C++. Предлагаю здесь их краткий обзор.

iGCC
лицензия: GNU GPL v.2 или выше
версия для Windows: нет
разрабатывается с 2009 года, последняя версия — 19.03.2012

iGCC — тонкая обёртка над GCC, написанная на Python. Самый легковесный из интерпретаторов (184Кб в распакованном виде). Поддерживает многострочный ввод. Весь код пишется внутри функции main() со всеми вытекающими последствиями.

PicoC
лицензия: New BSD license
версия для Windows: нет
разрабатывается с 2009 года, последняя версия — 20.02.2011

PicoC — создавался как скриптовый язык для бортовых систем БПЛА. Авторы заявляют, что он хорошо подходит для робототехники и приложений для встраиваемых устройств. Не является полной реализацией ISO C. Весит 1,9 Мб. Поддерживает многострочный ввод и объявление функций.

UnderC
лицензия: GNU LGPL

версия для Windows: есть
разрабатывался с 2001 года, последняя версия — 29.11.2003

UnderC — создавался как быстрый небольшой интерпретатор, реализующий большую часть стандарта ISO C. В нём есть встроенные классы стандартной библиотеки, например string, vector, map. Легко загружает функции из динамических библиотек.

К сожалению, мне так и не удалось скомпилировать UnderC. Но, судя по размеру (распакованые исходники — 1,6Мб), он похож на предыдущие интерпретаторы по возможностям.

Ch
лицензия: проприетарная
версия для Windows: есть

Ch — проприетарный интерпретатор C/C++. Версия Standard бесплатна для коммерческого использования. Есть сборки не только для Linux и Windows, но и Mac OS, Solaris, FreeBSD и пр. Поддерживает стандарт C90 полностью. Позиционируется как самый функциональный интерпретатор С. Версия для Windows поддерживает команды консоли и также включает некоторые команды UNIX, например vi, ls, awk, sed, vim с подсветкой синтаксиса. Ch может работать как командная оболочка… Полный список фич здесь. Выглядит весьма серьёзно, поддерживает многострочный ввод, объявление функций.

CINT
лицензия: GNU LGPL
версия для Windows: нет

ROOT — фреймворк CERN для анализа данных (судя по всему очень мощный) и CINT его часть. Поддерживает примерно 95% ANSI C и 85% C++. Есть подсветка синтаксиса. Расхождения со стандартом описаны здесь. Поддерживает многострочный ввод и объявление функций (они загружаются из сторонних файлов как кусочки кода, в самом интерпретаторе их объявлять нельзя).

К сожалению, интерпретаторов уровня, например, встроенного в python для C на данный момент нет. CINT и Ch — самые функциональные, но не отличаются удобством использования, iGCC и PicoC подойдут только для обучения, разработка UnderC прекращена.

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

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

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

Эта статья призвана помочь вам выбрать бесплатный компилятор для C / 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 / C++

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

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

Эта статья призвана помочь вам выбрать бесплатный компилятор для C / 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 / C++

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

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

Эта статья призвана помочь вам выбрать бесплатный компилятор для C / 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 и C++

Термины компилятор и интерпретатор описывают способ, с помощью которого выполняется программа. Теоретически любой язык программирования может быть или компилятором, или интерпретатором, но некоторые языки обычно являются либо компиляторами, либо интерпретаторами. Например, Бейсик — обычно интерпретатор, а С — обычно компилятор. Способ, с помощью которого программа выполняется, не определяется языком программирования, на котором она написана. Интерпретаторы и компиляторы — это просто сложные программы, оперирующие с исходным кодом.

Интерпретатор построчно читает исходный код программы и выполняет инструкции, содержащиеся в текущей строке, потом переходит к следующей строке. Компилятор читает всю программу и преобразует ее в объектный код, который является такой формой кода, которая может напрямую выполняться компьютером. Объектный код также называется двоичным кодом или машинным кодом. Если программа скомпилирована, то сам исходный код больше не влияет на дальнейшую работу программы.

Когда используется интерпретатор, он должен присутствовать все время для выполнения программы. Например, в традиционном Бейсике необходимо запустить интерпретатор Бейсика, затем загрузить программу и набрать RUN для запуска. Интерпретатор построчно проверит на правильность и выполнит программу. Этот медленный процесс возникает каждый раз при запуске программы. В противоположность этому, компилятор преобразует программу в объектный код, который может напрямую выполняться компьютером. Поскольку компилятор переводит программу только один раз, то все, что необходимо сделать, — это запустить программу, обычно путем простого набора имени. Таким образом, компиляция кода Должна выполняться только один раз, в то время как интерпретация — каждый раз при запуске программы.

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

Современный интерпретатор кода в c++?



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

Я рассуждаю так: я работаю над современным дизайном компилятора с целью внести свой вклад в интерпретируемые языковые движки, такие как движок V8 javascript. Однако до сих пор весь код этой книги написан на языке C, и я хотел бы видеть методы проектирования, реализованные для C++ в этом контексте, особенно модели управления памятью, а также структуру lexer/parser/etc в целом.

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

Я искал такой код около недели, но единственный код, который я могу найти, слишком сложен, чтобы я мог его найти на этом этапе.

c++ parsing interpreter lexer
Поделиться Источник Neurostracted     05 апреля 2013 в 23:12

2 ответа


  • C/C++ интерпретатор J2ME

    кто-нибудь знает какой-нибудь C или C++ переводчик для мобильных телефонов? У меня есть Nokia 5310, и я нашел какой-то базовый интерпретатор ( CellBasic ) и хочу развиваться в C или C++ на ходу. Или кто-нибудь знает схему J2ME intepreter?

  • Windows Python интерпретатор выходит на Ctrl+C

    В большинстве интерпретаторов Python, которые я использовал, Ctrl+C заставит интерпретатор распечатать KeyboardInterrupt и остаться открытым. Однако при недавней установке на новый компьютер Ctrl+C вызывает выход интерпретатора, что нежелательно. Установка обработчика signal.SIGINT по-прежнему…



2

Я ищу простой код интерпретатора, написанный на c++. В идеале это было бы для чего-то не более сложного, чем вычислитель выражений с присвоением переменных (для кода управления памятью).

Вы читали язык программирования C++?

В главе 6 есть хороший пример простого рекурсивного парсера спуска . И да, это вычислитель выражений с присвоением переменных.

Поделиться Evgeny Panasyuk     05 апреля 2013 в 23:48



1

LLVM Kaleidoscope tutorial содержит многие основы, которые вам понадобятся: прилично идиоматичный C++-иш лексика и синтаксический анализ, обработка промежуточных представлений и т. д.

В качестве альтернативы, если вы ищете настоящий хардкорный опыт C++, вы можете взглянуть на Boost::Spirit, там есть множество примеров, начиная от простых оценщиков выражений и заканчивая сложными грамматиками.

Поделиться SK-logic     10 апреля 2013 в 08:32


Похожие вопросы:


Цена преобразования одной строки кода Cobol в современный язык?

Я хотел бы знать любые цены, о которых вы слышали для проектов преобразования one-to-one из кода Cobol в современный язык. Речь идет о программах с несколькими сотнями тысяч строк кода.


Что такое современный C++?

Иногда я читаю дискуссию о том, почему C++ хорош или плох, и иногда один из аргументов приводит то, что современный C++ очень отличается от старого C++. Мне интересно, в чем именно будет заключаться…


Становится ли современный C++ все более распространенным?

Когда я впервые узнал C++ 6-7 лет назад, то, что я узнал, было в основном C with Classes. std::vector определенно была продвинутой темой, о которой вы могли бы узнать, если бы действительно…


C/C++ интерпретатор J2ME

кто-нибудь знает какой-нибудь C или C++ переводчик для мобильных телефонов? У меня есть Nokia 5310, и я нашел какой-то базовый интерпретатор ( CellBasic ) и хочу развиваться в C или C++ на ходу. Или…


Windows Python интерпретатор выходит на Ctrl+C

В большинстве интерпретаторов Python, которые я использовал, Ctrl+C заставит интерпретатор распечатать KeyboardInterrupt и остаться открытым. Однако при недавней установке на новый компьютер…


Что делает интерпретатор байт-кода быстрее, чем интерпретатор AST-walking?

Я действительно понимаю технические концепции, лежащие в основе этих двух проектов, но что делает интерпретатор байт-кода в целом намного быстрее? Есть ли хорошая книга, на которую кто-нибудь может…


Встроенный интерпретатор C++ для манипулирования данными в скомпилированной программе

У меня есть программа C++, которая создает большой объем данных, хранящихся в стандартных контейнерах C++. Я хотел бы иметь возможность запустить интерпретатор C++ из моей двоичной программы и…


Компиляция кода C++ (базовый интерпретатор) в ARM assembly

Я пишу базовую операционную систему командной строки для raspberry pi, очень похожую на те, что были на компьютерах 70-х и начала 80-х. Я сделал основной ввод / вывод текста с помощью assembly и…


Как написать простой интерпретатор в C++?

Как написать простой интерпретатор для простого языка в C++ , который получает файл .txt в качестве входных данных и запускает его. ** только для + — / * out функций ** Входные данные (исходный код)…


Интерпретатор пропускает часть кода в sys.argv

У меня есть код в if statement, который проверяет, был ли передан argv в командной строке, однако у меня есть часть кода, которая должна запускаться, если ни один аргумент не был передан…

Выбор и установка интерпретаторов Python — Visual Studio

  • Чтение занимает 3 мин

В этой статье

По умолчанию при установке рабочей нагрузки Python для разработки в Visual Studio 2017 и более поздних версий также устанавливается Python 3 (64-разрядная версия).By default, installing the Python development workload in Visual Studio 2017 and later also installs Python 3 (64-bit). При необходимости вы можете установить 32-разрядную и 64-разрядную версии Python 2, Python 3 вместе с Miniconda (Visual Studio 2019) или Anaconda 2/Anaconda 3 (Visual Studio 2017), как описано в руководстве по установке.You can optionally choose to install 32-bit and 64-bit versions of Python 2 and Python 3, along with Miniconda (Visual Studio 2019) or Anaconda 2/Anaconda 3 (Visual Studio 2017), as described in Installation.

Кроме того, вы можете установить стандартные интерпретаторы из диалогового окна Add Environment (Добавление среды).Alternately, you can install standard python interpreters from the Add Environment dialog. Выберите команду Add Environment (Добавление среды) в окне Python Environments (Среды Python) или в панели инструментов Python, выберите вкладку Python installation (Установка Python), укажите интерпретаторы для установки и нажмите Install (Установить).Select the Add Environment command in the Python Environments window or the Python toolbar, select the Python installation tab, indicate which interpreters to install, and select Install.

Кроме того, любой интерпретатор из приведенной ниже таблицы можно установить вручную, не используя Visual Studio Installer.You can also manually install any of the interpreters listed in the table below outside of the Visual Studio installer. Например, если вы установили Anaconda 3 еще до установки Visual Studio, нет необходимости снова устанавливать этот дистрибутив с помощью Visual Studio Installer.For example, if you installed Anaconda 3 before installing Visual Studio, you don’t need to install it again through the Visual Studio installer. Вы также можете установить интерпретатор вручную, если, например, доступна новая версия, которая пока что не отображается в установщике Visual Studio.You can also install an interpreter manually if, for example, a newer version of available that doesn’t yet appear in the Visual Studio installer.

Примечание

Visual Studio поддерживает Python версии 2.7, а также 3.5 и выше.Visual Studio supports Python version 2.7, as well as version 3.5 and greater. Visual Studio можно использовать для редактирования кода, написанного на языке Python других версий, но эти версии официально не поддерживаются, а функции, такие как IntelliSense и отладка, могут не работать.While it is possible to use Visual Studio to edit code written in other versions of Python, those versions are not officially supported and features such as IntelliSense and debugging might not work.

Для Visual Studio 2015 и более ранних версий нужно вручную установить один из интерпретаторов.For Visual Studio 2015 and earlier, you must manually install one of the interpreters.

Visual Studio (любой версии) автоматически обнаруживает все установленные интерпретаторы Python и окружения для них, проверяя значения в реестре (согласно описанию регистрации Python в реестре Windows 514 PEP).Visual Studio (all versions) automatically detects each installed Python interpreter and its environment by checking the registry according to PEP 514 — Python registration in the Windows registry. Установки Python обычно находятся в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Python (32-разрядная версия) и HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Python (64-разрядная версия), затем в узлах для распределения, таких как PythonCore (CPython) и ContinuumAnalytics (Anaconda).Python installations are typically found under HKEY_LOCAL_MACHINE\SOFTWARE\Python (32-bit) and HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Python (64-bit), then within nodes for the distribution such as PythonCore (CPython) and ContinuumAnalytics (Anaconda).

Если Visual Studio не сможет обнаружить установленное окружение, см. раздел Указание существующего окружения вручную.If Visual Studio does not detect an installed environment, see Manually identify an existing environment.

Visual Studio отображает все известные окружения в окне Окружения Python и автоматически обнаруживает обновления для существующих интерпретаторов.Visual Studio shows all known environments in the Python Environments window, and automatically detects updates to existing interpreters.

ИнтерпретаторInterpreter DescriptionDescription
CPythonCPython Собственный и самый используемый интерпретатор доступен в 32- и 64-разрядных версиях (рекомендуется 32-разрядная).The «native» and most commonly-used interpreter, available in 32-bit and 64-bit versions (32-bit recommended). Он предоставляет последние возможности языка, максимальную совместимость пакета Python, полную поддержку отладки и взаимодействие с IPython.Includes the latest language features, maximum Python package compatibility, full debugging support, and interop with IPython. См. также статью о сравнении Python 2 и Python 3.See also: Should I use Python 2 or Python 3?. Имейте в виду, что Visual Studio 2015 и более ранние версии не поддерживают Python 3.6, и в них может появиться ошибка Неподдерживаемая версия Python 3.6.Note that Visual Studio 2015 and earlier do not support Python 3.6+ and can give errors like Unsupported python version 3.6. Используйте Python 3.5 или более раннюю версию.Use Python 3.5 or earlier instead.
IronPythonIronPython Реализация .NET для Python (доступна 32- и 64-разрядная версия), обеспечивающая взаимодействие с C#, F# и Visual Basic, доступ к API-интерфейсам .NET, стандартную отладку Python (но не отладку в смешанном режиме C++) и отладку в смешанном режиме IronPython и C#.A .NET implementation of Python, available in 32-bit and 64-bit versions, providing C#/F#/Visual Basic interop, access to .NET APIs, standard Python debugging (but not C++ mixed-mode debugging), and mixed IronPython/C# debugging. Однако IronPython не поддерживает виртуальные среды.IronPython, however, does not support virtual environments.
AnacondaAnaconda Открытая платформа для анализа и обработки данных на базе Python, которая включает в себя последнюю версию CPython и большинство пакетов со сложной установкой.An open data science platform powered by Python, and includes the latest version of CPython and most of the difficult-to-install packages. Рекомендуем использовать этот интерпретатор, если вы не можете определиться.We recommend it if you can’t otherwise decide.
PyPyPyPy Реализация JIT для Python с высокопроизводительной трассировкой, которая хорошо подходит для долго выполняющихся программ и ситуаций, когда вы обнаружили проблемы с производительностью, которые не удается устранить другими способами.A high-performance tracing JIT implementation of Python that’s good for long-running programs and situations where you identify performance issues but cannot find other resolutions. Работает с Visual Studio, но имеет ограниченную поддержку расширенных возможностей отладки.Works with Visual Studio but with limited support for advanced debugging features.
JythonJython Реализация Python на виртуальной машине Java (JVM).An implementation of Python on the Java Virtual Machine (JVM). Аналогично IronPython, код, выполняемый в Jython, может взаимодействовать с классами и библиотеками Java, но не может использовать многие библиотеки, предназначенные для CPython.Similar to IronPython, code running in Jython can interact with Java classes and libraries, but may not be able to use many libraries intended for CPython. Работает с Visual Studio, но имеет ограниченную поддержку расширенных возможностей отладки.Works with Visual Studio but with limited support for advanced debugging features.

Сведения о новых способах обнаружения сред Python см. в статье PTVS Environment Detection (Обнаружение среды PTVS) на сайте github.com.Developers that want to provide new forms of detection for Python environments, see PTVS Environment Detection (github.com).

Перемещение интерпретатораMove an interpreter

Если вы переместите существующий интерпретатор в новое расположение с помощью средств файловой системы, Visual Studio не сможет отследить изменение автоматически.If you move an existing interpreter to a new location using the file system, Visual Studio doesn’t automatically detect the change.

  • Если изначально вы указали расположение интерпретатора в окне Окружения Python, укажите новое расположение, изменив параметры окружения на вкладке Настройка в этом же окне.If you originally specified the location of the interpreter through the Python Environments window, then edit its environment using the Configure tab in that window to identify the new location. См. раздел Указание существующего окружения вручную.See Manually identify an existing environment.

  • Если вы установили интерпретатор с помощью установщика, выполните следующие действия для переустановки интерпретатора в новом расположении:If you installed the interpreter using an installer program, then use the following steps to reinstall the interpreter in the new location:

    1. Верните интерпретатор Python в исходное расположение.Restore the Python interpreter to its original location.
    2. Удалите интерпретатор с помощью установщика, который очистит записи в реестре.Uninstall the interpreter using its installer, which clears the registry entries.
    3. Установите интерпретатор заново в нужном расположении.Reinstall the interpreter at the desired location.
    4. Перезапустите Visual Studio и убедитесь, что новое расположение обнаружено автоматически и указано вместо старого.Restart Visual Studio, which should auto-detect the new location in place of the old location.

Такой процесс позволяет гарантировать, что в реестре правильно обновятся записи о расположении интерпретатора, которое использует Visual Studio.Following this process ensures that the registry entries that identify the interpreter’s location, which Visual Studio uses, are properly updated. Также установщик устраняет все возможные побочные эффекты.Using an installer also handles any other side effects that may exist.

См. также разделSee also

Существует ли интерпретатор языка сценариев синтаксиса типа C для C ++?

Я давно начал работать над визуализатором динамических графиков , редактором и платформой тестирования алгоритмов (графы с узлами и дугами, а не другие виды). Для платформы тестирования алгоритмов мне нужно позволить пользователю написать сценарий или вызвать сценарий из файла, который будет взаимодействовать с загруженным в данный момент графом. Визуализатор будет делать такие вещи, как подсвечивать узлы, когда их посещает алгоритм сценария, добавляя некоторую искусственную задержку, чтобы визуализировать, как алгоритм перемещается и делает что-то.Во-вторых, сценарии также будут использоваться для добавления сторонних функций, которые я мог бы либо сделать доступными в виде уже существующих сценариев в папке программы, либо просто интегрировать в программу на C ++ после того, как они будут протестированы и заработают.

Все мои поиски интерпретатора для встраивания в мою программу привели меня к lua; затем я начал писать свой собственный рекурсивный анализатор спуска для моего собственного языка сценариев синтаксиса, подобного C (который я планировал использовать подмножество грамматики C ++, чтобы любой код, написанный на моем языке сценариев, можно было скопировать в любой код C ++.Это была интересная безумная идея, о которой я нисколько не жалею, у меня есть области видимости, функции, циклы, переходы, типизированные переменные, выражения.

Но теперь, когда я подхожу к добавлению классов, методов классов, наследования (для взаимодействия скриптов с программой потребуются некоторые классы по умолчанию), я понял, что это займет ОЧЕНЬ много времени и усилий. Это многовато для личного проекта неоконченного студента с экзаменами, на которые нужно учиться… но все же я хочу завершить этот проект.

Самостоятельное требование, чтобы скрипты были на 100% совместимы с C ++, было практически необходимым, это было бы просто маленькой приятной дополнительной вещью, без которой я могу обойтись.

Теперь вопрос в том, есть ли альтернатива lua с синтаксисом типа c, который поддерживает все, что я уже сделал, плюс классы и наследование? (возможность добавления пользовательских «классов», которые являются интерфейсными скриптами в программе, является обязательной)

(я не могу предположить, что у пользователя установлен полный компилятор C ++, поэтому я не могу просто скомпилировать их «скрипт» во время выполнения как dll для загрузки и вызова, хотя я бы хотел, чтобы мог)

c ++ — действительно ли интерпретатор времени выполнения является частью выполнения программы C?

Как мы знаем, C — это компилируемый язык.Согласно языку C Википедия говорит, что:

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

Но когда я прочитал это и согласно Thinking in C ++ 2 Брюса Эккеля , он сказал, что в главе 2 под названием Iostreams : (Я пропустил некоторые части)

Большой камень преткновения — это интерпретатор времени выполнения , используемый для Функции списка с переменным аргументом. Это код, который анализирует ваша строка формата во время выполнения и захватывает и интерпретирует аргументы из список переменных аргументов. Это проблема по четырем причинам.

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

эта ссылка также говорит, что:

  • Более безопасный тип: с типом объекта ввода-вывода является статически известно компилятору.Напротив, cstdio использует «%» поля для динамического определения типов.

Итак, прежде чем читать это, я подумал, что интерпретатор не используется в компилируемом языке, таком как C, но правда ли, что интерпретатор времени выполнения также доступен во время выполнения программы C? Я ошибался до того, как это прочитал? Неужели для этой интерпретации времени выполнения возникает так много накладных расходов по сравнению с Iostreams?

Написание интерпретатора байт-кода — в C

Где-то в 2016 году мне в руки попалась книга Торстена Болла «Написание интерпретатора в го».Я пролистал первые несколько глав, мне понравилось то, что я прочитал, а потом… жизнь сложилась, и я так и не додумался до создания переводчика. 🙁

То есть до прошлого месяца. Я очистил свое расписание и, наконец, начал просматривать книгу.

Для двойного удовольствия я выбрал C в качестве языка программирования вместо Go. Это оказалось отличным решением, поскольку оно действительно заставило меня понять, что происходит, вместо того, чтобы всегда иметь простой вариант просто скопировать авторский код.

Я назвал свою реализацию Monkey-C Monkey-Do.

Книга проведет вас через все этапы создания и запуска интерпретатора языка программирования Monkey:

  • Токенизация ввода
  • Разобрать токены в абстрактное синтаксическое дерево (AST)
  • Оценить дерево

Этому оценщику обхода дерева требуется около 6 секунд для вычисления 35-го числа Фибоначчи с использованием очень неоптимального алгоритма с большим количеством рекурсии.Это, конечно, неплохо, но и не самое лучшее по сравнению с любым из современных интерпретируемых языков промышленного уровня.

Для сравнения, на той же машине Python 3.7 требует 2,3 секунды для того же самого алгоритма, а узлу 15 требуется только колоссальные 200 миллисекунд (из-за его JIT-компиляции).

Можем ли мы сделать лучше, не обращаясь непосредственно к оборудованию?

Написание компилятора байт-кода и виртуальной машины

К счастью, автор книги на этом не остановился.В своей второй книге (Написание компилятора на Go) автор проведет вас по этапам создания интерпретатора байт-кода.

Повторное использование AST из первой книги показывает, как создать компилятор, выводящий байт-код. Одновременно вы начинаете создавать виртуальную машину, способную выполнять этот байт-код.

После запуска виртуальной машины вычисление 35-го числа Фибоначчи теперь занимает всего 0,82 секунды. Это намного ближе или даже быстрее, чем на некоторых других интерпретируемых языках.

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

Программирование на C

Это был мой первый опыт программирования на C, и я удивился, обнаружив, что мне действительно нравится его использовать. Из-за небольшой спецификации языка на чтение документации ушло очень мало времени.

Нельзя сказать, что я несколько раз не прострелил себе ногу и не боролся с управлением памятью. Однако использование C действительно укрепило мое понимание некоторых языков, появившихся после него. И какие проблемы они пытаются решить или улучшить с помощью C.

При правильном оснащении я очень полюбил C… Извини, не сожалею.

Ресурсы

Интерпретатор MIR C и JIT-компилятор

Последние два года я работал над проектом, реализующим универсальный облегченный компилятор Just-in-Time (JIT), известный как MIR.Краеугольным камнем проекта является машинно-независимое промежуточное представление среднего уровня (MIR).

Большая часть проекта состоит из кода, который компилирует исходный код C в MIR. Поскольку MIR можно интерпретировать и синхронизировать, я легко расширил этот компилятор C-to-MIR на интерпретатор C и компилятор JIT.

Я ранее писал о других частях проекта MIR (см. MIR: облегченный проект JIT-компилятора , но я никогда не писал подробно о компиляторе C-to-MIR, интерпретаторе C или JIT.В этой статье я хотел бы исправить эти упущения.

Мотивация для компилятора C-to-MIR

Изначально я начал проект MIR, чтобы устранить недостатки текущего CRuby JIT, добавив многоуровневую JIT-компиляцию.

Чтобы начать использовать проект MIR для реализации компилятора Ruby JIT, мне понадобился компилятор C-to-MIR. Стандартные методы Ruby, реализованные на C, могут быть переведены в MIR и могут быть встроены в код MIR, созданный из байт-кода Ruby. Комбинированный код можно оптимизировать и вовремя преобразовать в высокопроизводительный машинный код.

Есть несколько способов реализовать компилятор C-to-MIR. Я мог бы реализовать компилятор LLVM IR-to-MIR или написать порт GCC, ориентированный на MIR. Но это создало бы зависимость от внешнего проекта. Это тоже непростая задача, и в будущем она может стать причиной затрат на техническое обслуживание.

С другой стороны, некоторые люди довольно быстро написали небольшие компиляторы Си. Здесь я могу упомянуть проекты компиляторов lacc, 8cc и 9cc.

Кроме того, я хочу расширить язык C в будущем, чтобы отметить программные точки, в которых компилятор C-to-MIR должен профилировать код и генерировать спекулятивный и деоптимизированный код в зависимости от профиля выполнения.Например, код C, реализующий байт-код плюс виртуальной машины CRuby для целых чисел, проверяет типы операндов. Он также проверяет, что метод плюс для целых чисел не был переопределен, что нет переполнения, нет необходимости использовать числа с разной точностью и т. Д. Все эти проверки были бы отмеченными пунктами программы, о которых я говорю.

Трудно реализовать такие расширения для GCC или Clang, получить разрешение на включение их в репозитории GCC или Clang или поддержать их на стороне.

Итак, я решил сначала написать свой собственный компилятор C-to-MIR. Он должен реализовывать стандарт C11 без редко используемых дополнительных стандартных функций, таких как массивы переменных, комплексные числа и атомарные данные.

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

Интерпретатор C и JIT

Компилятор C-to-MIR имеет интерфейс API, и я могу использовать компилятор как библиотеку.MIR, с другой стороны, включает интерпретатор и JIT. Склеив весь этот код, мне было легко создать интерпретатор C и JIT. Мне нужно было написать небольшую программу-драйвер.

Объединение компилятора C-to-MIR, интерпретатора MIR и JIT с драйвером привело к созданию исполняемого файла c2m , который работает как интерпретатор C и JIT.

Как MIR, JIT генерирует код для архитектур x86-64, aarch64, ppc64 (big and little endian) и s390x архитектур. c2m тоже работает на этих архитектурах.

Опции

c2m аналогичны широко используемым опциям cc : -E , -c , -S , -o , -I include_dir , -D макрос [= значение ] , -U макрос , -L каталог_библиотеки и -l dynamic_library .

Вместо кода ассемблера c2m генерирует текстовое представление MIR.Например, команда

 c2m -S file1.c file2.c
 

создает текстовые файлы MIR file1.mir и file2.mir .

Вместо объектных файлов c2m генерирует двоичное представление MIR. Например, команда

 c2m -c file1.c file2.c
 

создает двоичные файлы MIR file1.bmir и file2.bmir .

Вместо исполняемого файла c2m создает связанный двоичный файл MIR.Например, команда

 c2m file1.c file2.c
 

создает один связанный двоичный файл MIR, a.bmir (имя можно изменить с помощью параметра -o ).

Аналогично использованию cc в ассемблерных и объектных файлах, вы можете использовать текстовые и двоичные файлы MIR в командной строке c2m , например:

 c2m file1.mir file2.bmir
 

Эта команда создает связанный двоичный файл MIR, a.bmir .

Для c2m есть несколько параметров.Чтобы интерпретировать код C, используйте параметр -ei . Например, команда

 c2m echo.c -ei 1 2 Привет
 

компилирует программу echo.c (которая должна содержать основную функцию ) в MIR, и MIR будет выполняться в интерпретаторе. Параметры командной строки после -ei будут переданы в основную функцию в качестве аргументов ( argc и argv ).

Чтобы выполнить ту же программу в MIR JIT, используйте параметр -например, :

 c2m эхо.c -eg 1 2 Привет
 

Параметр -el запрашивает ленивую генерацию JIT. c2m не будет генерировать машинный код для функции, пока функция не будет вызвана в первый раз:

 c2m echo.c -el 1 2 Привет
 

Чтобы увидеть, как компилятор MIR JIT оптимизирует код MIR и генерирует машинный код, используйте параметр -dg . Однако будьте осторожны, поскольку он выводит много информации.

Внутренние сведения компилятора C-to-MIR

Как я писал ранее, основной целью реализации компилятора C-to-MIR была простота.Обычно мы можем добиться простоты, разделив задачи на небольшие управляемые подзадачи. Существует даже экстремальный дизайн компилятора с нанопроходами, который используется для изучения тем о компиляторах в образовании.

Мой подход к реализации компилятора C — это классическое разделение на четыре прохода примерно одинакового размера: препроцессор, синтаксический анализатор, средство проверки контекста и генератор MIR, как показано на рисунке 1.

Рисунок 1. Компилятор MIR проходит четыре этапа.

Я не использую для компилятора никаких инструментов вроде YACC.Хотя стандартная грамматика ANSI C неоднозначна, я не изменяю ее. Я использую грамматику синтаксического анализа (PEG), ручной синтаксический анализатор с редким возвратом. Он простой и маленький, но немного медленнее, чем детерминированные парсеры.

Типичная JIT, например, в виртуальной машине Java, выполняется в потоках параллельно с выполнением кода. Я также разработал компиляторы MIR JIT и C-to-MIR для использования в многопоточной среде. Поэтому было легко заставить c2m компилировать разные исходные файлы параллельно и параллельно генерировать машинный код для разных функций C.

Вы можете определить количество параллельных задач для c2m , которые будут запускаться одновременно, используя опцию -p . Например, в этом вызове

 c2m -p4 file1.c file2.c file3.c file4.c -eg  аргументы программы
  

c2m сначала создаст четыре потока. Эти потоки могут параллельно компилировать четыре исходных файла. Потоки будут брать исходные файлы из очереди исходных файлов для создания кода MIR.

После компиляции и связывания сгенерированного кода MIR четыре новых потока выполнят оптимизацию и генерацию машинного кода для каждой функции MIR.Аналогично, эти новые потоки берут функции MIR из очереди функций MIR. Таким образом, вы можете сгенерировать машинный код для четырех функций одновременно. На рисунке 2 показана параллельная работа c2m .

Рисунок 2: Параллельное выполнение компиляции и генерации машинного кода.

Текущее состояние интерпретатора C и JIT

В основном реализован компилятор C-to-MIR. Он проходит около 1000 тестов из разных наборов тестов C.

Около года назад я достиг важной вехи: успешной начальной загрузки. c2m компилирует собственные исходники и генерирует двоичный файл MIR. Затем выполнение этого двоичного файла MIR снова обрабатывает источники c2m и генерирует другой двоичный файл MIR. Два двоичных файла MIR идентичны:

 cc -O3 -fno-tree-sra -std = gnu11 -Dx86_64 -I. mir-gen.c c2mir.c c2mir-driver.c mir.c -ldl -o c2m
  ./c2m -Dx86_64 -I. mir-gen.c c2mir.c c2mir-driver.c mir.c -o 1.bmir
  ./c2m 1.bmir -el -Dx86_64 -I. mir-gen.c c2mir.c c2mir-driver.c mir.c -o 2.bmir
 

Чтобы лучше понять размер проекта MIR, круговая диаграмма на рисунке 3 показывает строки кода во всех источниках c2m , как сообщает sloccount.

Рисунок 3: Размеры исходного кода в основных компонентах c2m.

Совместимость с ABI

C ABI (двоичный интерфейс приложения) может быть довольно сложным. Например, на некоторых архитектурах C ABI требует, чтобы код передавал небольшие структуры полностью в регистры (см., Например, aarch64 ABI или s390x ABI) или частично в регистрах (см., Например, ppc64 BE ABI и ppc64 LE ABI), или чтобы передавать разные части структур в разные классы регистров, будь то целочисленные или с плавающей запятой (например, в x86-64 ABI).

Полная реализация C ABI — непростая задача. Некоторые реализации C игнорируют совместимость ABI с полным вызовом или опускают реализацию long double для целевого ABI. Поскольку компилятор C-to-MIR будет взаимодействовать с кодом, сгенерированным GCC / Clang для реализации JIT в Ruby, полная совместимость с ABI является обязательной. Например, значение интерпретатора в MRuby представлено небольшой структурой C.

Я потратил значительные усилия на внедрение C ABI для его четырех целей. Помимо изменений кода C-to-MIR, реализация потребовала изменений в дизайне MIR.Я считаю, что нынешний дизайн позволит легко добавить новую цель с другим ABI в будущем.

Сравнение компилятора MIR C с другими компиляторами C

Существует множество реализаций C. Для сравнения с моей реализацией C я выбрал следующие компиляторы C:

  • GCC версии 10.2.1. Этот компилятор широко используется и является самым портативным промышленным компилятором C.
  • Clang версии 10.0.1. Это популярный промышленный компилятор C с современным дизайном, поддерживающий множество целей.
  • PCC версии 1.2.0.DEVEL. Это современная версия компилятора Portable C, выпущенная очень давно (1979 г.). Он поддерживает C11 на множестве целей, включая x86_64, но большинство поддерживаемых целей устарели.
  • TCC версии 0.9.27. Крошечный компилятор C11 — это двухпроходный компилятор со своим собственным ассемблером и компоновщиком. Он поддерживает i386 / x86-64, arm, arm64 и riscv64.
  • Cproc. Реализация C11 Майкла Форни основана на серверной части компилятора QBE.QBE можно рассматривать как мини-LLVM с аналогичным IR и небольшим конвейером оптимизации SSA. QBE поддерживает x86-64 и движется к поддержке arm64. Сравнение Cproc полезно для сравнения производительности MIR-генератора и QBE, поскольку оба могут использоваться для облегченных JIT-компиляторов.
  • cparser. Это реализация C99, основанная на довольно сложном бэкэнде, libFirm версии 1.22. Компилятор нацелен на i386 / x86-64 и 32-разрядные arm, mips, riscv и sparc.
  • lacc. Это реализация C89, поддерживающая только x86_64.
  • Chibicc. Последняя реализация Руй Уэямы C11 для образовательных целей; нацелен только на x86_64.

Я также попытался протестировать следующие компиляторы C:

  • SCC. К сожалению, в моих тестах он вылетает из-за внутренней ошибки компилятора.
  • LCC. Этот старый компилятор C описан в книге A Retargetable C Compiler: Design and Implementation (Addison-Wesley, 1995). Я отклонил его, потому что он не поддерживает x86-64.
  • 8cc и 9cc.Эти компиляторы сложно использовать, и, вероятно, нет смысла их проверять, потому что Chibicc является продолжением их развития.

Производительность сгенерированного кода

Чтобы сравнить производительность кода, сгенерированного компиляторами, я использую набор из 14 тестов, большинство из которых взяты из серии старых компьютерных языков. Я выбрал эти микро-тесты, потому что собрать более серьезные тесты для всех компиляторов проблематично. Мой многолетний опыт тестирования производительности подсказывает мне, что какой бы тест вы ни использовали, люди всегда будут критиковать вас за выбор.У меня есть только одно оправдание: лучше иметь некоторую информацию, чем ничего.

На рисунке 4 показаны средние и геометрические относительные скорости (путем измерения процессорного времени) сгенерированного кода от каждого компилятора на i9-10900 под Fedora Core 32. Базовый уровень — это код, сгенерированный GCC с -O2 . Для c2m время выполнения включает работу компилятора C-to-MIR и JIT, но эта работа является небольшой частью всего выполнения. Я запускал каждый тест по три раза и выбирал лучшее время.

Рисунок 4: Относительная скорость кода, генерируемого компиляторами, протестированными на процессоре Intel i9.

Люди иногда критикуют меня за то, что я редко тестирую процессоры AMD. На рисунке 5 показаны результаты тестов на AMD Ryzen 7 3800x, которые в основном совпадают.

Рисунок 5: Относительная скорость кода, генерируемого компиляторами, протестированными на процессоре AMD.

Скорость массовой компиляции

Чтобы получить скорость массовой компиляции, я скомпилировал исходный код bzip2 как один файл.В файле около 6500 строк кода C. Я использовал c2m в непараллельном режиме для создания двоичного файла MIR. Опять же, я трижды компилировал исходный файл и выбрал лучшее время. На рисунке 6 показана скорость компиляции компиляторов относительно скорости gcc -O2 .

Рисунок 6: Относительная скорость массовой компиляции.

Различия в скорости довольно значительны, поэтому мне пришлось использовать логарифмическую шкалу на диаграмме. Крошечный компилятор C обладает невероятной скоростью. Если бы он генерировал лучший код, его можно было бы использовать как JIT-компилятор с языком C в качестве интерфейса.

Помимо скорости массовой компиляции, время запуска компилятора очень важно для JIT-компиляторов динамических языков программирования, потому что своевременные методы довольно малы. GCC и Clang — худшие исполнители здесь. Если вам интересна эта тема, вы можете прочитать мою предыдущую статью о проекте облегченного JIT-компилятора.

Размер кода компилятора

Различия в размере кода компилятора еще больше. Самый маленький компилятор (Chibicc) почти в 1000 раз меньше самого большого (Clang), как показано на рисунке 7.

Рисунок 7: Относительные размеры кода самих компиляторов.

В некоторых компиляторах есть огромная секция bss (например, на Cproc она составляет 17 МБ). Поэтому для расчета размеров я использовал размеры только раздела текста и данных.

Я использовал GCC и Clang из дистрибутива Fedora Core 32. Все остальные компиляторы я построил с оптимизацией (то есть в режиме выпуска).

Для GCC я взял исполняемые файлы gcc и cc1 . Для Clang я использовал clang и его библиотеки libclang-cpp и libLLVM .Для PCC я использовал его исполняемые файлы cc , ccom и cpp . Для Cproc я использовал cproc , cproc-qbe и qbe . Все остальные компиляторы состоят из одного исполняемого файла.

Планы на будущее компилятора C-to-MIR

Мой краткосрочный план — предложить первую версию проекта MIR, включая компилятор C-to-MIR, до конца 2021 года.

В следующих выпусках я бы хотел:

  • Увеличить скорость компиляции C-to-MIR
  • Улучшить сгенерированный код C-to-MIR
  • Порт MIR для большего количества целей (64-битные riscv и mips64 Linux и Apple M1 macOS)
  • Реализация расширений спекуляции / деоптимизации на уровнях C и MIR

Хотя скорость компиляции C-to-MIR никогда не была главной целью, ее скорость вполне конкурентоспособна с другими компиляторами C.Я обнаружил, что некоторые люди предпочитают использовать язык C вместо MIR для своих реализаций JIT. Это делает повышение скорости компиляции C-to-MIR важной задачей. Поэтому я ставлю это на первое место.

Меня спрашивали, можно ли сделать обычный компилятор C, а не JIT. Написание компилятора не является сложной или большой задачей, если использовать существующий ассемблер. Чтобы создать компилятор, нам просто нужно испустить код ассемблера вместо текущего машинного кода. Однако, чтобы сделать это правильно, потребуется выдать отладочную информацию (например, в карликовом формате) и сгенерировать позиционно-независимый код (PIC) для генерации кода для разделяемых библиотек.

Заключение

Компилятор и интерпретатор C JIT, реализованные в проекте MIR, демонстрируют конкурентоспособный сгенерированный код и скорость компиляции. Он может использоваться для написания сценариев на C и в качестве JIT-компилятора для реализации различных языков программирования. Надеюсь, его тоже можно будет использовать в образовательных целях.

Связанные

Что такое переводчик? — Определение из Техопедии

Что означает переводчик?

Интерпретатор — это компьютерная программа, которая используется для непосредственного выполнения программных инструкций, написанных с использованием одного из многих языков программирования высокого уровня.

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

Техопедия объясняет переводчика

Люди могут понимать только языки высокого уровня, которые называются исходным кодом. С другой стороны, компьютеры могут понимать только программы, написанные на двоичных языках, поэтому требуется либо интерпретатор, либо компилятор.

Языки программирования реализованы двумя способами: интерпретация и компиляция. Как следует из названия, интерпретатор преобразует или интерпретирует программный код высокого уровня в код, который может быть понят машиной (машинный код), или в промежуточный язык, который также может быть легко выполнен.

Интерпретатор считывает каждый оператор кода, а затем преобразует или выполняет его напрямую. Напротив, ассемблер или компилятор преобразует исходный код высокого уровня в собственный (скомпилированный) код, который может выполняться непосредственно операционной системой (например,грамм. создав программу .exe).

И компиляторы, и интерпретаторы имеют свои преимущества и недостатки и не исключают друг друга; это означает, что их можно использовать вместе, поскольку большинство интегрированных сред разработки используют как компиляцию, так и перевод для некоторых языков высокого уровня.

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

Хотя время анализа исходного кода сокращается, особенно большого, время выполнения для интерпретатора сравнительно меньше, чем для компилятора. Вдобавок ко всему, поскольку интерпретация выполняется для каждой строки или оператора, ее можно остановить в середине выполнения, чтобы можно было либо изменить код, либо отладить.

Компиляторы должны генерировать промежуточный объектный код, для которого требуется больше памяти для связывания, в отличие от интерпретаторов, которые, как правило, используют память более эффективно.

Поскольку интерпретатор считывает и затем выполняет код в одном процессе, он очень полезен для написания сценариев и других небольших программ. Таким образом, он обычно устанавливается на веб-серверах, на которых выполняется множество исполняемых сценариев. Он также используется на этапе разработки программы для тестирования небольших фрагментов кода один за другим, вместо того, чтобы каждый раз компилировать всю программу.

Каждый исходный оператор будет выполняться построчно во время выполнения, что особенно ценится в целях отладки для немедленного распознавания ошибок.Переводчики также используются в образовательных целях, поскольку их можно использовать, чтобы показать студентам, как программировать по одному сценарию за раз.

Языки программирования, использующие интерпретаторы, включают Python, Ruby и JavaScript, в то время как языки программирования, использующие компиляторы, включают Java, C ++ и C.

бесплатных компиляторов и интерпретаторов C / C ++ (thefreecountry.com)

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

На этой странице перечислены многочисленные бесплатные компиляторы C и C ++, кросс-компиляторы и интерпретаторы для самых разных операционные системы на ПК, Mac и других компьютерах.

Сообщество Microsoft Visual Studio

Для индивидуального программиста или программиста-любителя сообщество Microsoft Visual Studio, по-видимому, включает в себя большую часть важные инструменты его коммерческих собратьев. Предполагая список сравнение различных версий завершено, вы получаете IDE, отладчик, оптимизирующий компилятор полной версии, редактор, средства отладки и профилирования. С помощью этого пакета вы можете разрабатывать программы для настольные и мобильные версии Windows, а также Android.Компилятор C ++ поддерживает большинство ISO C ++ 11 и некоторые из C ++ 14 и C ++ 17. Компилятор C поддерживает некоторые из ISO C11 и C17 (только необходимые функции, и поэтому он не поддерживает C99), хотя, в зависимости от даты, когда вы читаете эту запись, вам может потребоваться установить Пакет SDK для Windows Insider Preview от Microsoft, чтобы он был доступен. Программное обеспечение также поддерживает создание программ на C #, Visual Basic, F # и Python. В то время, когда я писал это, на сайте указано, что Visual Studio Community бесплатно для индивидуальных разработчиков, проектов с открытым исходным кодом, академических исследований, обучения в классе. и некорпоративные организации с 5 или менее пользователями. Предупреждение : программа требует, чтобы вы входите в систему с учетной записью Microsoft (которая бесплатна), чтобы продолжать использовать ее после периода оценки 30 дней.

MinGW-w64

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

Clang: языковой интерфейс C для LLVM

Clang — это компилятор C, C ++, Objective C и Objective C ++, разработанный в основном Apple. Это часть проекта LLVM. (Прежде чем вы спросите, LLVM не означает ничего особенного, хотя исторически это сокращение от «Виртуальная машина низкого уровня». Я думаю, они хотят жить с этим именем, потому что это не виртуальная машина в смысл, который люди используют сегодня.) Он реализует различные языковые стандарты ISO C и C ++, такие как C11, ISO C ++ 11, C ++ 14 и части C ++ 1z. Он также поддерживает различные расширения, имеющиеся в семействе компиляторов GNU C. Компилятор выпущен под лицензией BSD. К сожалению, в то время, когда я это пишу, он предоставляется только в исходном коде. форма, и вам придется скомпилировать ее самостоятельно.

Пакет компиляторов AMD x86 Open64

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

SDK NVIDIA HPC

SDK NVIDIA HPC (где HPC, вероятно, означает высокопроизводительные вычисления) предоставляет C, C ++ и Fortran. компиляторы, библиотеки, инструменты профилирования производительности, отладки и виртуализации (контейнеризации) и т. д. для Linux (Intel x86_64, OpenPOWER и ARM Server) и, в будущем, системы Windows x64. Включает CUDA, OpenACC и математические библиотеки с ускорением на GPU, а также поддержка полных спецификаций C ++ 17 с возможность выгружать параллельные алгоритмы на графические процессоры NVIDIA без использования прагм или языковых расширений.

Комплект компилятора Amsterdam

Амстердамский компиляторный комплект («ACK») для систем типа Unix, включая Linux, представляет собой кроссплатформенный компилятор для ANSI C, K&R C, Pascal, Modula-2 и BASIC (хотя поддержка BASIC примитивна, согласно их сайту). Он может генерировать код для самых разных процессоров, хотя он был протестирован только для 8086 (i86), 80386 (i386), 68000, 8080 и VideoCore IV. Форк этого компилятора служил по умолчанию набор инструментов для Minix 1 и 2 (Minix 3 использует Clang).Обратите внимание, что в то время, когда я пишу это (в 2020 году), разработчик заявляет (на сайте), что он «не может честно рекомендовать использовать ACK для производственного кода. если только в качестве временной меры или если другие преимущества ACK (например, очень легкий под ключ toolchain ценен для вас) перевешивают качество кода ». Это программное обеспечение выпущено под лицензией BSD.

Открытая вилка Watcom V2

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

Открытый исходный код Watcom / Open Watcom C / C ++ Compiler

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

Компилятор Digital Mars C / C ++ (замена Symantec C ++)

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

Отладчик ИБП (интерпретатор C)

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

Компилятор C BDS

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

Apple Xcode для Mac OS X

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

Вилка Tiny C

Это форк компилятора Tiny C (который указан в другом месте на этой странице), который распространяется в виде исходного кода.Как и оригинальный компилятор Tiny C, он реализует многие функции стандарта ISO C99. Работает в Linux и Windows и распространяется под Стандартной общественной лицензией GNU.

Меньший C

Компилятор Smaller C — это однопроходный компилятор, который генерирует 16- или 32-разрядный язык ассемблера Intel x86 (80386 и новее). код для NASM, YASM или FASM (которые бесплатны aseemblers), которые затем можно собрать и связать в Windows, Mac OS X, Linux и DOS. Он также может генерировать код для Процессоры MIPS и TR3200.Язык поддерживает большую часть стандарта ANSI C89 и некоторые функции ANSI C99. Он способен компилирования. Однако на момент написания этой статьи стандартная библиотека C все еще находилась в разработке.

Компилятор Orange C

Orange C Compiler — это оптимизирующий («оптимизирующий», если вы используете другие варианты английского) Компилятор C, который поддерживает последние стандарты C, такие как C99 и C11. Работает как под Windows, так и под DOS, имеет встроенную среда разработки с программированием редактор (с подсветкой синтаксиса и автозавершением кода), сделать утилиту, отладчик и Редактор ресурсов Win32.Он может генерировать программы для Win32 и MSDOS, а также шестнадцатеричные файлы Intel и Motorola (что полезно, если вы писать программы для встраиваемых систем). Для вывода MSDOS ваши программы будут использовать Расширитель DOS. Автор этой программы также производит компилятор CC386, который также указан на эта страница.

PCC — портативный компилятор C

PCC основан на оригинальном Portable C Compiler от С. К. Джонсона. Цель проекта — написать небольшой быстрый компилятор C, который может компилировать исходный код C99.Компилятор — это двухпроходный компилятор, работающий в OpenBSD и NetBSD.

DeSmet C

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

Tiny C Compiler — самый маленький компилятор C для Linux

[ Обновление : автор сообщает на сайте, что больше не работает над компилятором.Смотрите в другом месте на эта страница для форка этого проекта, который все еще продолжается на момент написания.] Этот маленький Linux и Компилятор Windows C генерирует оптимизированные собственные двоичные файлы x86. Предполагается, что он компилирует, собирает и связывает в несколько раз быстрее, чем GCC. В настоящее время компилятор приближается к стандарту ISO C99. Он также включает необязательную проверку границ. Он также обрабатывает Файлы сценария C (просто добавьте строку shebang « #! / Usr / local / bin / tcc -run » в первую строку исходного кода C файл в Linux, чтобы он выполнялся напрямую).TCC распространяется под Стандартной общественной лицензией GNU.

Компилятор переносимых объектов

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

Mingw32 Компиляторы C и C ++

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

Компилятор GNU C / C ++

Это страница коллекции компиляторов GNU, на которой вы найдете исходный код для компиляторы GNU C, C ++, Fortran, Ada, Go и D, а также стандартные библиотеки.

Компилятор Pelles C

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

DJGPP Компиляторы C и C ++

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

Компилятор Cilk на основе ANSI C

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

Sphinx C — компилятор

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

LSI C-86 Компилятор C

Веб-сайт этого компилятора написан на японском языке, которого я не понимаю, но я понимаю, что это это кросс-компилятор, который позволяет вам генерировать ROMable код.Появляется более старая версия (3.30c) компилятора быть свободным. Бесплатная версия работает на Только MSDOS.

Кросс-компилятор SDCC C

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

Компилятор C LADSoft CC386

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

Проект Cygwin (компиляторы C и C ++)

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

LCC — компилятор с возможностью переназначения для ANSI C

LCC — это компилятор C (только исходный код), который генерирует код для Alpha, Sparc, MIPS R3000 и Intel x86. Также есть книга Компилятор C с возможностью перенастройки написано авторами компилятора, объясняющего код компилятора C. Ссылка выше указывает на более новую версию LCC (тех же авторов), чем описано в книге.

Циклон C

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

Турбо C 2,01

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

Компилятор C LCC-Win32

[ Обновление : этот компилятор больше не доступен. Для справки, раньше его можно было найти по адресу www.cs.virginia.edu/~lcc-win32/ .]
[ Обновление обновления : некоторые посетители сказали мне, что оно доступно на https: // lcc-win32.services.net/ . Однако, поскольку у меня нет возможности проверить, что это законный источник, и что это не сторонний сайт, нарушающий чьи-либо авторские права или потенциально распространяя зараженные вредоносным ПО исполняемые файлы, вместо этого я оставляю ссылку в этой заметке. Пусть покупатель будет бдителен, и все такое.]
Это компилятор C, который генерирует Win32 GUI и консольные приложения. Он поставляется со своим собственным компоновщиком, IDE, отладчиком, редактором ресурсов и компилятором ресурсов. LCC-Win32 основан на компиляторе LCC (см. В другом месте на этой странице) и является бесплатным. только для некоммерческого использования.

Леонардо IDE

[ Обновление : этот проект прекращен.] Leonardo IDE — это IDE на базе Macintosh, компилятор и отладчик для программ C. Он имеет редактор подсветки синтаксиса, компилятор ANSI C, компилятор для Язык визуализации ALPHA, редактор графиков, реверсивный виртуальный ЦП и т. Д. Обратите внимание, что программы не компилируются в собственный код, а к коду, который будет выполняться для виртуального ЦП. Виртуальная машина и отладчик позволяют выполнять код вперед и назад и поддерживают многозадачность.IDE поставляется с анимированными алгоритмами, а также с примерами исходного кода для таких игр, как тетрис, шашки и т. Д. IDE полезна для проверки и отладки вашего исходный код, поиск утечек памяти и т. д.

Компилятор Compaq C

[ Обновление : этот компилятор больше не доступен. Для справки, раньше его можно было найти по адресу h40097.www3.hp.com/linux/compaq_c/index.html .] Пользователи Linux / Alpha теперь могут бесплатно загрузить и использовать оптимизирующий компилятор C Compaq, просто заполнив форму и согласившись их лицензионное соглашение.Компилятор может использоваться для создания любого вида программ, коммерческих или иных. В состав компилятора входит математическая библиотека и отладчик (ladebug), портированные из True64 Unix. Он поставляется с обычными справочными страницами, а также со Справочным руководством по языку и Руководство программиста.

(PDF) Обучение программированию на C с помощью переводчика? Онлайн-переводчик для начинающих программистов на C

MANGALAM SANKUPELLAY & PRESHSHANAN SUBRAMANIAN34

среда программирования, которая в конечном итоге поможет им изучить другие продвинутые языки программирования

.Большинству новичков сложно понять базовые концепции программирования

из-за отсутствия примеров и практического опыта. Как правило,

студентам дается несколько строк кода для обучения, и после этого они должны написать

свою собственную программу. Однако они не понимают, как работают коды или

, как работает программа при изменении определенных кодов.

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

Программирование на C Стива Холмса [5], Programming in C: A Tutorial [6], C Tutor [7],

и C How to Программа [8], большинство из них не поддерживает взаимодействие с пользователем.Существующая среда обучения

является более теоретической, поскольку пользователь использует фактические текстовые уроки

и примеры кодирования.

Следовательно, это исследование было сосредоточено на создании интерактивного пакета для онлайн-обучения

на языке программирования C. Он направлен на обучение начинающих программистов (начинающих)

тому, как программировать на C, основном языке программирования. Особенностью системы

является то, что она графически интерпретирует коды построчно.Таким образом,

позволяет пользователям более эффективно понимать задействованную концепцию. Пользователи могут понять логику

и функцию каждой строки кода в процессе интерпретации. Пользователи

также могут вносить изменения в коды C и наблюдать, как изменяется функция программы

.

Цели проекта:

(1) Система предназначена для создания обучающего пакета для целевых пользователей

, особенно для начинающих (начинающих программистов) языка программирования C

.Он предназначен для помощи начинающим пользователям в качестве программного обеспечения для ознакомления с языком программирования C

.

(2) Знакомство с программированием на языке C широкому кругу пользователей через эффективную интерактивную среду обучения

.

(3) Учебный пакет должен предоставить адекватную информацию и дополнительные примеры

по соответствующим темам программирования на C для улучшения понимания и приобретения знаний

.

2.0 МУЛЬТИМЕДИЙНЫЕ УЧЕБНЫЕ ПАКЕТЫ

Цель преподавателей — способствовать обучению — помочь учащимся получить знания, приобрести

конкретных навыков и успешно функционировать в обществе.Одна из самых больших проблем для преподавателя

— это разнообразие учащихся, особенно в том, как они учатся.

Мультимедиа может адаптироваться к различным стилям обучения. Некоторые учащиеся лучше усваивают

через ассоциации, другие — путем экспериментов; некоторые из них более визуально ориентированы, а другие

более слуховые [1].