Soy programador aficionado desde hace muchos años (tuve la oportunidad de ver los primeros Sinclair ZX 81 presentados en España). Así pues, estoy en esto prácticamente desde el principio de la revolución microinformática.
En 1983 aprendí mi primer lenguaje de programación: COBOL (¡la revisión previa a la del '85!). Desde entonces y hasta ahora, he programado (siempre por hobby) en distintos lenguajes.
Mi primer programa "largo" lo hice en BASIC: una sencilla hoja de cálculo para ZX Spectrum (publicado en la revista Micro Hobby, y ¡el único por el que me han pagado! ;-). Después usé Pascal, C, C++, FRED (el lenguaje del paquete integrado Framework II), Object Vision 2 (una curiosidad de Borland que pretendía algo así como transformar directamente los ordinogramas en ejecutables), dBase III+ (con el lenguaje de este gestor de bases de datos realicé las primeras aplicaciones "serias" para mi trabajo), Delphi 2.0 (una gozada) y PowerCOBOL 3.0 (¡COBOL aún vive!). Salvo Delphi (y Object Vision, que no sabría cómo clasificar exactamente), los demás son lenguajes de tipo imperativo.
Aunque todos ellos me han proporcionado muy gratos momentos ante el ordenador en el pasado, el caso es que me seguía picando la curiosidad por conocer más lenguajes de programación. Me dediqué a bucear en Internet y encontré otros que usaban paradigmas distintos. Pronto di con Prolog, por el que me interesé enseguida, y con el que realicé algunas prácticas. Y, curioseando por ahí, llegué a Euphoria.
He de aclarar que, como aficionado a la programación (y sin estudios superiores), el inglés siempre ha supuesto un lastre para mí. Es por esto que sólo me he interesado por aquellos lenguajes de los que podía obtener documentación en español. Con todo, años de lectura anglosajona "forzosa" me han permitido llegar a comprender con cierta fluidez los textos, digamos, técnicos. Sin embargo, el inglés coloquial queda claramente fuera de mi alcance.
Mi primera revisión a la documentación que acompaña a Euphoria (en inglés) me dejó entrever sus posibilidades. Al poco, pude encontrar en el sitio web de la empresa que lo desarrolla (Rapid Deployment Software) una traducción completa al español que acabó de allanarme el camino para su completa comprensión. Descubrí, para mi asombro, que, pese a ser un lenguaje puramente imperativo y extremadamente sencillo (¡amén de muy legible!), poseía características que le dotaban de una gran potencia y flexibilidad.
Pero, una vez más, tras un tiempo me cansé y pasé a Forth, el cual me había intrigado desde que lo conocí en tiempos del ZX Spectrum. Sin embargo, acabé por desanimarme con este lenguaje, ya que exigía pensar de forma diferente. Demasiado, para lo que estaba acostumbrado.
Entonces volví mi atención a Oberon-2 durante algún tiempo. Un escarceo, nada serio.
A veces, dedicarse al estudio de lenguajes muy potentes y complejos puede llevar a un cierto cansancio. Y eso fue lo que me pasó a mí. Recordé entonces aquel entrañable Spectrum BASIC, tan básico (valga la redundancia) pero, a la vez, con tantas posibilidades a pesar de su aparente simplicidad. Así que me dediqué a buscar un dialecto de este lenguaje para mi sistema operativo. Encontré uno que era el que más se ajustaba a mis expectativas: simple, potente, pequeño (¡todo en un único fichero de menos de 1 Mbyte!) y que se acercara lo más posible a aquellos BASIC de la época heroica de inicios de los años 80 del siglo XX: Yabasic. No es necesario instalarlo, con lo que se puede copiar en un pendrive directamente y usarlo donde quieras. Y algo que valoro mucho: tiene una magnífica documentación, muy asequible pese a estar en inglés.
Después de años programando en Yabasic acabé por aburrirme. Busqué entonces en un sitio web llamado "Rosetta Code" algún otro lenguaje que me pudiera interesar y, al final, di con uno llamado Monti. Parecía prometedor, pero estaba en pañales y, puesto en contacto con su creador, resultó que no era más que un experimento abandonado. Así que decidí hacerme mi propio lenguaje inspirado en éste, aprovechando que tenía un dialecto de Euphoria llamado Phix que se ajustaba como anillo al dedo al proyecto. Al ser Phix interpretado, aunque veloz, no permite que Phixmonti (también un intérprete) sea rápido. Sin embargo resulta útil para realizar programas pequeños y, sobre todo, que resulten estimulantes y divertidos... al menos para mí (que, al fin y al cabo, para eso lo quería).
La cuestión es que, dándole vueltas a Phixmonti, decidí crear un nuevo lenguaje. Aunque fuertemente inspirado en él, este es un intérprete puro y duro, lo que lo hace mucho más lento. Sin embargo, es bastante flexible y permite cosas como variables locales y funciones anónimas. Si revisáis el código del intérprete veréis que también está programado en Phix, y que es bastante más simple y ordenado (creo), estando parte de la sintaxis inspirada en :r4 (Phreda4 en Github).
Para el que desee echarles un vistazo están a su disposición unos ficheros comprimidos que contienen el código fuente, programas de ejemplo y una versión ejecutable. No necesitan instalación (el contenido del fichero se descomprime donde se desee y ya está). También tienen un sucinto manual de instrucciones (en español). La forma de usar el intérprete es la habitual: desde la línea de comandos se escribe, por ejemplo "Phixmonti <programa.pmt> [argumentos del programa]". Por ejemplo: Phixmonti Fibonacci.pmt. Klingphix, además, se puede usar de forma interactiva, pero esto lo he implementado como una forma sencilla de probar código, no de desarrollar programas (para eso se debe utilizar un editor).
Las vueltas que da la vida. Al final he terminado haciendo unos lenguajes bastante "Forthianos".