Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 14293|Respuesta: 2

[C] El lenguaje C es tan poderoso, ¿en qué idioma está escrito?

[Copiar enlace]
Publicado en 28/9/2019 16:51:21 | | |
"¿En qué idioma está escrito la propia C?"

Desde otra perspectiva, lo es: antes de que el lenguaje C se ejecute, debe ser compilado, así que ¿de dónde viene el compilador del lenguaje C? ¿En qué idioma está escrito? Si está escrito en C, ¿hay primero un huevo o una gallina?

1

Supongamos que no hay compiladores en el mundo, empecemos con el lenguaje máquina y veamos cómo.

El lenguaje máquina puede ejecutarse directamente por la CPU sin necesidad de compilador.

Luego está el lenguaje ensamblador, aunque el lenguaje ensamblador es solo un mnemónico para lenguaje máquina, pero también necesita ser compilado en lenguaje máquina para ejecutarse, así que no queda más remedio que usar lenguaje máquina para escribir este primer compilador (que no se usará en el futuro).

El problema del lenguaje ensamblador está resuelto, y es un gran avance; en este momento es posible usar lenguaje ensamblador para escribir el compilador en lenguaje C, que decimos es el antecesor del compilador C.

Con este antepasado, puedes compilar cualquier programa en lenguaje C, ¿puedes escribir un compilador en lenguaje C mismo? Simplemente compilárala con los antepasados.

Vale, después de una capa así, por fin conseguí un compilador escrito en C, lo cual es realmente problemático.

En este punto, el compilador C escrito por el paquete anterior puede ser abandonado.

Por supuesto, si existían otros lenguajes de alto nivel antes de C, como Pascal, entonces Pascal podría usarse para escribir un compilador de C.

Se dice que el compilador del primer Pascal fue escrito en Fortran. Como primer lenguaje de alto nivel, el compilador de Fortran debería escribirse en lenguaje ensamblador.

2

Aquí tienes una leyenda interesante sobre el compilador:

Cuenta la leyenda que Ken Thompson, uno de los inventores de Unix, se aferraba a cualquier máquina Unix en Bell Labs, introducía su nombre de usuario y contraseña, ¡y podía iniciar sesión por la raíz!

Bell Labs está lleno de talento, y algunos otros grandes expertos juraron encontrar esta vulnerabilidad, leyeron el código fuente en C de Unix y finalmente encontraron la puerta trasera de inicio de sesión, y tras limpiar la puerta trasera, compilaron Unix y lo ejecutaron, pero Thompson aún pudo iniciar sesión.

Algunas personas piensan que puede haber un problema con el compilador, y que se implantó una puerta trasera al compilar Unix, así que reescribieron un compilador en C y volvieron a compilar Unix con un nuevo compilador.

Pero sigue sin funcionar, Thompson puede iniciar sesión con root, ¡lo cual es realmente devastador!

Más tarde, el propio Thompson desbloqueó el secreto, fue el primer compilador C que tuvo un problema, este compilador por supuesto estará implantado en la puerta trasera al compilar código fuente Unix, esto no es suficiente, lo que es aún mejor, si escribes un nuevo compilador en lenguaje C, definitivamente necesitas compilarlo en código binario, qué compilar, solo usa el primer compilador escrito por Thompson para compilar, vale, el compilador que escribiste estará contaminado, tu compilador volverá a compilar Unix, También implantaré una puerta trasera :-)

Hablando de eso, me acuerdo del incidente de XcodeGhost hace unos años, lo que simplemente significa que se implantó un caballo de Troya en Xcode (descargado desde canales no oficiales), de modo que las apps de iOS compiladas por XCode quedaron contaminadas, y estas apps podrían ser usadas por hackers para hacer cosas ilegales.

Aunque este XCodeGhost está lejos de ser el de Thompson, nos recuerda que al descargar software, debes usar canales formales, descargar desde la web oficial, buscar el estándar HTTPS del sitio web e incluso verificar la suma de comprobación.

3

Algunos pueden preguntar: uso Hui para escribir un párrafo de Hola Mundo, pero ¿alguien puede usarlo para escribir un compilador complejo? ¿Es esto posible?

Por supuesto, cuando se desarrolló la primera generación de Unix, no existía el lenguaje C, y Ken Thompson y Dennis Ritchie mecanografiaban Unix con líneas de ensamblador.   La primera versión de WPS fue escrita por Qiu Bojun en Hui, y el compilador de Turbo Pascal también fue escrito por Anders en Hui, y las habilidades de los dioses son inimaginables para la gente común.

Para los compiladores, también es posible desarrollar de forma "bola de nieve":

Tomando aún como ejemplo el lenguaje C, la primera versión puede elegir un subconjunto del lenguaje C, como soportar solo tipos de datos básicos, sentencias de control de procesos y llamadas a funciones...... A este subconjunto lo llamamos C0.

Luego escribe un compilador en lenguaje ensamblador y solo obtén un subconjunto de este lenguaje C0, para que sea mucho más fácil de escribir.

El lenguaje C0 funciona, y luego ampliamos este subconjunto añadiendo structs, punteros ...... y llamando al nuevo lenguaje C1.

¿Quién escribe el compilador para el lenguaje C1?   Naturalmente, es C0.

Cuando C1 esté funcionando, expande de nuevo las características del lenguaje, escribe el compilador con C1 y consigue C2.

Luego están C3, C4......  Por último, tienes el lenguaje completo en C.

Este proceso se llama bootstrapping, y en chino se llama bootstrapping.





Anterior:Las nuevas funciones de .NET Core lanzan un ejecutable de un solo archivo
Próximo:¿Por qué los programadores hacen horas extra sin fin?
Publicado en 29/9/2019 9:27:54 |
¿En qué lenguaje está escrito C en sí?
Publicado en 1/10/2019 23:54:34 |
¿En qué lenguaje está escrito C en sí?
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com