Ist C Open Source?

77

Dies ist wahrscheinlich eine dumme Frage, aber ich habe mich eine Weile darüber gewundert. Hat C (oder eine andere Low-Level-Sprache) überhaupt eine Quelle oder ist der Compiler der Teil, der "die ganze Arbeit erledigt", einschließlich des Parsens? Wenn ja, könnten verschiedene Compiler nicht unterschiedliche C-Dialekte haben? Wo spielt die stdlib eine Rolle? Ich würde wirklich gerne wissen, wie das funktioniert.

Hypercube
quelle

Antworten:

135

Die C-Sprache ist keine Software, sondern ein definierter Standard . Man würde also nicht sagen, dass es sich um Open Source handelt, sondern dass es sich um einen offenen Standard handelt.

Es gibt jedoch eine Unmenge verschiedener Compiler für C, und viele davon sind tatsächlich Open Source. Das bemerkenswerteste Beispiel ist der C-Compiler von GCC , der alle unter der GNU General Public License (GPL) steht , einer Open-Source-Lizenz.

Es gibt mehr Optionen. Watcom ist zum Beispiel Open Source. Es gibt keinen Mangel an Open-Source-C-Compilern, aber ohne Zweifel ist GCC der am weitesten verbreitete, zumindest in der Nicht-Windows-Welt.

Für Windows ist Watcom oder GCC mit Cygwin oder MinGW wahrscheinlich die beste Wahl .

Teekin
quelle
29

C ist ein Standard, der angibt, wie C-Compiler Programme generieren sollen.
C selbst hat keinen Quellcode, genau wie eine Musiknote kein Plastik hat.

Einige C-Compiler wie GCC sind Open Source.

SLaks
quelle
6
gute Antwort, obwohl die Analogie zwischen Musiknote und Plastik etwas surreal war. :-)
Spudley
10

C ist nur eine Sprache und auch eine standardisierte. Es ist so ziemlich der Compiler, der "die ganze Arbeit macht". Verschiedene Compiler hatten unterschiedliche Dialekte; Vor dem C99 ANSI-Standard hatten Sie Dinge wie Borland C und andere konkurrierende Compiler, die die C-Sprache auf ihre eigene fantastische Weise implementierten.

stdlib ist nur eine vereinbarte Sammlung von Standardbibliotheken, die in jeder ANSI C-Implementierung vorhanden sein müssen.

nesv
quelle
4

Um die anderen großartigen Antworten zu ergänzen:

In Bezug auf verschiedene Dialekte - C wurden einige zusätzliche Funktionen hinzugefügt, die compilerspezifisch sind. Sie können -std=...gcc das Befehlszeilenflag geben, um den C-Standard anzugeben, den Sie verwenden möchten. Jeder hat geringfügige Abweichungen / Ergänzungen zur Syntax. Der häufigste ist wahrscheinlich c99.

Jeder Compiler neigt dazu, ein paar verschiedene Extras zu implementieren, zum Beispiel typeof()ist er nicht im C-Standard enthalten, sodass Compiler dies nicht implementieren müssen, aber es ist dennoch nützlich und wird von den meisten Compilern bereitgestellt. Hier ist eine Liste der gcc C-Erweiterungen

Die stdlib ist eine Reihe von Funktionen, die im C-Standard angegeben sind. Ähnlich wie Compiler kann stdlib unterschiedliche Implementierungen haben. Die GNU-Implementierung ist Open Source, ebenso wie gcc, aber es gibt andere Compiler und andere Implementierungen von stdlib, die Closed Source sind.

Jesse Cohen
quelle
3

Der Compiler würde alle Zuordnungen von C zu Assembly usw. bestimmen, aber soweit jemand es besitzt, besitzt niemand wirklich C, jedoch bestimmt ANSI / ISO die Standards


quelle
2

Der C-Compiler von GCC ist in C geschrieben. Wir wissen also, dass mindestens ein C-Compiler in C geschrieben ist.

GNUs stdlib(glibc) ist auch in C (stdio.h, stdlib.h) geschrieben. Es sind aber auch einige Teile in Assemblersprache geschrieben.

Pablo Santa Cruz
quelle
1

Eine wirklich gute Frage. Es gibt eine Möglichkeit , einen Sprachstandard (nicht die Implementierung!) In Form eines "Quellcodes" in einer strengen und eindeutigen Sprache zu definieren. Leider sind alle alten Sprachen, einschließlich C, schlecht definiert. Es ist jedoch weiterhin möglich, diese Definitionen in ein Quellcodeformular zu übersetzen.

Ein anderer Ansatz besteht darin, eine Sprache über ihre operative Semantik zu definieren , häufig in Form einer einfachen (und ineffizienten) Referenzimplementierung.

SK-Logik
quelle
1

Helgi Hrafn Gunnarsson hat die Hauptantwort geschrieben, aber ich dachte, es wäre erwähnenswert, dass Sie effektiv auch Dialekte haben können.

Die Compiler sollten das Gleiche in Bezug auf den von ihnen unterstützten Standard tun (der heutzutage fast alle dieselbe Version haben sollte), aber es gibt Grauzonen. Die Art und Weise, wie die Compiler beispielsweise für "undefinierte" Funktionen arbeiten. Wenn die C-Spezifikation besagt, dass das Verhalten für einen bestimmten Fall nicht definiert ist, kann der Compiler so ziemlich das tun, was er will.

Es gibt auch Beispiele für Funktionen, die den Compilerherstellern zu den Bibliotheken hinzugefügt wurden (und neue Bibliotheken hinzugefügt wurden), um bestimmte Plattformmerkmale zu unterstützen, einen Wettbewerbsvorteil zu schaffen oder einfach das Leben zu erleichtern. Der Zyniker könnte vorschlagen, dass einige davon hinzugefügt werden, um die Benutzer auch an einen bestimmten Compiler zu binden.

Colin Newell
quelle
1

Ich würde sagen, dass C als Sprache nicht Open Source ist. Wie viele betonten, können Sie GNU-lizenzierte Compiler und Bibliotheken kostenlos herunterladen. Wenn Sie jedoch Ihren eigenen C-Compiler schreiben möchten, müssen Sie die ISO-C-Standards befolgen und ISO für die Spezifikation der C-Sprache bares Geld verlangen , was zum Zeitpunkt der Veröffentlichung dies 178 $ ist. Die Antwort hängt also wirklich davon ab, welche Elemente Sie daran interessiert sind, frei und Open Source zu sein.


quelle
0

Ich bin mir nicht sicher, wie Sie "Open Source" definieren.

Für den Standardisierungsprozess kann jeder teilnehmen. Wenn Sie jedoch abstimmen möchten, müssen Sie für den Beitritt zu Ihrer nationalen Einrichtung zahlen (z. B. ANSI für die USA, BSI für Großbritannien, AFNOR für Frankreich) etc.). In der Regel werden die meisten Mitgliedschaften in Standardgremien von Unternehmen bezahlt. Das heißt, der Prozess ist ziemlich offen. Sie können auf Diskussionspapiere auf der Standard -Website zugreifen .

Die Standards selbst sind ebenfalls nicht kostenlos. Der ISO-PDF-Store verkauft derzeit den C-Standard für 198 Schweizer Franken . Entwurfskopien des Standards können leicht kostenlos gefunden werden.

Es gibt viele Open Source-Implementierungen sowohl von Compilern als auch von Bibliotheken.

Paul Floyd
quelle