UNIDAD II

 

OBJETIVO Y FILOSOFIA

 

El estudio de los lenguajes de programaci�n agrupa tres intereses diferentes; el del programador profesional, el del dise�ador del lenguaje y del Implementador del lenguaje.

 

Adem�s, estos tres trabajos han de realizarse dentro de las ligaduras y capacidades de la organizaci�n de una computadora y de las limitaciones fundamentales de la propia "calculabilidad". El termino "el programador" es un tanto amorfo, en el sentido de que camufla importantes diferencias entre distintos niveles y aplicaciones de la programaci�n. Claramente el programador que ha realizado un curso de doce semanas en COBOL y luego entra en el campo del procesamiento de datos es diferente del programador que escribe un compilador en Pascal, o del programador que dise�a un experimento de inteligencia artificial en LISP, o del programador que combina sus rutinas de FORTRAN para resolver un problema de ingenier�a complejo, o del programador que desarrolla un sistema operativo multiprocesador en ADA.

 

En esta investigaci�n, intentaremos clarificar estas distinciones tratando diferentes lenguajes de programaci�n en el contexto de cada �rea de aplicaci�n diferente. El "dise�ador del lenguaje" es tambi�n un termino algo nebuloso. Algunos lenguajes (como APL y LISP) fueron dise�ados por una sola persona con un concepto �nico, mientras que otros (FORTRAN y COBOL) son el producto de desarrollo de varios a�os realizados por comit�s de dise�o de lenguajes.

 

El "Implementador del lenguaje" es la persona o grupo que desarrolla un compilador o interprete para un lenguaje sobre una maquina particular o tipos de maquinas. Mas frecuentemente, el primer compilador para el lenguaje Y sobre la maquina X es desarrollada por la corporaci�n que manufactura la maquina X . Por ejemplo, hay varios compiladores de Fortran en uso; uno desarrollado por IBM para una maquina IBM, otro desarrollado por DEC para una maquina DEC, otro por CDC, y as� sucesivamente. Las compa��as de software tambi�n desarrollan compiladores y tambi�n lo hacen los grupos de investigaci�n de las universidades. Por ejemplo, la universidad de Waterloo desarrolla compiladores para FORTRAN Y PASCAL, los cuales son �tiles en un entorno de programaci�n de estudiantes debido a su superior capacidad de diagnostico y velocidad de compilaci�n.

 

Hay tambi�n muchos aspectos compartidos entre los programadores, dise�adores de un lenguaje implementadores del mismo. Cada uno debe comprender las necesidades y ligaduras que gobiernan las actividades de los otros dos.

 

Hay, al menos, dos formas fundamentales desde las que pueden verse o clasificarse los lenguajes de programaci�n: por su nivel y por principales aplicaciones. Adem�s, estas visiones est�n condicionadas por la visi�n hist�rica por la que ha transcurrido el lenguaje. Adem�s, hay cuatro niveles distintos de lenguaje de programaci�n.

 

 

 

Los "Lenguajes Declarativos" son los mas parecidos al castellano o ingles en su potencia expresiva y funcionalidad est�n en el nivel mas alto respecto a los otros. Son fundamentalmente lenguajes de ordenes, dominados por sentencias que expresan "Lo que hay que hacer" en ves de "Como hacerlo". Ejemplos de estos lenguajes son los lenguajes estad�sticos como SAS y SPSS y los lenguajes de b�squeda en base de datos, como NATURAL e IMS. Estos lenguajes se desarrollaron con la idea de que los profesionales pudieran asimilar mas r�pidamente el lenguaje y usarlo en su trabajo, sin necesidad de programadores o practicas de programaci�n.

 

Los lenguajes de " Alto Nivel" son los mas utilizados como lenguaje de programaci�n. Aunque no son fundamentalmente declarativos, estos lenguajes permiten que los algoritmos se expresen en un nivel y estilo de escritura f�cilmente legible y comprensible por otros programadores. Adem�s, los lenguajes de alto nivel tienen normalmente las caracter�sticas de " Transportabilidad". Es decir, est�n implementadas sobre varias maquinas de forma que un programa puede ser f�cilmente " Transportado " (Transferido) de una maquina a otra sin una revisi�n sustancial. En ese sentido se llama "Independientes de la maquina". Ejemplos de estos lenguajes de alto nivel son PASCAL , APL y FORTRAN (para aplicaciones cient�ficas ), COBOL (para aplicaciones de procesamiento de datos), SNOBOL( para aplicaciones de procesamiento de textos), LISP y PROLOG (para aplicaciones de inteligencia artificial), C y ADA (para aplicaciones de programaci�n de sistemas) y PL/I (para aplicaciones de prop�sitos generales) .

 

Los "Lenguajes Ensambladores" y los "Lenguajes Maquina" son dependientes de la maquina. Cada tipo de maquina, tal como VAX de digital, tiene su propio lenguaje maquina distinto y su lenguaje ensamblador asociado. El lenguaje Ensamblador es simplemente una representaci�n simb�lica del lenguaje maquina asociado, lo cual permite una programaci�n menos tediosa que con el anterior. Sin embargo, es necesario un conocimiento de la arquitectura mec�nica subyacente para realizar una programaci�n efectiva en cualquiera de estos niveles lenguajes.

 

Los siguiente tres segmentos del programa equivalentes exponen las distinciones b�sicas entre lenguajes maquina, ensambladores de alto nivel:

 

Como muestra este ejemplo, a mas bajo nivel de lenguaje mas cerca esta de las caracter�sticas de un tipo e maquina particular y mas alejado de ser comprendido por un humano ordinario. Hay tambi�n una estrecha relaci�n ( correspondencia 1:1 ) entre las sentencias en lenguaje ensamblador y sus formas en lenguaje maquina codificada. La principal diferencia aqu� es que los lenguajes ensambladores se utilizan s�mbolos (X,Y,Z,A para " sumar", M para "multiplicar"), mientras que se requieren c�digos num�ricos (OC1A4, etc.) para que lo comprenda la maquina.

 

La programaci�n de un lenguaje de alto nivel o en un lenguaje ensamblador requiere, por tanto, alg�n tipo de interfaz con el lenguaje maquina para que el programa pueda ejecutarse. Las tres interfaces mas comunes: un "ensamblador" , un "compilador" y un "interprete". El ensamblador y el compilador traduce el programa a otro equivalente en el lenguaje X de la maquina "residente" como un paso separado antes de la ejecuci�n. Por otra parte, el interprete ejecuta directamente las instrucciones en un lenguaje Y de alto nivel, sin un paso de procesamiento previo.

 

La compilaci�n es, en general, un proceso mas eficiente que la interpretaci�n para la mayor�a de los tipos de maquina. Esto se debe principalmente a que las sentencias dentro de un "bucle" deben ser reinterpretadas cada vez que se ejecutan por un interprete. Con un compilador. Cada sentencia es interpretada y luego traducida a lenguaje maquina solo una vez.

 

Algunos lenguajes son lenguajes principalmente interpretados, como APL, PROLOG y LISP. El resto de los lenguajes -- Pascal, FORTRAN, COBOL, PL/I, SNOBOL,, C, Ada y Modula-2 � son normalmente lenguajes compilados. En algunos casos, un compilador estar� utilizable alternativamente para un lenguaje interpretado (tal como LISP) e inversamente (tal como el interprete SNOBOL4 de los laboratorios Bell). Frecuentemente la interpretaci�n es preferible a la compilaci�n en un entorno de programaci�n experimental o de educaci�n, donde cada nueva ejecuci�n de un programa implicado un cambio en el propio texto del programa. La calidad de diagnosis y depuraci�n que soportan los lenguajes interpretados es generalmente mejor que la de los lenguajes compilados, puesto que los mensajes de error se refieren directamente a sentencias del texto del programa original. Adem�s, la ventaja de la eficiencia que se adjudica tradicionalmente a los lenguajes compilados frente a los interpretados puede pronto ser eliminado, debido a la evoluci�n de las maquinas cuyos lenguajes son ellos mismos1lenguajes de alto nivel. Como ejemplo de estos est�n las nuevas maquinas LISP, las cuales han sido dise�adas recientemente por Symbolics y Xerox Corporations.

 

