Является ли C открытым исходным кодом?


Это, наверное, глупый вопрос, но я думал об этом некоторое время. Имеет ли C (или любой другой язык низкого уровня, если на то пошло) даже источник, или компилятор является частью, которая "выполняет всю работу", включая синтаксический анализ? Если да, то не могут ли разные компиляторы иметь разные диалекты C? Где фактор stdlib в этом? Я действительно хотел бы знать, как это работает.

9 71

9 ответов:

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

существует множество различных компиляторов для C однако, и многие из них действительно с открытым исходным кодом. Наиболее заметным примером является компилятор C GCC, который находится все под GNU General Public License (GPL), С открытым исходным кодом лицензии.

есть еще варианты. Watcom открытым исходным кодом, например. Нет недостатка в компиляторах C открытым исходным кодом, но, без сомнения, самым распространенным, по крайней мере, в мире без Windows, является GCC.

для Windows, ваш лучший выбор, вероятно, Watcom или GCC с помощью программа или MinGW.

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

некоторые компиляторы C, такие как GCC, являются открытым исходным кодом.

C-это просто язык, причем стандартизированный. Это в значительной степени компилятор, который "делает всю работу". У разных компиляторов были разные диалекты; до стандарта C99 ANSI у вас были такие вещи, как Borland C и другие конкурирующие компиляторы, которые реализовали язык C своими собственными фантастическими способами.

stdlib - Это просто согласованная коллекция стандартных библиотек, которые должны присутствовать в любой реализации ANSI C.

чтобы добавить к другим замечательным ответам:

Что касается различных диалектов -- есть некоторые дополнительные функции, добавленные к C, которые являются специфичными для компилятора. Вы можете указать флаг командной строки -std=... чтобы gcc указывал стандарт C, который вы хотите использовать, каждый из них имеет небольшие изменения/дополнения к синтаксису, наиболее распространенным является, вероятно,c99.

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

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

компилятор определит все сопоставления от C до сборки и т. д... но насколько кто-то владеет им.....никто действительно не владеет C, однако ANSI / ISO определяет стандарты

компилятор C GCC написан на C. Поэтому мы знаем, что есть по крайней мере один компилятор C написан на C.

GNU-это stdlib (glibc) также записывается на C (stdio.h, stdlib.ч.) Но он также имеет некоторые части, написанные на языке ассемблера.

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

другой подход заключается в определении языка через его операционная семантика, часто в виде простого (и неэффективного) эталонная реализация.

Хельги Храфн Гуннарссон написал основной ответ, но я подумал, что стоит отметить, что вы можете эффективно закончить с диалектами тоже.

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

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

Я бы сказал, что C как язык не является открытым источником. Как указывали многие, вы можете скачать лицензированные компиляторы и библиотеки GNU бесплатно, но если вы хотите написать свой собственный компилятор C, вам нужно будет следовать стандартам ISO C, а ISO взимает наличные деньги за спецификацию языка C, которая на момент публикации составляет $178. Так что на самом деле ответ зависит от того, какие элементы вы заинтересованы в том, чтобы быть свободным и открытым исходным кодом.