source - software de código abierto
Es C de código abierto? (9)
C es solo un lenguaje, y uno estandarizado 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 solo una colección acordada de bibliotecas estándar que deben estar presentes en cualquier implementación de ANSI C.
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.
C es un estándar que especifica cómo los compiladores C deben generar programas.
C en sí 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.
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 del lenguaje C , que en el momento de publicar esto es de $ 178. Entonces, realmente la respuesta depende de qué elementos le interesan ser de código abierto y gratuito.
El compilador de C de GCC está escrito en C. Así que sabemos que hay al menos un compilador de C escrito en C.
El stdlib
de GNU (glibc) también está escrito en C (stdio.h, stdlib.h). Pero también tiene algunas partes escritas en lenguaje ensamblador.
El compilador determinaría todas las asignaciones desde C hasta Assembly, etc ... pero en cuanto a alguien que lo posee ... nadie posee realmente C, sin embargo, el ANSI / ISO determina los estándares.
El lenguaje C no es una pieza de software sino un estándar definido , por lo que uno no diría que es de código abierto, sino que es un estándar abierto.
Sin embargo, hay una gran cantidad de compiladores diferentes para C, y muchos de ellos son de hecho de código abierto. El ejemplo más notable es el compilador de C de GCC , que está todo bajo la Licencia Pública General de GNU (GPL) , una licencia de fuente abierta.
Hay mas 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 opción es probablemente Watcom o GCC utilizando Cygwin o MinGW .
Helgi Hrafn Gunnarsson ha escrito la respuesta principal, pero pensé que valdría la pena señalar que también puedes terminar con 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 de compiladores 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.
Para agregar a las otras excelentes respuestas:
Con respecto a los diferentes dialectos, hay algunas características adicionales añadidas a C que son específicas del compilador. Puede proporcionar la línea de comando flag -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, por lo tanto, los compiladores no tienen que implementar esto, sin embargo, es útil y la mayoría de los compiladores lo proporcionan. Aquí hay una lista de extensiones gcc C
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.
Una muy buena pregunta. Hay una manera de 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 lenguaje a través de su semántica operacional , a menudo en forma de una implementación de referencia simple (e ineficiente).