Los lenguajes de Programaci�n son tomados de diferentes perspectivas. Es importante para un programador decidir cuales conceptos emitir o cuales incluir en la programaci�n. Con frecuencia el programador es osado a usar combinaciones de conceptos que hacen al lenguaje "DURO" de usar, de entender e implementar. Cada programador tiene en mente un estilo particular de programaci�n, la decisi�n de incluir u omitir ciertos tipos de datos que pueden tener una significativa influencia en la forma en que el Lenguaje es usado, la decisi�n de usar u omitir conceptos de programaci�n o modelos.

 

 

 

 

 

 

 

Existen cinco estilo de programaci�n y son los siguientes:

 

Orientados a Objetos.

Imperativa : Entrada, procesamiento y salidas de Datos.

Funcional : "Funciones", los datos son funciones, los resultados pueden ser un valor o una funci�n.

L�gico : {T,F} + operaciones l�gicos (Inteligencia Artificial).

Concurrente : A�n esta en proceso de investigaci�n.

 

El programador, dise�ador e implementador de un lenguaje de programaci�n deben comprender la evoluci�n hist�rica de los lenguajes para poder apreciar por que presentan caracter�sticas diferentes. Por ejemplo, los lenguajes "mas j�venes" desaconsejan (o prohiben) el uso de las sentencias GOTO como mecanismo de control inferior, y esto es correcto en el contexto de las filosof�as actuales de ingenier�a del software y programaci�n estructurada. Pero hubo un tiempo en que la GOTO, combinada con la IF, era la �nica estructura de control disponible; el programador no dispone de algo como la construcci�n WHILE o un IF-THEN-ELSE para elegir. Por tanto, cuando se ve un lenguaje como FORTRAN, el cual tiene sus ra�ces en los comienzos de la historia de los lenguajes de programaci�n, uno no debe sorprenderse de ver la antigua sentencia GOTO dentro de su repertorio.

 

Lo mas importante es que la historia nos permite ver la evoluci�n de familias de lenguajes de programaci�n, ver la influencia que ejercer las arquitecturas y aplicaciones de las computadoras sobre el dise�o de lenguajes y evitar futuros defectos de dise�o aprendido las lecciones del pasado. Los que estudian se han elegido debido a su mayor influencia y amplio uso entre los programadores, as� como por sus distintas caracter�sticas de dise�o e implementacion. Colectivamente cubren los aspectos m�s importantes con los que ha de enfrentarse el dise�ado de lenguajes y la mayor�a de las aplicaciones con las que se enfrenta el programador. Para los lectores que est�n interesados en conocer con mas detalle la historia de los lenguajes de programaci�n recomendamos las actas de una reci�n conferencia (1981) sobre este tema, editadas por Richard Wexelblat. Vemos que FORTRAN I es un ascendente directo de FORTRAN II, mientras que FORTRAN, COBOL, ALGO 60, LISP, SNOBOL y los lenguajes ensambladores, influyeron en el dise�o de PL/I.

 

Tambi�n varios lenguajes est�n prefijados por las letras ANS. Esto significa que el American National Standards Institute ha adoptado esa versi�n del lenguaje como el est�ndar nacional. Una vez que un lenguaje esta estandarizado, las maquinas que implementan este lenguaje deben cumplir todas las especificaciones est�ndares, reforzando as� el m�ximo de transportabilidad de programas de una maquina a otra. La polic�a federal de no comprar maquinas que no cumplan la versi�n est�ndar de cualquier lenguaje que soporte tiende a "fortalecer" el proceso de estandarizacion, puesto que el gobierno es, con mucho, el mayor comprador de computadoras de la naci�n.

 

Finalmente, la notaci�n algebraica ordinaria, por ejemplo, influyo fuertemente en el dise�o de FORTRAN y ALGOL. Por otra parte, el ingles influyo en el desarrollo del COBOL. El lambda calculo de Church dio los fundamentos de la notaci�n funcional de LISP, mientras que el algoritmo de Markov motivo el estilo de reconocimiento de formas de SNOBOL. La arquitectura de computadoras de Von Neumann, la cual fue una evoluci�n de la maquina mas antigua de Turing, es el modelo b�sico de la mayor�a de los dise�os de computadoras de las ultimas tres d�cadas. Esta maquina no solo influyeron en los primeros lenguajes sino que tambi�n suministraron el esqueleto operacional sobre el que evoluciono la mayor�a de la programaci�n de sistemas.

 

Una discusi�n mas directa de todos estos primeros modelos no est�n entre los objetivos de este texto. Sin embargo, es importante apuntar aqu� debido a su fundamental influencia en la evoluci�n de los primeros lenguajes de programaci�n, por una parte, y por su estado en el n�cleo de la teor�a de la computadora, por otra. Mas sobre este punto, cualquier algoritmo que pueda describirse en ingles o castellano puede escribirse igualmente como una maquina de Turing (maquina de Von Neumann), un algoritmo de Markov o una funci�n recursiva. Esta secci�n, conocida ampliamente como "tesis de Church", nos permite escribir algoritmos en distintos estilos de programaci�n (lenguajes) sin sacrificar ninguna medida de generalidad, o potencia de programaci�n, en la transici�n.

 

 

 

 

 

 

 

 

 

 

 

 

COMUNICACION

Los lenguajes de programaci�n son lenguajes especiales que ayudan al usuario a comunicarse con la computadora.  Establecen una comunicaci�n entre el humano que prefiere usar palabras, el sistema decimal y la computadora, que trabaja solo con n�meros binarios (0's y 1's).

 

Lenguaje de m�quina

 

El lenguaje de m�quina est� orientado hacia la m�quina que est� constituida por varios arreglos de "bits".  Este lenguaje es f�cil de entender por la computadora, pero dif�cil para el usuario.  Es el lenguaje original de la computadora el cual es generado por el "software", y no por el programador.

 

 

Lenguaje de bajo nivel

 

Es un lenguaje de programaci�n bien cercano al lenguaje de m�quina.  Es dif�cil de entender por las personas y requiere que los programadores codifiquen las instrucciones con muchos detalles.  Ejemplo:  lenguaje ensamblador.

 

 

Lenguaje de alto nivel

 

Es un lenguaje que se asemeja m�s al lenguaje humano que a un lenguaje de m�quina o ensamblador.  Es m�s f�cil escribir programas en este lenguaje, pero luego deben ser traducidos por compiladores o int�rpretes para que la computadora los entienda.

 

Procesadores de lenguajes

Programas traductores

 

Son los que traducen instrucciones de lenguajes de programaci�n de alto nivel al c�digo binario del lenguaje de la m�quina.

 

C�digo fuente ("source code")

 

Es un conjunto de instrucciones del programa que est�n escritas en un lenguaje de programaci�n.

 

 

 

 

C�digo del objeto ("object code")

 

Es un conjunto de instrucciones binarias traducidas y que la computadora puede ejecutar.

 

Ejemplos de programas traductores

Compilador

 

Es un programa que traduce un lenguaje de alto nivel al lenguaje de m�quina de una computadora.  Seg�n va ejecutando la traducci�n, coteja los errores hechos por el programador.  Traduce un programa una sola vez, generalmente, y es cinco veces m�s r�pido que los programas int�rpretes.  Ejemplos:  ALGOL, BASIC, COBOL, FORTRAN, PASCAL y PL/1.

 

 

Int�rprete

 

Es un programa que traduce un lenguaje de alto nivel al lenguaje de m�quina de una computadora.  El programa siempre permanece en su forma original (programa fuente) y traduce cuando est� en la fase de ejecuci�n instrucci�n por instrucci�n.  Ejemplo:  BASIC

 

 

Ensamblador

 

Es un programa de bajo nivel que traduce el lenguaje de ensamble a lenguaje de m�quina.  Utiliza letras del alfabeto para representar los diferentes arreglos del c�digo binario de la m�quina.  Los programadores de ensamble deben conocer profundamente la arquitectura y el lenguaje de m�quina de su computadora.  El programa ensamblador traduce cada instrucci�n de ensamble escrita por el programador a la instrucci�n en lenguaje de m�quina binario equivalente.  En general, las instrucciones ("software") de un sistema se escriben en este lenguaje.  Ejemplos:  Sistema operativo y Sistemas de manejo de base de datos.

 

 

 

 

 

 

 

 

 

 

 

LENGUAJES DE ALTO NIVEL MAS COMUNES

 

BASIC (Beginners All-purpose Symbolic Instruction Code)

 

Fue el lenguaje de programaci�n interactivo m�s popular en la d�cada de los 70.  Es un lenguaje de prop�sito general.  Desarrollado por John Kemeny y Thomas Kurtz en "Dartmouth College" en 1963.  Existen numerosas versiones, algunas son compiladores y otras son int�rpretes.

 

 

COBOL (Common Business Oriented Language)

 

Es un lenguaje compilador dise�ado para aplicaciones de negocios.  Desarrollado en 1959 por el gobierno federal de los Estados Unidos y fabricantes de computadoras bajo el liderazgo de Grace Hopper.  Es el m�s utilizado por los "mainframe".  COBOL est� estructurado en cuatro divisiones; a saber:

 

 

Divisi�n de identificaci�n - identifica el programa.  

Divisi�n ambiental - identifica a las computadoras fuente y objeto.

Divisi�n de datos - identifica las memorias "buffer", constantes y �reas de trabajo.  

Divisi�n de procedimiento - describe el procesamiento(la l�gica del programa).

 

 

PASCAL

 

Este programa recib�o su nombre en honor a Blaise Pascal.  Fue desarrollado por el cient�fico suizo Niklaus Wirth en 1970 y dise�ado para ense�ar t�cnicas de programaci�n estructurada.  Es f�cil de aprender y de usar y no utiliza l�nea sino ";" (semicolon).  Existen versiones de compilador, como de int�rprete.  Estas var�an seg�n la versi�n.

 

 

 

 

FORTRAN (FORmula TRANslator)

 

Es uno de los primeros lenguajes de alto nivel desarrollado en 1954 por John Backus y un grupo de programadores de IBM.  Es un lenguaje compilador que se dise�� para expresar con facilidad las f�rmulas matem�ticas, resolver problemas cient�ficos y de ingenier�a.

 

 

ADA

 

Es un lenguaje desarrollado como una norma del Departamento de Defensa de los Estados Unidos.  Es un lenguaje basado en PASCAL, pero m�s amplio y espec�fico.  Fue dise�ado tanto para aplicaciones comerciales como cient�ficas.  Es un lenguage de multitareas que puede ser compilado por segmentos separados.  Se llama ADA en honor de Augusta Ada Byron, condesa de Lovelace e hija del poeta ingl�s Lord Byron.

 

 

APL (A Programming Language)

 

Este programa fue desarrollado por Kenneth Inverson a mediados de la d�cada de 1960 para resolver problemas matem�ticos.  Este lenguaje se caracteriza por su brevedad y por su capacidad de generaci�n de matrices y se utiliza en el desarrollo de modelos matem�ticos.

 

 

PL/1 (Programming Language 1)

 

Este programa fue desarrollado por IBM.  Es un lenguaje de prop�sito general que incluye caracter�sticas de COBOL y de FORTRAN.  Su principal utilidad es en los "mainframes".

 

 

RPG (Report Program Generator)

 

Fue desarrollado por IBM en 1964 y dise�ado para generar informes comerciales o de negocios.

 

 

Lenguaje C

 

Fue desarrollado a principios de la d�cada de los 70 en Bell Laboratories por Brian Kernigham y Dennis Ritchie.  Ellos necesitaban desarrollar un lenguaje que se pudiera integrar con UNIX, permitiendo a los usuarios hacer modificaciones y mejor�as f�cilmente.  Fue derivado de otro lenguaje llamado BCPL.

 

 

Lenguaje C++

 

Se pronuncia "ce plus plus".  Fue desarrollado por Bjarne Stroustrup en los Bell Laboratories a principios de la decada de los '80.  C++ introduce la programaci�n orientada al objeto en C.  Es un lenguaje extremadamente poderoso y eficiente.  C++ es un super conjunto de C, para aprender C++ significa aprender todo acerca de C, luego aprender programaci�n orientada al objeto y el uso de �stas con C++.

 

 

Visual BASIC

 

Este programa fue creado por Microsoft.  Es un programa moderno que da apoyo a las caracter�sticas y m�todos orientados al objetos.

 

 

Programaci�n orientada al objeto

 

Las metas de la programaci�n orientada al objeto es mejorar la productividad de los programadores haciendo m�s f�cil de reusar y extender los programas y manejar sus complejidades.  De esta forma, se reduce el costo de desarrollo y mantenimiento de los programas.  En los lenguajes orientados al objeto los datos son considerados como objetos que a su vez pertenecen a alguna clase.  A las operaciones que se definen sobre los objetos son llamados m�todos.  Ejemplo de programas orientados al objeto:  Visual BASIC y C++.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

INDEPENDENCIA DE LA MAQUINA

 

Los int�rpretes realizan normalmente dos operaciones:

 

Traducen el c�digo fuente a un formato interno (esta operaci�n no es estrictamente indispensable).

Ejecutan o interpretan el programa traducido al formato interno.

El formato interno podr�a ser simplemente el resultado del an�lisis morfol�gico, o llevar realizada cierta dosis de an�lisis sint�ctico/sem�ntico, como la traducci�n a notaci�n polaca inversa o a cu�druplas. La primera parte del int�rprete se llama a veces "el compilador", aunque el c�digo interno que genera no es el lenguaje de la m�quina, ni siquiera lenguaje simb�lico, ni tampoco un lenguaje de alto nivel.

 

En el lenguaje JAVA, las dos partes se han separado por completo, y tenemos el compilador de JAVA, que traduce los fuentes a bytecode, y el int�rprete de JAVA, que en realidad interpreta bytecode.

 

Lenguajes interpretativos

Algunos lenguajes no pueden compilarse por completo al lenguaje de la m�quina por uno de los motivos siguientes:

 

Porque contienen operadores que precisan de la presencia del int�rprete, como aqu�llos que ejecutan en tiempo de ejecuci�n cadenas de caracteres que representan instrucciones del lenguaje fuente (APL, LISP, Prolog, Smalltalk).

Porque han eliminado totalmente la declaraci�n de las variables, de tal modo que una variable tiene siempre el tipo del �ltimo valor que se le asign� (APL, LISP, Smalltalk).

Porque se ha eliminado la gesti�n din�mica de la memoria, confi�ndole al int�rprete la eliminaci�n autom�tica de la memoria no utilizada (APL, JAVA, LISP, Smalltalk).

