Tras casi un par de meses alejado de la pantalla, hoy recupero la idea de escribir un resumen de lo aprendido y realizado durante la semana. La situación actual provocada por el coronavirus no deja otra opción que estar confinado en casa incrementando los conocimientos 😀.

Quiero seguir con la costumbre de acompañar este tipo de posts con una foto. Para esta semana, debido a que no he salido de casa, lo mejor será que tire de archivo y muestre fotos de viajes pasados. Vengo de estar un mes dando el rol por México y, como prueba de ello, aquí os dejo una de las fotos más bonitas que tuve el privilegio de tomar.

Zona arqueológica de Teotihuacán (México)
Zona arqueológica de Teotihuacán (México)

Compiladores, LLVM y C++

Aunque sé que tengo ya muchos proyectos a medias, esta semana he iniciado uno nuevo: mi propio lenguaje de programación. Para crear un lenguaje de programación propio se necesita un compilador, es por ello que he dedicado mucho tiempo de investigación antes de comenzar a escribir una sola línea de código.

No es la primera vez que creo un lenguaje de programación, pero sí es cierto que en los últimos años me he mantenido bastante alejado de ese tema. Esta semana mi lectura antes de irme a dormir ha sido el maravilloso libro del dragón sobre compiladores. Concretamente me refiero a la edición del 2006 del libro Principles, Techniques, and Tools de Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman. Realmente ha sido una relectura, pero lo poco que he vuelto a leer hasta el momento lo he disfrutado lo mismo o más que la primera vez.

Una opción muy sensata para escribir tu propio compilador capaz de traducir a código máquina es subirte en hombros de gigantes. El proyecto de LLVM, entre otras cosas, proporciona un backend de un compilador, muy sencillo de usar para los que ya saben cómo usarlo. Tras varias dudas, mi proyecto personal lo estoy realizando en C++. Dudé en hacerlo con Rust, un lenguaje de programación del que sé más bien poco pero tenía mucha curiosidad por probar en un proyecto real. No obstante, por salud mental, me decanté por C++ puesto que el código original de LLVM está en ese idioma y me va a ser mucho más fácil encontrar ejemplos de uso en ese lenguaje. Cualquier binding de LLVM a Rust puede no contener todas las funciones, cambiar ligeramente la sintaxis o los tipos de datos.

Sobre la marcha estoy escribiendo una serie de post explicando lo que hago y voy aprendiendo. He aquí el primer post sobre Uranium, mi lenguaje de programación. Espero que esto pueda ayudar a cualquiera que desee diseñar su propio lenguaje y construir un compilador 100% funcional que produce código optimizado. A diferencia de otros artículos de este blog, todos esos posts están en Inglés con la idea de llegar al máximo número de personas.

Matemáticas e Inkscape

Otra gran parte de la semana se la dediqué a las matemáticas. Estuve viendo la increíble serie de vídeos de 3Blue1Brown sobre álgebra lineal para refrescar y tener una buena intuición de los conceptos más principales de esta área de las matemáticas. Aunque la mayoría de los conceptos los tengo bastante presentes en mi día a día, es una delicia disfrutar de esa serie como si del último éxito de Netflix se tratara.

Como añadido, guiado por la curiosidad, decidí buscar más información sobre cómo este chico hace sus vídeos. Eso me llevó a descrubir y probar este motor de animación creado por él mismo que te permite hacer todo tipo de animaciones matemáticas de una forma muy fácil. Recomiendo probar la versión de Docker, mucho más sencillo y rápido de usar.

Otra cosa que inicié, otro de mis nuevos principios, fue un curso sobre análisis complejo. Nunca he visto formalmente los números complejos, y la verdad es que no me han hecho mucha falta, pero hace unos días me entró la curiosidad sobre los ordenadores cuánticos y leí algo sobre la forma de programarlos. No saqué mucho en claro sobre ello, lo único que entendí era que necesitaba conocimiento sobre números complejos para poder entender todas esas teorías locas. Así que me puse a ello con este curso de Coursera de análisis complejo. No sé hasta qué punto lo voy a continuar, porque prefiero darle prioridad al compilador y poder así acabar algún proyecto.

Tomé apuntes de las primeras lecciones del curso, y una parte importante de ese proceso es incluir gráficos entre tus notas. Es por ello que le dediqué un tiempo a aprender a manejar mejor Inkscape y a instalar en él algunas extensiones para facilitar el pintado de funciones (extensión inkscapeCartesianPlotFunction2D) y el renderizado de fórmulas Latex (extensión Tex Text). La instalación no fue libre de problemas, tuve que averiguar cómo hacer que Inkscape utilizara la versión de Python requerida por las extensiones en lugar de la versión 3 que tengo por defecto.

Programación y VIM

Además de todo esto, tuve tiempo para participar en una competición de CodeForces. La idea es convertir este tipo de retos de programación en una parte más de mi rutina. Mi problema favorito, o al menos de los que llegué a intentar resolver, fue el problema C.

Otra inversión de tiempo fue instalar YouCompleteMe en VIM para tener autocompletado en mi queridísimo editor de texto favorito. Agregué también nuevos snippets de código y otras utilidades para escribir fórmulas de Latex en Markdown a la ya instalada extensión UltiSnips.

La semana que viene habrá más novedades. ¡Un saludo desde mi casa!