Recuerdo una vez a un amigo preguntarme: "¿Cómo es posible que en mi PC, yo sea capaz de hacer cosas como jugar, poner música, y ver videos? ¿Qué hay cableado dentro de la máquina que permita todo eso? ¿Cómo?" Por aquel entonces, le debe haber impulsado la introspección propia de la juventud madura, y la herramienta que tanto ha marcado a nuestra generación, fue el objetivo de su curiosidad insatisfecha. Y como es de esperarse, estas preguntas son la punta de un océano inmenso, casi intransitable por un solo humano. Eso ha hecho la ciencia contemporánea, aparte de tantas cosas, poner al alcance de muchos una breve inmensidad como las computadoras personales.
Aunque lo que haré en esta serie, no es responder las dudas de mi amigo directamente, si espero que rearmando los conocimientos que vamos a transitar, se tenga una mejor idea de cómo funcionan las computadoras y sus softwares. Y además, entender que muchos de los procesos en la ingeniería de software, que están pensados para que el usuario final los perciba de forma instantánea, en realidad son una serie de pasos bien delimitados. Son estructuras complejas. (Nótese que no digo difícil, aunque bien podrían merecer el adjetivo :) ).
Como el título dice, lo que pretendo hacer es un compilador. Del lenguaje COOL (Classroom Object Oriented Languaje), un lenguaje sencillo, con las suficientes características del mundo de la orientación a objetos, como para llevar cierto esfuerzo implementar un compilador del mismo.
Esta va a ser una oportunidad para entender muchas cosas interesantes del mundo informático. Pensémoslo por un momento: el mundo actual depende en gran medida del software, y el software a su vez, necesita ser escrito, y mantenido por lenguajes de programación que usan seres humanos. Del proceso de llevar las instrucciones escritas por un ingeniero, de carne y hueso, a código máquina, del que entiende una PC a bajo nivel, se encargan los softwares llamados compiladores. Cada lenguaje particular (Python, C#, Go), tiene el suyo.
Esto es hecho con mermaid, un plugin de markdown, y el esquema fue tomado de Compilers: Principles techniques and tools. Second Edition
Este es un bosquejo general de las fases de un compilador cualquiera. Algunas de las etapas son imprescindibles para que el mismo funcione, y otras lo hacen más óptimo, y en un sentido básico, pueden ser obviadas.
(En un próximo post me voy a referir específicamente a las fases de las que me encargaré en este proyecto). Todos los programas de nuestra PC, para poder ser convertidos en las cápsulas ejecutables con las que interactuamos, pasan por un proceso como éste. Aquí será importante integrar distintos conocimientos: teoría de lenguajes, algoritmos, ingeniería de software.
Nada, que se ve muy atractivo. Al menos yo lo encuentro así. Hablamos en otro post.
La pregunta que se hace tu amigo creo que todos los que crecimos en contacto con el software alguna vez nos la hemos hecho. ¿Cómo es posible que se haya construido, y cómo funcionan esos niveles de abstracción? Muy interesante y educativo el post!
Claro que todos nos la hacemos. Tener la oportunidad de atajarla un poco vale la pena. Lo que pasa es que lleva trabajo y tiempo. Vamos a ver cómo me va.
Congratulations @diazrock! You have completed the following achievement on the Hive blockchain and have been rewarded with new badge(s) :
You can view your badges on your board and compare to others on the Ranking
If you no longer want to receive notifications, reply to this comment with the word
STOP
Do not miss the last post from @hivebuzz:
Congratulations @diazrock! You received a personal badge!
You can view your badges on your board and compare to others on the Ranking
Do not miss the last post from @hivebuzz: