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.
- ¿Qué problema resolverías en un libro electrónico y publicando metadatos hackathon?
- ¿Cómo funciona el pirateo de StarCraft?
- ¿Es seguro el almacenamiento de contraseñas en sha-1 hashing?
- ¿Cuál es la forma más sencilla de ver Netflix en Canadá? Actualmente tengo un Apple TV (tercera generación) y estoy pensando en comprar un Google Chromecast.
- ¿Qué es el "dorking de Google" y cuál es la defensa contra este problema?
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.