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.
quelle
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.quelle
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 wahrscheinlichc99
.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-ErweiterungenDie 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.
quelle
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
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.quelle
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.
quelle
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.
quelle
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
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.
quelle