Porque la presencia del int�rprete durante la ejecuci�n es necesaria por razones de seguridad o de independencia de la m�quina (JAVA).

Entre los lenguajes interpretativos destacan APL, JAVA, LISP, Prolog, Rexx, Smalltalk y SNOBOL.

 

Ventajas de un int�rprete

Flexibilidad: permite realizar acciones complejas, imposibles o muy dif�ciles con un compilador, como las siguientes:

Ejecuci�n de cadenas de caracteres mediante operadores como "execute", "interprete" o "evalquote".

Modificar sobre la marcha el significado de los s�mbolos e incluso prescindir por completo de las declaraciones.

Obtener un ligamiento din�mico completo en los sistemas orientados a objetos.

Simplificar la gesti�n de memoria en los programas fuente.

Facilidad de depuraci�n de programas: la interpretaci�n puede interrumpirse en cualquier momento para examinar o modificar los valores de las variables o la situaci�n en la ejecuci�n. La tabla de s�mbolos est� disponible. Se pueden corregir los errores y continuar. Trazas y paradas programadas. Saltos en el programa. Abandonos de subrutinas.

Rapidez en el desarrollo.

Desventajas de un int�rprete

Velocidad: usualmente un orden de magnitud menor que la de un programa compilado.

Tama�o del programa objeto, que exige a�adir el int�rprete al programa propiamente dicho.

Uso de los int�rpretes

Los int�rpretes se usan principalmente:

 

Para el desarrollo de prototipos.

Para la ense�anza.

Cuando el lenguaje tiene caracter�sticas que exigen un int�rprete (Lisp, APL, REXX, Smalltalk, Prolog).

Cuando el lenguaje dispone de operadores muy potentes, lo que significa que la mayor parte del tiempo los programas est�n ejecutando c�digo r�pido prefabricado, m�s que los programas fuente del programador (APL, SNOBOL).

Para obtener independencia de la m�quina (JAVA).

Para aumentar la seguridad (JAVA).

Generaci�n de c�digo en un int�rprete

La gesti�n de registros durante la ejecuci�n es innecesaria. El propio int�rprete la realiza.

Las conversiones de tipo pueden aplazarse. Esto puede tener ventajas e inconvenientes, y normalmente habr� que buscar un equilibrio entre la ocupaci�n de memoria y el tiempo de ejecuci�n.

Durante el an�lisis sint�ctico, la informaci�n sem�ntica asociada a los operandos de las expresiones suele generarse sobre plataformas de operandos, es decir, vectores de estructuras que contienen toda la informaci�n asociada al operando izquierdo, el operando derecho y el resultado de la operaci�n.

Tipos de estructura de int�rpretes

Algunos int�rpretes utilizan una tabla de s�mbolos de tama�o fijo, cuyos elementos apuntan directamente a la memoria asignada a las variables.

Otros tienen tablas de s�mbolos cuyo tama�o puede modificarse de forma din�mica.

En algunos, la tabla de s�mbolos no apunta directamente a la memoria asignada a las variables, sino que lo hace a trav�s de una tabla de referencias intermedia, que lleva la cuenta del n�mero de punteros que apuntan en un momento dado al objeto de que se trate. Esto simplifica la recolecci�n de desechos y la gesti�n de la memoria, a costa de aumentar el tiempo de acceso a las variables, pues hay que atravesar un direccionamiento indirecto m�s.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

UTILIDAD Y EFICIENCIA

 

ADA

Es un lenguaje estructurado parecido al PASCAL, destinado a controlar mecanismos en "tiempo real" (o sea una velocidad compatible con las necesidades reales), pero de gran complejidad. Admite una programaci�n "orientada a objetos" y un sistema de alta modularidad de tipo hipertexto.

Fue elaborado a pedido del Departamento de Defensa de los Estados Unidos y establecido como norma para todos los fabricantes que participaban en el programa de la Iniciativa de Defensa Estrat�gica (IDE, tambi�n llamado "Guerra de las Galaxias").

Regresar al inicio de esta p�gina

 

 

ASSEMBLER (ENSAMBLADOR)

Como se�alado a prop�sito del "Primer Nivel" de los lenguajes, el Assembler es directamente dependiente de los circuitos electr�nicos de los procesadores (que constituyen el n�cleo de los computadores), por lo cual escribir en Ensamblador sigue siendo una tarea muy compleja, a lo cual hay que sumar que el c�digo var�a de un procesador a otro aunque existe ya un jerga com�n para ciertas operaciones como las aritm�ticas y l�gicas, por ejemplo:

 

ADD para sumar (sin reserva) ADC para sumar con reserva ("add with carry") MUL para multiplicar ORA para el "o" l�gico ("or and") EOR para el "o" exclusivo (o bien... o bien...)

Las instrucciones de este tipo deben ir seguidas sea de dos valores (dos n�meros a sumar o multiplicar por ejemplo) o del nombre de una variable. Cuando se ejecute el programa, el valor de una variable nombrada deber� provenir de una operaci�n anterior que

haya terminado por una instrucci�n del tipo "almacenar el resultado del operaci�n en la variable X",

haya extra�do el valor de la variable de una determinada celda de memoria, o

haya efectuado una interacci�n con el usuario, por ejemplo escribir en pantalla "Escriba el valor de X".

(Estas son "instrucciones de asignaci�n").

El Assembler contiene adem�s un conjunto m�nimo de instrucciones de alternaci�n e iteraci�n indispensables para que un programa pueda funcionar como tal.

Regresar al inicio de esta p�gina

 

ALGOL

El ALGOL ("ALGOrithmic Lenguage") es el primer lenguaje que fue creado por un comit� internacional. En 1960 se reunieron representantes de varios pa�ses europeos y de Estados Unidos para crear un lenguaje destinado a "describir procesos" mediante instrucciones de control (iteraciones y alternaciones) de nivel m�s elevado que las existentes en las versiones existentes de su predecesor, el FORTRAN.

Permite escribir programas de resoluci�n de problemas en forma limpia y clara, de f�cil lectura. Aunque poco "transportable" (no permite con facilidad que un programa escrito para un tipo de computador funcione en otro), es de gran importancia conceptual por cuanto introdujo la "programaci�n estructurada", lo cual influy� en muchos lenguajes creados posteriormente.

En 1968 se implement� una nueva versi�n multi-prop�sito especialmente orientada a la tercera generaci�n de computadores que empezaban a copar el mercado. (A diferencia de la primera versi�n, �sta result� muy compleja y, por ello, tuvo poco �xito).

 

EJEMPLO:

 

REAL PROCEDURE exp(x);

VALUE x; REAL x;

BEGIN

        REAL sum, term, n;

        sum:= 1; term:= 1; n:= 0;

        FOR n:= n+1 WHILE abs (term) > 0.001 DO

        BEGIN

                term:= x * term / n;

                sum:= sum + term

        END;

        exp:= sum

END.

Regresar al inicio de esta p�gina

 

BASIC

El BASIC ("Beginner's All-purpose Symbolic Instruction Code")naci� con los microcomputadores, como un lenguaje simplificado y multi-prop�sito destinado a los usuarios no-especialistas.

Permite resolver problemas num�ricos o comerciales as� como crear y mantener archivos, realizar gr�ficos lineales, etc. Es por esencia un lenguaje interpretado y no-estructurado. Sin embargo, existen algunos compiladores, pero no es com�n recurrir a ellos. Y tambi�n es factible redactar los programas en forma estructurada.

 

EJEMPLO

 

10   INPUT A

20   INPUT B

30   C = A+ B

40   IF C > 100 THEN 90

50   PRINT "Suma = "; C

60   PRINT

70   PRINT "Desea seguir? "; : GET R$

80   IF R$ = "S" THEN 10

90   PRINT "Resultado superior a 100!"

100 END

Regresar al inicio de esta p�gina

 

C y C++

El lenguaje "C" es bastante reciente y est� especialmente orientado hacia el desarrollo de software de sistemas operativos y utilitarios que anteriormente se escrib�an en Assembler. Se usa hoy como base para crear el software que funciona con el sistema operativo "UNIX", logrando un alto grado de portabilidad, es decir de independencia respecto de los procesadores (con lo cual es f�cil lograr que un mismo programa pueda ser ejecutado en diferentes modelos de computadores).

El "C++" es un lenguaje desarrollado a partir del "C" pero con una estructura "orientada a objetos", lo cual facilita un mejor manejo de datos.

Regresar al inicio de esta p�gina

 

 

COBOL

EL COBOL ("COmmon Business-Oriented Language") es uno de los primeros lenguajes de programaci�n creados. Fue desarrollado en 1960 por CODASYL (Conference on Data Systems Languages), un comit� en que participaron fabricantes y usarios, a pedido de la Marina de los Estados Unidos. Este comit� estuvo dirigido por la Dra. Grace Hopper, una de las primeras programadoras de la computadora ENIAC. Es uno de los pocos lenguajes reconocidos como norma internacional (americana por el ANSI -American National Standards Institute- y europea por el ISO -International Organization for Standardization-).

Est� orientado -como su nombre indica- a aplicaciones comerciales, por lo cual sus instrucciones est�n especialmente dise�adas para facilitar la entrada y salida de datos (impresi�n de tablas, etc.). Se pretendi� que se pareciera lo m�s posible a un lenguaje natural, por lo cual requiere mucho m�s escritura que otros lenguajes. Esto facilita la lectura posterior pero resulta aburrido para los redactores. Debe iniciarse con secciones donde se declaran todas las variables y los perif�ricos que se van a usar, cosas que muchos lenguajes posteriores ya no requieren.

Los programas escritos en COBOL, que es un lenguaje compilado, se clasifican en cuatro divisiones: Identification, Enviroment, Data y Procedure. La Identification division especifica el nombre del programa y contiene informaci�n general del programa como puede ser su autor, fecha en que se escribi� y una peque�a descripci�n de su utilidad, as� como cualquier otra documentaci�n que el programador desee a�adir.

La Enviroment division especifica qu� equipo o equipos se est�n utilizando, y los archivos empleados en el programa para la entrada y la salida.

La Data division describe los datos utilizados en el programa.

La Procedure division contiene la parte del procesamiento que dicta las acciones del programa.

 

EJEMPLO

 

IDENTIFICATION DIVISION.

PROGRAM-ID. SUMA.

 

ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

  SELECT ENTRADA ASSIGN TO INPUT.

  SELECT SALIDA ASSIGN TO OUTPUT.

 

DATA DIVISION.

FILE SECTION.

FD ENTRADA LABEL RECORD IS OMITTED.

   01 VENTA.

   02 VALOR PICTURE 9999V99.

   03 FILLER PICTURE X(44).

FD SALIDA LABEL RECORD IS OMITTED.

   01 RESULTADOS PICTURE X(132).

WORKING STORAGE SECTION.

...

PROCEDURE DIVISION.

...

Regresar al inicio de esta p�gina

 

FORTRAN

El FORTRAN ("FORmula TRANslator") fue desarrollado entre los a�os 1954 y 1957 por un equipo dirigido por James Backus, fue el primer lenguaje compilado e inclusive hoy en d�a es usado ampliamente en la soluci�n de problemas num�ricos. Aunque fue el m�s com�n hasta 1970, sigue siendo de primera importancia en aplicaciones cient�ficas por cuanto se adapta muy bien a la forma tradicional de escribir f�rmulas matem�ticas. Al contrario, no se presta con facilidad al manejo de archivos y produccci�n de tablas de resultados.

Existen numerosas versiones y perfeccionamientos posteriores. (La versi�n de 1966 fue institu�da como est�ndar por el Instituto Americano de Estandarizaci�n, reemplaz�ndola por el FORTRAN 77 en la d�cada siguiente).

 

EJEMPLO

 

      INTEGER A, B, C

  10  READ (5,1010) A, B

1010  FORMAT (I4,I4)

          C = A - B

          IF (C. EQ. 0) GO TO 20

          WRITE (6,1020) C

1020  FORMAT (I4)

          GO TO 10

  20  STOP

      END

Regresar al inicio de esta p�gina

 

HYPERTALK

"HyperTalk" es el lenguaje desarrollado por Dan Winkler para Bill Atkinson, el creador del "HyperCard" para Apple-Macintosh. Est� orientado a la creaci�n de aplicaciones conforme al sistema de "hiperarchivos" (sistemas de fichas interrelacionadas donde se facilita el "navegar" de un archivo a otro).

HyperTalk es un buen ejemplo de lenguaje orientado a objetos. Este tipo de lenguaje combina la l�gica declarativa con los algoritmos (Vea "PROLOG"). Un programa ya no es una secuencia de instrucciones sino un conjunto de objetos agrupados en conjuntos, definidos mediante atributos y a los cuales pueden asociarse instrucciones. As�, en HyperCard, existen archivos ("stacks" o "pilas") que agrupan fichas ("cards"), y cada una de �stas contiene campos de datos y botones. Todos son "objetos" que -si bien mantienen entre s� una relaci�nn jer�rquica- tienen asociados paquetes de instrucciones ("scripts") independientes unos de otros. Cada objeto pertenece a un conjunto (como fichas o botones) que tiene "atributos" propios comunes a todos sus miembros, y cada atributo tendr� un valor com�n o espec�fico para cada caso. Para dar o buscar dicho valor intervienen "facetas" que son instrucciones (procedimientos) asociadas.

Regresar al inicio de esta p�gina

 

 

HTML

El HTML o "HyperText Marking Language" es el lenguaje que se utiliza para crear p�ginas -como la presente- en World Wide Web.

El HTML se basa en los mismos principios que el HyperTalk, permitiendo definir segmentos (de texto o ilustraciones) que remiten a otros, facilitando una "navegaci�n" por m�ltiples v�as, a gusto del usuario. As� es como el bot�n "Home" tiene asociadas las instrucciones que indican al procesador que busque la primera ficha o p�gina del archivo llamado "Home" o "index" en el archivo del computador que presta el servicio de conexi�n (servidor). Y si se hace un clic en una palabra subrayada, se pasa a ver otra secci�n del mismo documento o alg�n otro documento (otro "objeto").

El HTML no es propiamente un lenguaje de programaci�n , sino solo de exhibici�n de contenidos y navegaci�n, porque no define operaciones.

Regresar al inicio de esta p�gina

 

 

JAVA

JAVA es un lenguaje de programaci�n basado en el C++ (con cambios en la sintaxis y nuevas restricciones de codificaci�n). Permite agregar animaciones y puntos sensibles en p�ginas de texto. Aunque se lo pretende presentar como "EL" lenguaje destinado a desarrollos para World Wide Web, es mucho mas complejo que el HTML e incluso que otros lenguajes utilizables por los browsers (navegadores) de la Web.

Una versi�n muy reducida es el "JavaScript", que se puede combinar con el lenguaje HTML, dentro de una p�gina web.

Regresar al inicio de esta p�gina

 

 

LISP

LISP ("LIst Processing Language") es un lenguaje computacional bastante diferente de los dem�s. Es un lenguaje funcional, es decir que acumula informaciones e instrucciones bajo la apariencia de f�rmulas (como en �lgebra). Estas informaciones toman la forma de listas (de ah� su nombre), que son memorizadas y comparadas para efectuar luego operaciones que consisten en "evaluar las f�rmulas". El conjunto de funciones constituye el programa en cuanto la evaluaci�n de una funci�n llama a otra y as� sucesivamente (en forma eminentemente recursiva). El control de la ejecuci�n depende del int�rprete (que busca la secuencia y la traduce en lenguaje m�quina), mientras depende del programador la forma en que las funciones se llaman entre s�.

El objetivo de este tipo de lenguaje es asemejarse a una forma humana de conservaci�n de informaci�n (la de las descripciones) y permitir la construcci�n de programas que se enriquezcan o ajusten en funci�n del uso (simulando aprendizaje). As�, LISP es el primer lenguaje creado con el f�n de ser una herramienta para el desarrollo de la inteligencia artificial.

 

EJEMPLO

 

? (de append (L1 L2)

       (if (null L1)

       L2

       (cons (cor L1)

              (append (cdr L1) L2))))

Regresar al inicio de esta p�gina

 

LOGO

Creado por Seymour Papert, padre de la "computaci�n educativa", el LOGO est� destinado a la ense�anza de la programaci�n a los ni�os, desde temprana edad. Por ello es sobretodo conocido por su capacidad gr�fica y su "tortuga", que es el puntero con el cual se realizan los dibujos. Es altamento modular y deja gran libertad al usuario para definir procedimientos desde muy simples hasta muy complejos, en forma jer�rquica, permitiendo incluso el control de perif�ricos mec�nicos (operaci�n de peque�os robots). Aunque bastante poderoso (se han escrito procesadores de palabras en LOGO), practicamente no es utilizado fuera de la escuela b�sica.

 

EJEMPLO

 

Comandos para dibujar un cuadrado de 20 pixels (puntos) por lado:

BAJAR_PLUMA. ADELANTE 20. ROTACION 90. ADELANTE 20. ROTACION 90. ADELANTE 20. ROTACION 90. ADELANTE 20. LEVANTAR_PLUMA.

Lo que conforma el cuadrado puede simplificarse como: HACER 4 (ADELANTE 20. ROTACION 90). y ser utilizado repetidamente definiendo el comando "Cuadrado":

>CUADRADO: HACER 4 (ADELANTE 20. ROTACION 90).

 

Esta definici�n se puede generalizar reemplazando la longitud por una variable (El programa pide autom�ticamente en pantalla el valor de una variable si lo desconoce): >CUADRADO: HACER 4 (ADELANTE LADO. ROTACION 90).

 

(Las �rdenes para bajar y levantar la "pluma" -que permiten dejar o no dejar rastro al mover la "tortuga" - pueden introducirse o no en la definici�n, a voluntad).

 

Regresar al inicio de esta p�gina

 

PASCAL

Del nombre del filos�fico y matem�tico franc�s, PASCAL es un lenguaje inicialmente dise�ado para la docencia introductoria de la programaci�n (a nivel superior). Surgi� alrededor de 1970, en gran parte como reacci�n simplificadora despu�s de la creaci�n de los muy complejos PL/1 y ALGOL68 para los nuevos computadores de tercera generaci�n.

Muy inspirado en la primera versi�n oficial de ALGOL (60), es un lenguaje muy estructurado y con alta modularidad. Tuvo por ello -y por su simplicidad- mucha aceptaci�n al punto de ser utilizado para crear importantes aplicaciones e incluso compiladores y sistemas operativos (antes desarrollados en Assembler).

 

EJEMPLO

 

PROGRAM CALCULATOR;

   VAR

      A, B: INTEGER;

      OPERATION; CHAR;

BEGIN

   REPEAT

      READLN (A, OPERATION, B);

      IF OPERATION = '+' THEN

         WRITELN (A + B)

      ELSE IF OPERATION = '-' THEN

         WRITELN (A - B)

      ELSE IF OPERATION = '*' THEN

         WRITELN ( A* B)

      ELSE IF OPERATION = '/' THEN

         WRITELN (A / B)

   UNTIL FALSE

END.

Regresar al inicio de esta p�gina

 

PERL

Es un lenguaje especializado en el procesamiento de textos, particularmente extraer y validar las respuestas a cuestionarios incluidos en p�ginas web.

Regresar al inicio de esta p�gina

 

 

PL/1

EL "PL/1" es un lenguaje multi-prop�sito creado por IBM y SHARE, especialmente a ra�z del paso de la segunda a la tercera generaci�n de computadores, cuando se preve�a la creciente difusi�n de estas m�quinas y su posible uso en una gama creciente de actividades. Pretend�a ampliar las posibilidades del FORTRAN fusionando conceptos provenientes del COBOL y el ALGOL.

La gran cantidad de instrucciones, tipos de datos y casos especiales que contempla lo hacen dif�cil de aprender y dominar, raz�n de su poca difusi�n.

 

EJEMPLO

 

