sábado, 9 de abril de 2011

Aprendiendo a hacer un lenguaje de programación II


En el anterior post enumeré cinco conceptos a implementar para mi propio lenguaje de programación, y alardeé muy alegremente gracias a mis cinco cervezas de que lo que iba a hacer lo era, pero realmente ¿Qué es un lenguaje de programación? ¿De qué se compone? ¿Tengo suficiente con las cinco cosas que hay en mi lista? Para responder a estas preguntas hay que hacer un poco de historia, voy a presentar el primer lenguaje de programación, creado como siempre por un matemático, llamado GOTO.

¿Qué es un lenguaje de programación?

Los matemáticos son los creadores de las sumas, restas, multiplicaciones, logaritmos... que son operaciones que todos sabemos hacer porque siempre alguien que nos las explica. Nos han dicho como debemos representar los datos y que pasos tenemos que seguir hasta completar nuestras respuestas. Los matemáticos han definido una serie de “algoritmos” que nos permiten ejecutar esas operaciones, que son muy fáciles de transmitir, almacenar y enseñar. Pero como son tan exigentes consigo mismos algunos decidieron estandarizar la cosa, creando una sintaxis con unas palabras reservadas para generar las instrucciones, así todo el que entiende las instrucciones puede tanto entender como generar algoritmos cada vez mas complejos y lo más importante empezaron a pensar si podían crear un lenguaje y una máquina que supiera interpretar ese lenguaje recogiendo esos algoritmos en programas.

¿De que se compone?

Corría allá por el año 1900 y pico en el que los señores de la informática, los matemáticos, intuían que podían crear una máquina en la que podían ejecutar todos sus queridísimos algoritmos para generar sus cálculos y mientras ésta trabajaba sin destajo, ellos podían dedicarse a tomar sus cervecitas y gambas y a vivir la vida de una forma más alegre y placentera. Siempre he dicho que la pereza mueve montañas.
Estos señores entre otras cosas crearon un modelo de computación llamado GOTO que define los principios más básicos en los que se basa la programación actual, con GOTO se puede hacer un Windows aunque puedes morirte de asco en el intento.

Empecemos a definir GOTO para intentar comprender de que se compone un lenguaje de programación. 

- Tipos de datos y variables:

Todos son números de tipo entero, pero hay tres clases de variables, las de entrada, salida y auxiliares representadas por las Xs, las Ys y las Zs.
Por ejemplo un programa que tenga dos variables de entrada, una de salida y tres auxiliares tendría:
X1, X2, Y1, Z1, Z2, Z3
Cada una representan un número entero y al principio valen 0.

- Instrucciones:

Tiene 3,5 instrucciones, incremento, decremento, salto y me quedo igual.
La de me quedo igual vale 0,5 y las otras tres 1, supongo que esta se la propuso el gato del país de las maravillas a cambio de un poquito más de lo que se estaba fumando.

Me quedo igual
simplementese mantiene el estado de la variable y se representa así V<--V

Operaciones de Incremento y Decremento
A mi variable le sumo/resto 1 y se representa como V<--V+1 / V<--V-1

Salto, esta es la más importante y dice así.
Si mi variable es distinta de 0 entonces salto a la etiqueta E, ¿Qué es una etiqueta? ¿Qué quiere decir eso de salto a una etiqueta? veámoslo en un ejemplo:
Tengo el siguiente programa en el que decremento la variable X1
y mientras X1 sea distinta de 0 vuelvo a donde está mi etiqueta y continuo mi programa.

A X1<--X1-1
    IF X1 GOTO A

El programa termina cuando X1 vale 0. Esta instrucción es la más importante porque define una estructura de control selectiva y repetitiva a la vez (los if y los while).

- Hablemos de la herencia:

Tambien GOTO permite definir macros que podemos usar en nuestros algoritmos, por ejemplo:
Supongamos que hemos hecho el algoritmo de la suma y lo llamamos suma(X1,X2) y ahora quiero hacer la multiplicacion.

MULTIPLICACION(X1,X2)
    IF X1 GOTO A   #COMPRUEBO X1 NO VALE 0
    Z1<--Z1+1          
    IF Z1 GOTO E
A IF X2 GOTO B   #COMPRUEBO X2 NO VALE 0
    Z2<--Z2+1
    IF Z2 GOTO E
B Y1<--SUMA(Y1,X1)   #A LA SALIDA LE SUMO X1
    X2<--X2-1                  #DECREMENTO X2 PARA LA SIGUIENTE ITERACIÓN
    IF X2 GOTO B           #SI X2 VALE 0 YA HE TERMINADO, SI NO HAGO UN
E  Y1<--Y1                     #NUEVO SALTO A LA ETIQUETA B

Ya tenemos el modelo computacional GOTO mas o menos definido y conocemos los elementos mínimos necesarios para realizar un lenguaje de programación que son los tipos de datos, las instrucciones (tanto las operaciones como las estructuras de saltos y bucles) y la herencia. Pero estos elementos quizás sirvieran hallá por 1900 y pico hoy en día necesitamos mucho más para ser productivos y afrontar problemas enormes en los que necesitemos una gran capacidad de abstracción. Mi objetivo es desarrollar algo fácil de enseñar, pero que permita al usuario dar el paso a la programación orientada a objetos sin demasiados quebraderos de cabeza, en el próximo post empezaré a definir los elementos de mi lenguaje de programación.

No hay comentarios:

Publicar un comentario