2011-02-24 33 views
70

Esta es probablemente una pregunta estúpida, pero me he estado preguntando sobre esto por un tiempo. ¿Tiene C (o cualquier otro lenguaje de bajo nivel, para el caso) incluso una fuente, o es el compilador la parte que "hace todo el trabajo", incluido el análisis? Si es así, ¿no podrían los diferentes compiladores tener diferentes dialectos en C? ¿De dónde viene el factor stdlib en esto? Realmente me gustaría saber cómo funciona esto.¿Es C de código abierto?

Respuesta

120

El lenguaje C no es un software sino un defined standard, por lo que uno no diría que es de código abierto, sino que es un estándar abierto.

Hay un gazillion diferentes compiladores para C sin embargo, y muchos de los que son de hecho de código abierto. El ejemplo más notable es GCC's C compiler, que está todo bajo GNU General Public License (GPL), una licencia de fuente abierta.

hay más opciones. Watcom es de código abierto, por ejemplo. No hay escasez de compiladores C de fuente abierta, pero sin duda el más extendido, al menos en el mundo no Windows, es GCC.

Para Windows, su mejor apuesta es probablemente Watcom o GCC usando Cygwin o MinGW.

2

compilador de C de GCC está escrito en C. Así que sabemos que hay al menos uno compilador de C escrito en C.

de GNU stdlib (glibc) también está escrito en C (stdio.h, stdlib.h) Pero también tiene algunas partes escritas en lenguaje ensamblador.

25

C es un estándar que especifica cómo los compiladores de C deben generar programas.
C no tiene ningún código fuente, al igual que una nota musical no tiene ningún plástico.

Algunos compiladores de C, como GCC, son de código abierto.

+5

buena respuesta, aunque la nota musical/analogía plástica era un poco surrealista. :-) – Spudley

3

el compilador determinar todas las asignaciones de C a Asamblea etc ... pero por lo que alguien ser dueño de ella ..... nadie es realmente el dueño C sin embargo, la norma ANSI/ISO determina las normas

10

C es simplemente un lenguaje, y uno estandarizado en eso, también. Es más o menos el compilador que "hace todo el trabajo". Diferentes compiladores tenían dialectos diferentes; antes del estándar C99 ANSI, tenías cosas como Borland C y otros compiladores que compiten, que implementaron el lenguaje C de maneras fantásticas.

stdlib es sólo un acuerdo sobre un conjunto de librerías estándar que se requieren para estar presente en cualquier aplicación ANSI C.

4

para añadir a las otras grandes respuestas:

En cuanto a los diferentes dialectos - hay algunas características adicionales añadidas a C que son compilador específico. Puede proporcionar el indicador de línea de comando -std=... a gcc para especificar el estándar C que desea usar, cada uno tiene ligeras variaciones/adiciones a la sintaxis, el más común es probablemente c99.

Cada compilador tiende a implementar algunos extras diferentes, por ejemplo, typeof() no está en el estándar C y los compiladores no tienen que implementar esto, pero no obstante es útil y la mayoría de los compiladores lo proporcionan. Aquí es a list of gcc C extensions

El stdlib es un conjunto de funciones especificadas en el estándar C. Al igual que los compiladores, stdlib puede tener diferentes implementaciones.La implementación de GNU es de código abierto, al igual que gcc, pero existen otros compiladores y otras implementaciones de stdlib que son de código cerrado.

1

Una muy buena pregunta. There is a way para definir un estándar de lenguaje (¡no la implementación!) En forma de un "código fuente", en un lenguaje estricto y sin ambigüedades. Lamentablemente, todos los idiomas antiguos, incluida C, están mal definidos. Pero aún es posible traducir esas definiciones a un formulario de código fuente.

Otro enfoque es definir un idioma a través de su operational semantics, a menudo en forma de una implementación de referencia simple (e ineficaz).

1

Helgi Hrafn Gunnarsson ha escrito la respuesta principal, pero pensé que sería útil señalar que efectivamente también se puede llegar a dialectos.

Los compiladores deberían hacer lo mismo con respecto al estándar que admitan (que en estos días debería ser prácticamente la misma versión) pero hay áreas grises. La forma en que los compiladores trabajan para la funcionalidad 'indefinida', por ejemplo. Si la especificación C dice que el comportamiento no está definido para un caso específico, entonces el compilador puede hacer prácticamente lo que quiera.

También hay ejemplos de funciones agregadas a las bibliotecas (y nuevas bibliotecas agregadas) por los fabricantes del compilador para soportar características de plataforma específicas, crear una ventaja competitiva o simplemente facilitar la vida. El cínico podría sugerir que algunos de estos se agregan para ayudar a bloquear a las personas en un compilador específico también.

0

Yo diría que C como lenguaje no es de código abierto. Como señalaron muchos, puede descargar librerías y compiladores con licencia GNU de forma gratuita, pero si quisiera escribir su propio compilador C, necesitaría seguir los estándares ISO C, e ISO cobrar efectivo por la especificación de la C idioma, que en el momento de publicar esto es de $ 178. Así que realmente la respuesta depende de qué elementos le interesan ser gratuitos y de código abierto.

Cuestiones relacionadas