TRAPZ: PROCEDURE OPTIONS (MAIN);

  DECLARE (J,K)    FIXED DECIMAL (2),

               AREA    FIXED DECIMAL (8,6);

  PUT SKIP EDIT ('AREA BAJO LA CURVA') (X(9),A);

  PUT SKIP;

  DO K=4 TO 10;

      AREA=0.5/K;

      DO J=1 TO K-1;

           AREA=AREA+((J/K)**2)/K);

       END;

  PUT SKIP EDIT      ('PARA DELTA X=1/',K,AREA)

                              (X(2),A,F(2),X(6),F(9,6);

   END;

END;

Regresar al inicio de esta p�gina

 

PHP

Lenguaje que se acopla al HTML (p�ginas web) para definir procedimientos que ha de realizar el servidor de web, por ejemplo procesar un formulario, enviar o extraer datos de una base de datos (acopl�ndose tambi�n con un lenguaje de tipo SQL), enviar una u otra p�gina web seg�n determinadas condiciones prefijadas por el programador, etc.

Regresar al inicio de esta p�gina

 

 

PROLOG

Los primeros a�os de la d�cado del 70 son conocidos como un per�odo de "crisis del software", en que se descubri� que la creaci�n de buenos programas involucraba costos mayores que los del hardware que los ejecuta. Tambi�n se hac�a patente una creciente necesidad de procesar "conocimientos" (algo mucho m�s amplio y complejo que los datos cuantitativos o meras "secuencias de caracteres" a los cuales se reducen muchos lenguajes de programaci�n). Esta crisis llev� a investigar numerosas alternativas, entre las cuales nuevos lenguajes no basados en instrucciones algor�tmicas o procedimientos. Si el hombre "procesa" m�s informaci�n por inferencia l�gica que por c�lculo, �no podr�a la m�quina hacer lo mismo?

PROLOG ("PROgramaci�n en LOGica") es una respuesta a esta crisis, producto del avance de la l�gica moderna (de tipo funcional). Lo crearon A. Colmenauer y Ph. Roussel, con la colaboraci�n de R. Kowalski, simult�neamente en la Universidad de Aix-Marseille (Francia) y Edimburgo (Gran Breta�a). Se basa en el c�lculo de predicados de primer orden y en el principio de resoluci�n de Robinson. En vez de ser algor�tmico ("procedural" en ingl�s, t�rmino sin traducci�n), es decir concebido como un conjunto de instrucciones que la m�quina debe ejecutar en forma secuencial, es "declarativo", es decir basado en definiciones (de "hechos" o "reglas", como se explica m�s abajo).

 

EJEMPLO

 

Si sabemos que una l�nea a�rea une Par�s con R�o con el vuelo 36 y otra une R�o con Santiago con el vuelo 71, concluimos sin dificultad alguna que es posible viajar de Par�s a Santiago con una escala en R�o.

En l�gica funcional, los datos b�sicos ("hechos" en terminolog�a PROLOG) podr�an escribirse:

 

   une(Paris,Rio,Vuelo36).

   une(Rio,Santiago,Vuelo71).

Vemos que la relaci�n ("une") es la misma y que hay un t�rmino com�n en la lista de argumentos (lo que hay entre par�ntesis). Solo falta explicitar una regla id�ntica a la que se usa para extraer una conclusi�n a partir de dos premisas en un silogismo:

   camino(Paris,Santiago) <- une(Paris, x, n),

                             une(x, Santiago, m).

 

o sea "Hay un camino entre Par�s y Santiago si alg�n vuelo (n) une Par�s con una ciudad 'x' y (&) otro vuelo (m) une esta ciudad 'x' con Santiago.

 

Un "programa" en PROLOG se conforma con estos dos tipos de expresiones (llamadas "cl�usulas"): "hechos" y "reglas". Una cl�usula con forma de hecho y seguida de un '?' constituye la forma habitual de consultar la informaci�n. Si no contiene ninguna variable, el programa verifica si existe una "copia" en la lista de hechos y contesta por s� o no. Si contiene una o m�s variables busca cuales se ajustan a la descripci�n o pueden ser deducidas mediante las reglas y se�ala el valor correcto de las diferentes variables (o bien "No" si no hay respuesta posible).

Regresar al inicio de esta p�gina

 

SQL

Lenguaje desarrollado especialmente para facilitar la consulta de bases de datos (BD), acotando progresivamente la b�squeda (de ah� el nombre de "Sequential Query Language").

Existen hoy numerosas aplicaciones de administraci�n de bases de datos que recurren al SQL (Las m�s conocidas, potentes - y caras - son Oracle e Informix).

Hoy se pueden acoplar las bases de datos a hipertextos (p�ginas web), para lo cual las buenas aplicaciones ya traen m�dulos que hacen la conexi�n. El lenguaje PHP del cual hablamos m�s arriba tambi�n sirve para definir procedimientos de inserci�n y de consulta de datos en BD (Base de Datos) que funcionan con SQL.

 

 

 

 

 

 

 

SIMPLICIDAD

 

Luego de escribir la nota sobre la conjetural simplificaci�n C=simple, C++= complicado, me qued� pensando en que existe esa percepci�n de un espectro de dificultades en los lenguajes de programaci�n, donde, digamos, en un extremo vive Basic, y en el otro Assembler. La pregunta inocente que se me aparece es: �por qu� alguien aprender�a una lenguaje dif�cil si existe uno f�cil? En otra �poca -digamos, unos diez a�os atr�s- esa pregunta ten�a otra respuesta que la que tiene hoy. Pero en estos d�as, digamos que el 90% de las cosas que se pueden escribir en Visual C++ se pueden escribir tambi�n en Visual Basic, discutiblemente con m�s facilidad. �Por qu� preferir Java, C, C++, Visual Basic, Delphi? Estoy hablando �nicamente de algunos lenguajes de desarrollo en el entorno gr�fico de Windows. No quiero ni asomarme a la marisma de lengaujes compilados, semicompilados e interpretados que existe bajo Linux. Creo que el problema es un poco m�s complejo de lo que parece a simple vista.

Stroustrup (hablando de Java) dec�a que la simplicidad de un lenguaje siempre es ilusoria, y que eventualmente cualquier lenguaje que alcance popularidad ser� necesariamente grande, en t�rminos de complejidad y de librer�as. Fueron palabras prof�ticas: todav�a recuerdo el d�a que Bill Gates defend�a a capa y espada lo despojado de Visual Basic, un lenguaje que nunca tendr�a punteros, herencia, funciones virtuales, excepciones, multithreading, etc. Hoy Visual Basic (en su reencarnaci�n .NET) tiene todas estas cosas y mucho m�s. Naturalmente era un lenguaje m�s simple que C++, y esa simplicidad ten�a, entre otros costos graves, la irregularidad. La sintaxis era ca�tica (estoy pensando en Line, por ejemplo, que ten�a el signo menos para separar dos pares de coordenadas encerradas entre par�ntesis), un formulario era utilizado a veces como variable (Form1.Show) o como tipo (new Form1), no hab�a forma de prototipear sin escribir el cuerpo de la funci�n... Pero ten�a la mejor IDE y era el m�s productivo de los lenguajes de programaci�n, por lo que era tambi�n necesariamente denostado por los Altos Programadores de C++, quienes ten�an un IDE horrible para trabajar con MFC en Visual C++, y se las ve�an en figurillas para manejar COM con ATL. Ni hablar del punto de vista de los de Linux, que s�lo ten�an vi y make. Pero eso con el tiempo, como dec�a Stroustrup, tender�a a equilibrarse. C++ gan� simplicidad y un mejor IDE en .NET, y Visual Basic gan� complejidad y regularidad. Digamos que en el entorno ideal de Microsoft programar en un lenguaje u otro aparentemente es s�lo una elecci�n de cu�l sintaxis es m�s elegante. La pregunta que esto me provoca es qu� suceder� con la generaci�n de programadores acostumbrados a pensar que programar es algo sencillo que se aprende con un wizard en un par de d�as. Estoy hablando, por supuesto, de la generaci�n Visual Basic, idiotizada por el mercado Microsoft (cuyos precursores quiz�s fueron los programadores de Clipper). Advierto aqu� que la palabra "idiotizada" no est� dictada desde el rencor ocasionado porque ellos la tuvieron f�cil y yo no: program� paralelamente en Visual Basic y en C++ por una cifra de a�os. La pr�ctica negligente de la programaci�n alentada por el hecho de que un formulario de "Hello, world!" se hace sin experiencia previa en unos quince minutos s�lo deja como secuela programas mal dise�ados, algoritmos pobres e ineficientes, inmantenibilidad, costumbres viciosas que no se pueden cambiar f�cilmente una vez adquiridas. Si uno es tratado de idiota por el tiempo suficiente, uno termina crey�ndoselo. La literatura completa esa ilusi�n con libros como "Visual Basic for dummies"; el gran Dijkstra dec�a (en su excelente escrito "Under the spell of Leibnitz's dream"), que considerar retrasados mentales a los profesionales de la computaci�n era una costumbre de las editoriales de Estados Unidos. Le criticaron un libro por ser demasiado riguroso y t�cnico, citando la famosa "no one ever got broke by underestimating the intelligence of the American people" de P. T. Barnum. Pero bueno, volviendo al tema, el camino de Visual Basic era claramente un camino sin salida, y no deja de darme cierta satisfacci�n ver que finalmente tom� una forma m�s profesional, y que la tecnolog�a no nos transform� en meros obreros del bit.

En la nota sobre C y C++ pretendo que la pr�ctica seria de un lenguaje de programaci�n cualquiera s�lo llega a un punto satisfactorio luego de un par de a�os, pero ese par de a�os es muy caro para los tiempos tecnol�gicos de hoy. Nos olvidamos que los tiempos tecnol�gicos de hoy son el g�nesis de un deseado futuro m�s estable, y que alg�n d�a no muy lejano los lenguajes de programaci�n tender�n a ser equivalentes en prestaciones, y que, como en una evoluci�n darwiniana acelerada, s�lo sobrevivir�n los m�s populares.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DISE�O DETALLADO

 

 

ESTRUCTURAS I/O

 

Caracter�sticas de los lenguajes de programaci�n

Los lenguajes de programaci�n constituyen la instrumentaci�n de las reglas cualitativas de un paradigma, estos est�n sujetos a una serie de caracter�sticas generales que pueden clasificarse como sigue:

 

Tipos de Datos

Estructuras de Control

Manejo del I/O

Operaciones, Operadores y Operandos

Sintaxis

Esquema de Traducci�n y Ejecuci�n

 

 

Tipos de datos

En todo lenguaje existen tres tipos niveles de tipos de datos: M�quina, Lenguaje, Usuario (definidas por el mismo). Entre mayor nivel tenga el tipo del dato, m�s f�cil es su uso. Por otro lado, entre m�s elemental sea el tipo del dato resulta m�s eficiente en t�rminos de memoria y tiempo de ejecuci�n.

 

Nivel M�quina

 

APUNTADOR = Representa una direcci�n (o zona) en memoria

REGISTRO = Representa un registro o acumulador en el CPU

ENTERO = N�mero Entero en 2 B ( 2**15 ) � 4 B (2**32).

REAL = N�mero Exponecial en 4, 8 � 16 Bytes.

ASCII = Caracter alfanum�rico 1B ( 256 elementos )

BOOLEANO = Caracter booleano (t,f) en 1bit � 1Byte

NBCD = Caracter decimal en 4 bits (nibble)

Nivel Lenguaje

 

Varia considerablemente para cada lenguaje, algunos de ellos son:

 

CADENA (n) = Cadena de caracteres ASCII de tama�o n, puede ser din�mica o est�ticamente asignada

ARREGLO (n,...,m) = Manejo de vectores y matrices de otros tipos

TABLA (n) = Tabla de acceso Hash de n elementos

ENUMERABLES = Asignaci�n de mnem�nicos en una secuencia enumerable ( 256 elementos ).

SUBRANGO = Selecci�n de un rango de n�meros enteros

SET = Similar al enumerable pero para uso l�gico

RECORD = Estructura formada por varios tipos diversos con un solo nombre ( una direcci�n base en memoria).

FILE = Similar a CADENA asociado con un manejo de I/O

Relacionado con el tipo de datos, se asocian los conceptos de

Coercion :

Los datos son convertidos obligatoriamente al tipo requerido por la operaci�n

 

Overloading :

Cuando un tipo de dato, operador o funci�n puede tener distintos significados de acuerdo al contexto en que se encuentre

 

Polimorfismo :

Cuando una estructura de datos b�sica puede tener formas distintas en su definici�n final ( un ejemplo elemental es el Case en un Record, sin embargo puede ser muy complejo ). Otros tipos de datos m�s espec�ficos son:

 

LISTAS = Secuencia de Apuntadores en forma ligada

PATRONES = Similar a CADENA solo que su usa para comparar valores y contenidos en cada CADENA

FUNCIONES = Asocian un relaci�n o funci�n l�gica

CLASES = Similares a RECORD, solo que incluyen en su definici�n datos, rutinas y comunicaci�n ( DB/DP/DC ), asociados a una direcci�n de memoria ( normalmente residen en el HEAP )

 

 

Nivel Usuario

 

Adicionalmente el usuario puede definir sus propias estructuras de datos, combinando para esto los diversos tipos de datos anteriormente mencionados. �Qu� tal un : Apuntador de un Arreglo de Record de un Subrango de enteros con subindices Enumerables?

 

Estructuras de Control

 

Un aspecto importante en un lenguaje de programaci�n es su estructura de control, esto es la forma como organiza la ejecuci�n de las instrucciones del usuario. Esta organizaci�n es independiente de la forma y las operaciones que forman en si las instrucciones del lenguaje. En realidad es la forma de la estructura de control que identifica al paradigma de programaci�n en cuesti�n. As� por ejemplo la estructura procedural define al paradigma; en general podemos decir que toman las siguientes formas:

 

Secuencial ===> BEGIN / END

Condicional ===> IF THEN, IF THEN ELSE

Incondicional ==> GO TO

Predicados ==> AND,OR,CUT,NEGATION,BACKTRACKING

C�clica ===> WHILE, REPEAT UNTIL, FOR

Modular ===> FUNCTION, PROCEDURE

Interrupciones => ON CONDITION, EXCEPTION HANDLING

No Secuencial => CASE OF, RECURSIVE, LISTS

Por Eventos ===> MESSAGES, INTERLEAVED

Concurrencia ==> PAR/END, PAR/ALT/END

 

 

Manejo del I/O

 

Otro elemento de los lenguajes de programaci�n es el manejo del Input/Output, el cual se clasifica de acuerdo al medio usado:

 

Entrada de texto : Stream Oriented, EOF, EOL

Impresi�n : DISPLAY, TYPE

Manejo del Disco : Virtual Memory, Overlays

Manejo de Archivos : SEQ, RANDOM, INDEX, HASH

Manejo de Multimedios : Mouse, VCR, etc.

 

Es importante en la medida en que pueda la informaci�n se almacene y recupere en una forma compatible con el esquema de operaci�n del lenguaje. As� por ejemplo, para una lengua matem�tica es importante tener un manejo transparente de matrices en disco y para un manejo de objetos, ser�a conveniente tener un manejo sencillo de persistencia de los objetos en disco.

 

Operaciones, Operadores y Operandos

 

Se mencionan a continuaci�n las operaciones y su ejecuci�n en lenguajes artificiales (estas pueden requerir de cero, uno, dos � m�ltiples operandos):

 

1) Tipo de M�quina Triples de M�quina ( Load Reg3,Alfa)

