¿Cómo pueden las computadoras entender el código? ¿Cómo es que el compilador puede entender el lenguaje, de alguna manera ponerlo en binario para ser entendido, y en realidad ser entendido por la máquina misma? Quizás haya algo de información errónea en mi pregunta, pero entiendes lo esencial. ¡Gracias!

Uno de los principios más fuertes de las computadoras es la abstracción.

Abstracción compuesta principalmente de dos partes: eliminación de detalles y generalización.

La idea es que tome un objeto complejo y al omitir una o más propiedades lo simplifique. Además, estas simplificaciones intentan recopilar propiedades comunes de diferentes instancias.

Un buen ejemplo de la vida real es un automóvil. No tengo idea de cómo funciona un automóvil, qué es una transmisión o algo por el estilo. Pero no tengo problemas para conducir un automóvil. Debido a que los detalles se han abstraído, y todo lo que necesito saber es que giro la llave para arrancar el motor y que el pedal izquierdo está parado y el pedal derecho está listo.

Esto es exactamente lo mismo con las computadoras.

Cada vez que toma un nivel de confusión y abstracción y lo simplifica una y otra vez.

Entonces, comencemos desde el fondo; puertas fisicas .

Estos circuitos eléctricos individuales están unidos en todas las formas para crear unidades complejas. Ejemplos son la Unidad de lógica aritmética (ALU), la Unidad de control, la Memoria. Estos se unen para crear la Unidad Central de Procesamiento (CPU).

Una CPU toma el binario como entrada y realiza cualquier acción que se le indique.

El siguiente nivel es el ensamblaje .

El lenguaje ensamblador generalmente se asigna directamente de la instrucción a la representación binaria.

Eso significa que cada instrucción en el ensamblaje tiene una definición binaria única y si tuviera un ‘diccionario’ podría simplemente traducir el binario al ensamblado y viceversa.

Luego viene el compilador .

El compilador toma su lenguaje de programación (como C) y traduce su código a ensamblador. Esto implica leer su código, analizarlo en un formato legible por computadora, traducirlo al ensamblaje y optimizarlo.

¡Y justo encima del compilador está tu código!

Woohoo! ¡estás listo!

Por supuesto, simplifiqué todo, pero no creo que haya dejado nada importante.

Cosas al azar:

  • El compilador de C está escrito en C. El primero se escribió en ensamblador, pero una vez que funciona, puede usar C para escribir más C.
  • Java tiene un ‘compilador’ de 2 partes. Primero se traduce a bytecode. Este bytecode es genérico. Luego, la segunda parte traduce este código de bytes en un ensamblaje específico de la máquina. Esto le permite escribirlo una vez y ejecutarlo en cualquier lugar. C, por otro lado, tendría que recompilarse en cada computadora.
  • Hay idiomas interpretados que se traducen en tiempo real. Eso significa que procesa su código poco a poco, traduciéndolo y ejecutando el código. Tenga en cuenta que tuve cuidado al decir ‘traducir’, porque puede interpretar en cualquier idioma (también con compiladores, pero menos común).
  • Tú, sí, puedes construir una computadora como esta. No, no es fácil. Pero siempre que abordes un nivel a la vez, es manejable. Y tenga en cuenta que cada nivel se puede hacer de forma independiente.
  • En ensamblaje estás trabajando directamente con la memoria. Estás operando en los registros. En C está trabajando con dos tipos de memoria: pila y montón. La pila es memoria que se le proporciona automáticamente para almacenar variables locales. El montón son trozos de memoria que solicita y tiene que administrar la asignación y la desasignación de. ¡Eso significa que el compilador resume TANTO de tu trabajo! Y adivina qué, los idiomas más nuevos y más nuevos te permiten distanciarte más de la implementación subyacente. En Python básicamente no conoces ni te importa la memoria, todo se maneja por ti. Oh, la belleza de la abstracción.

Fuente: Estudié informática y tomé un par de clases de arquitectura informática.

Este es un tema muy profundo. Si tiene los requisitos previos, le sugiero que lea el libro del dragón: Wiki: Compiladores: Principios, técnicas y herramientas.

En resumen, los lenguajes de computadora tienen una sintaxis (lógica) muy específica que las computadoras pueden analizar mediante reglas objetivas. La computadora luego convierte el lenguaje legible por humanos en código de máquina de acuerdo con esas reglas. Esta es una explicación muy simplificada.

Se pueden encontrar explicaciones más detalladas aquí: Wiki: Compilador

Esto depende completamente de su interpretación de la palabra ‘entender’. Pero lo más probable es que las computadoras no ‘entiendan’ nada. Simplemente está traduciendo un conjunto de símbolos a otro. Y más adelante, estos símbolos se convierten en señales eléctricas.

Pero en cuanto a cosas como la inteligencia y el significado, no hay ninguno.