2) Tipo Aritm�tico - (unario), -,+,*,/,**, INC, DEC

3) Tipo Comparaci�n >,<, >=, =<

4) Tipo l�gico AND, OR, NOT

5) Tipo Utileria Asignaci�n (=,:=, <-)

6) Tipo I/O Open, Close, Get,Put, Read, Write, Seek, Find

7) Tipo Texto Concatena ( ||, b, +) , Decatena, SUBSTR, Alterna( | )

8) Tipo Miscel�neo New,Dispose, Cons,Append, CAR,CDR,CUT,etc.

 

 

Sintaxis

 

Tal vez el componente m�s caracter�stico de un lenguaje de programaci�n es su sintaxis, esta invita al uso del paradigma de una manera natural. As� por ejemplo PASCAL, usa una sintaxis estructurada, mientras que LISP tiene una sintaxis mas libre pero de tipo funcional. PROLOG por su parte tiene una notaci�n formal que invita a la abstracci�n y al c�lculo de predicados. Finalmente los lenguaje orientados a objetos ( como Smalltalk ) combinan una sintaxis en texto con un manejo de iconos que representan en croquis ( e inclusive, im�genes completas ) los objetos en cuesti�n, junto con esto, el uso de multimedio para el pasaje de mensajes de I/O invita el pensamiento en t�rminos del paradigma en forma sencilla ( Hypercard ). Una vez m�s es importante recordar que la sintaxis del lenguaje aunque necesaria, no define al paradigma, �ste est� identificado por los postulados correspondientes. Adicionalmente, se puede argumentar que la programci�n en t�rminos gramaticales representa un paradigma adicional de programaci�n.

 

Esquema de Traducci�n y Ejecuci�n

 

Existen un gran n�mero de esquemas para las labores de traduci�n, ligado, cargado y ejecuci�n de un programa, existen diversos esquemas de Interpretaci�n, Compilaci�n y Residencia en Ejecuci�n

Bibliograf�a:

 

Llaccua y Vasquez, Programando con Objetos en Borland Pascal. Ed. San Marcos

 

Schildt , Turbo C/C++, manual de referencia. , Osborne/McGraw-Hill.

 

Watt , David A. Programming Languaje Concepts and Paradigms. University of Glasgow, Uk. Prentice Hall.

 


Home
Archive index
1