ABC fue desarrollado a principios de los 80 en el Centrum voor Wiskunde en
Informatica (CWI) (un centro de investigación holandés de carácter oficial que,
entre otras cosas, actualmente alberga la oficina central del W3C) como una
alternativa al BASIC. Como éste, fue pensado para
principiantes, aunque su evolución posterior lo hace también adecuado para
programadores avanzados. Es muy fácil de aprender y de usar, y el código es
compacto pero legible.
Tipos de datos
Este lenguaje
tiene también interés histórico, ya que es el principal antecedente de Python.
En esta entrevista, Guido Van Rossum, creador de Python, explica la influencia
de ABC en Python así como algunos de sus puntos débiles. ABC tiene sólo cinco
tipos de datos básicos:
·
Números
(enteros exactos de cualquier tamaño y números no exactos)
·
Textos
(strings de cualquier longitud)
·
Listas (sus
elementos tienen que ser del mismo tipo y siempre están ordenados)
·
Compuestos
(equivalentes a registros sin nombres de campo)
·
Tablas (son
listas con índices o claves).
Como sucede con
otros intérpretes, ABC es, además de un lenguaje de programación, un entorno
interactivo de trabajo. No requiere de declaraciones de variables, cuenta con
el apoyo de la programación top-down. Proporciona una precisión aritmética
infinita, ilimitada listas de cadenas, y otras características que da gran
facilidad al uso de los principiantes. Sus diseñadores afirman que los
programas de ABC son típicamente alrededor de una cuarta parte del tamaño de
los programas equivalentes en Pascal o C, y además es más legible.
Originalmente fue
una aplicación monolítica, dando lugar a una incapacidad para adaptarse a las
nuevas exigencias, como la creación de una interfaz gráfica de usuario. Con ABC
no se podía acceder directamente al sistema de archivos subyacente y el sistema
operativo.Incluye un entorno de programación con sintaxis de edición-dirigida,
sugerencias, variables persistentes y múltiples espacios de trabajo.
ABC está
disponible como un intérprete / compilador, actualmente en la versión 1.05.02.
Además ha sido portado a Unix, DOS, Atari, y Apple Macintosh.ABC también tuvo
una gran influencia en el diseño del lenguaje de programación Python, Guido van
Rossum, quien desarrolló Python, que anteriormente trabajó durante varios años
en el sistema ABC a principios de los años 1980.
Ada
Ada es un lenguaje de
programaciónorientado
a objetos y fuertemente tipado
de forma estática que fue diseñado por Jean Ichbiah
de CII Honeywell Bull por encargo del Departamento
de Defensa de los Estados Unidos. Es un lenguaje multipropósito, orientado
a objetos y concurrente,
pudiendo llegar desde la facilidad de Pascal
hasta la flexibilidad de C++. Fue diseñado con la seguridad en
mente y con una filosofía orientada a la reducción de errores comunes y
difíciles de descubrir. Para ello se basa en un tipado muy fuerte y en chequeos
en tiempo de ejecución (desactivables en beneficio del rendimiento). La
sincronización de tareas se realiza mediante la primitiva rendezvous.
Ada se usa principalmente en entornos en los que se necesita una gran seguridad
y fiabilidad como la defensa, la aeronáutica
(Boeing o Airbus), la gestión del tráfico
aéreo (como Indra en
España) y la industria aeroespacial
entre otros.
Historia
El lenguaje fue
diseñado bajo encargo del Departamento de Defensa de los Estados Unidos (DoD).
Durante los años 1970, este departamento tenía
proyectos en una infinidad de lenguajes
y estaba gastando mucho dinero en software.
Para solucionarlo se buscó un lenguaje único que cumpliese unas ciertas normas
recogidas en el documento Steelman. Después de un estudio de los lenguajes
existentes en la época se decidió que ninguno las cumplía totalmente, por lo
que se hizo un concurso público al que se presentaron cuatro equipos, cuyas
propuestas se nombraron con un color: Rojo (Intermetrics), Verde (CII Honeywell
Bull), Azul (SofTEch) y Amarillo (SRI International). Finalmente en mayo d1979
se seleccionó la propuesta Verde diseñada por Jean Ichbiah de CII Honeywell Bull, y se
le dio el nombre de Ada. Esta propuesta era un sucesor de un lenguaje anterior
de este equipo llamado LIS y desarrollado durante los años 1970.
El nombre se
eligió en conmemoración de lady Ada Augusta Byron
(1815-1852) Condesa de Lovelace, hija del poeta Lord George Byron, a quien se considera la
primera programadora de la Historia, por su colaboración y relación con Charles Babbage, creador de la máquina analítica. El lenguaje se
convirtió en un estándar de ANSI en 1983 (ANSI/MIL-STD 1815) y
un estándar ISO
en 1987
(ISO-8652:1987). El DoD y los ministerios equivalentes de varios países de la OTAN
exigían el uso de este lenguaje en los proyectos que contrataban (el Ada
mandate). La obligatoriedad en el caso de Estados Unidos terminó en 1997,
cuando el DoD comenzó a usar productos COTS (commercial off the shelf). Ada
ha sido utilizado por la NASA en sistemas VAX.
Un compilador de
Ada muy usado es GNAT, originalmente desarrollado por la Universidad de Nueva
York bajo patrocinio del DoD. Está basado en la tecnología de GCC y es software libre. Actualmente está mantenido
por AdaCore (antes llamada Ada Core Technologies), empresa que ofrece soporte y
servicios sobre el compilador. Existen otros compiladores comerciales.
Características
La sintaxis,
inspirada en Pascal,
es bastante legible incluso para personas que no conozcan el lenguaje. Es un
lenguaje que no escatima en la longitud de las palabras clave, en la filosofía
de que un programa se escribe una vez, se modifica decenas de veces y se lee
miles de veces (legibilidad es más importante que rapidez de escritura).Es
indiferente el uso de mayúsculas y minúsculas en los identificadores y palabras
claves, es decir es un lenguaje case-insensitive.En Ada, todo el
programa es un único procedimiento, que puede contener subprogramas
(procedimientos o funciones).Cada sentencia se cierra con endqué_cerramos.
Es un modo de evitar errores y facilitar la lectura. No es necesario hacerlo en
el caso de subprogramas, aunque todos los manuales lo
aconsejan y casi todos los programadores de Ada lo hacen.
El operador de
asignación es :=, el de igualdad =. A los programadores de C y
similares les puede confundir este rasgo inspirado en Pascal.La
sintaxis de atributos predefinidos es Objeto'Atributo (o Tipo'Atributo) (nota:
esto sólo aplica a atributos predefinidos por el lenguaje, ya que no es el
concepto de atributo típico de OOP).Se distingue entre
"procedimientos" (subrutinas que no devuelven ningún valor pero
pueden modificar sus parámetros) y "funciones" (subrutinas que
devuelven un valor y no modifican los parámetros). Muchos lenguajes de
programación no hacen esta distinción. Las funciones de Ada favorecen la
seguridad al reducir los posibles efectos colaterales, pues no pueden tener
parámetros in out.
AIML
El AIML, o Artificial Intelligence Mark-up Language es un lenguaje de
programación basado en XML. Fue diseñado específicamente para
ayudar en la creación de la primera entidad chatbot informática de lenguaje
artificial online o A.L.I.C.E., en sus siglas en inglés de Artificial
Linguistic Internet Computer Entity Chatterbot ((en inglés) Alice). Aunque descrito muy ampliamente,
el lenguaje AIML está especializado en la creación de agentes software con
lenguaje natural, conocidos como Alicebots.
Historia
El lenguaje de
programación AIML fue desarrollado por el Dr. Richard Wallace y la comunidad de
código abierto Alicebot entre los años 1995 y 2000. Con él se crearon las bases
del primer Alicebot, A.L.I.C.E, que ha ganado ahora el concurso Loebner
Prize Contest y también The most human o El más humano tres
veces, al igual de ser ganador en el Campeonato de Chatbot en 2004. Desde sus
comienzos en internet, gracias a que el lenguaje AIML y los programas Alicebot
son código-abierto, se han creado numerosos clones de Alicebot basados
en la implementación original del programa y de la base de conocimiento AIML.
El desarrollo de este lenguaje continua, y en el otoño de 2004 se ha creado una
nueva versión del conjunto ALICE AIML. La implementación más activa hoy en día
es pandorabots.com,
un hosting
de bots online y compañía de desarrollo que permite el alojamiento gratuito de
Alicebots programa Z.
Componentes
de AIML
AIML contiene
muchos elementos. Los más importantes están descritos a continuación:
·
Categorías: son las unidades
fundamentales de conocimiento. Una categoría consiste en al menos dos elementos
más, que son los componentes patrón o pattern y plantilla o template,
que normalmente se codifican en ese orden.
·
Patrones: los Alicebots se
describen como chatbot de comparación de patrones o pattern-matching.
Esto significa que el programa buscará patrones que el usuario haya introducido
y responderá de acuerdo a lo que se le haya preguntado.
·
Plantillas: si un patrón
coincide con una categoría, y si es ése el patrón que más concuerda, entonces a
la respuesta del chatbot se añade una plantilla específica de la categoría. Esta
plantilla puede contener otros componentes de AIML, que permiten personalizar dicha
respuesta.
AutoLISP
AutoLISP es un lenguaje de programación derivado del lenguaje Lisp. Es utilizado para
generar rutinas orientadas al uso específico de AutoCAD y sus derivados. Permite
desarrollar programas y funciones para el manejo de entidades del tipo gráfico.Los
programas hechos en Autolisp amplían los comandos y aplicaciones de AutoCAD, creando así una
solución óptima para cada problema en particular, desde el simple trazo de una
línea hasta el diseño de un plano o pieza, llegando a cálculos complejos,
convirtiéndose en gran ayuda para las aplicaciones de ingeniería.
Entre las aplicaciones más notables de
Autolisp se pueden citar:
·
Dibujo de figuras bidimensionales con características específicas.
·
Creación de objetos tridimensionales.
·
Generación de gráficas de funciones basándose en ecuaciones.
·
Cálculos de áreas y tablas de datos, combinación de comandos de dibujo
para realizar determinados tipos de tareas.
Historia
AutoLISP se derivó de una versión muy temprana
de XLISP, que fue creado por David Betz. El lenguaje fue introducido en AutoCAD
versión 2.18 en enero de 1986, y siguió mejorando en sucesivas versiones hasta
la etapa 13 en febrero de 1995. Después de eso, su desarrollo fue descuidado
por Autodesk en favor de los entornos de desarrollo más de moda como VBA , .NET y ObjectARX. Sin embargo, se ha
mantenido el idioma principal de AutoCAD para la personalización del usuario.
Vital-LISP, una versión mejorada
considerablemente de AutoLISP incluyendo una IDE, depurador y compilador, y el
soporte ActiveX, se ha desarrollado y vendido por tercera parte de
desarrolladores de Software. Vital LISP fue una conjunción del lenguaje
AutoLISP existente que agregó VBA -como el acceso al modelo de objetos de
AutoCAD, reactores (el control de eventos para los objetos de AutoCAD), general
ActiveX de apoyo, y algunos otras funciones generales de Lisp. Autodesk compró
este, cambió el nombre de Visual LISP, y brevemente se vende como un
complemento para AutoCAD 14 lanzado en mayo de 1997. Fue incorporado en AutoCAD
2000 lanzado en marzo de 1999, en sustitución de AutoLISP. Desde entonces,
Autodesk ha elegido para poner fin a importantes mejoras en Visual LISP en
favor de centrarse más esfuerzo en VBA y .NET y C++. Hay miles de utilidades y
aplicaciones que se han desarrollado utilizando Visual LISP o AutoLISP
(extensiones de archivos .LSP, .FAS y .VLX).
BC
BC es un lenguaje de
programación de cálculo numérico con precisión arbitraria, con una sintaxis
similar a la del lenguaje de
programación C.El lenguaje y su intérprete
son una herramienta estandarizada de los sistemas UNIX.
El intérprete de bc puede ser usado de forma interactiva, escribiendo expresiones como
(1 + 3) * 2 que son evaluadas y su valor escrito en la salida estándar (8 en el
ejemplo anterior).Hay actualmente dos dialectos
principales: el rigurosamente definido POSIX bc y un descendiente directo suyo,
GNU
bc, que incorpora numerosas extensiones. BC permite la definición de funciones
matemáticas. Además las implementaciones de bc incorporan una biblioteca matemática con funciones
predefinidas (y estandarizadas) tales como coseno o función de Bessel.También posee
estructuras que permiten la programación
estructurada tales como bucles o decisiones condicionales.
BCLP
El lenguaje BCLP es un lenguaje de
programación desarrollado por Martin Richards, del cual deriva el lenguaje B.
De este último deriva el famoso lenguaje C.
Este lenguaje supuso el más temprano desarrollo de un lenguaje importante para
el software
portátil.
B
B es el nombre de un lenguaje de
programación desarrollado en los Bell Labs,
predecesor del lenguaje de
programación C. Fue mayoritariamente un trabajo de Kenneth L. Thompson con contribuciones de Dennis M. Ritchie publicado por primera
vez en el año 1969
Historia
B fue esencialmente una simplificación del lenguaje BCPL,
eliminando cualquier componente que Thompson considerase prescindible de forma
que cupiese en la memoria de las minicomputadoras
de la época. El lenguaje también incluyó algunos cambios de acuerdo con las
preferencias de Thompson (la mayoría para reducir el número de caracteres de un
programa típico).
Nombre
B fue enormemente
influido por BCPL, y su nombre fue probablemente una contracción de
"BCPL". Sin embargo es posible que su nombre se hubiera basado en el
lenguaje de programación Bon, un lenguaje más antiguo y no relacionado con B,
diseñado por Thompson para su uso en MULTICS.
C
C es un lenguaje de
programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolución del
anterior lenguaje B, a su
vez basado en BCPL.
Al igual que B, es un lenguaje orientado a la implementación de Sistemas Operativos, concretamente Unix.
C es apreciado por la eficiencia del código que produce y es el lenguaje de
programación más popular para crear software de sistemas, aunque también se utiliza
para crear aplicaciones. Se trata de un lenguaje débilmente tipificado de medio nivel
pero con muchas características de bajo nivel.
Dispone de las estructuras típicas de los lenguajes de alto
nivel pero, a su vez, dispone de construcciones del lenguaje que
permiten un control a muy bajo nivel.
Los compiladores suelen ofrecer extensiones al lenguaje que posibilitan mezclar
código en ensamblador
con código C o acceder directamente a memoria o dispositivos
periféricos.La primera estandarización del lenguaje C fue en ANSI,
con el estándar X3.159-1989. El lenguaje que define este estándar fue conocido
vulgarmente como ANSI C. Posteriormente, en 1990, fue
ratificado como estándar ISO (ISO/IEC 9899:1990). La adopción de
este estándar es muy amplia por lo que, si los programas creados lo siguen, el
código es portátil entre plataformas y/o arquitecturas.
Filosofía
Uno de los
objetivos de diseño del lenguaje C es que sólo sean necesarias unas pocas
instrucciones en lenguaje máquina
para traducir cada elemento del lenguaje, sin que haga falta un soporte intenso
en tiempo de ejecución. Es muy posible escribir C a bajo nivel de abstracción;
de hecho, C se usó como intermediario entre diferentes lenguajes.
En parte a causa
de ser de relativamente bajo nivel y de tener un modesto conjunto de
características, se pueden desarrollar compiladores de C fácilmente. En
consecuencia, el lenguaje C está disponible en un amplio abanico de plataformas
(seguramente más que cualquier otro lenguaje). Además, a pesar de su naturaleza
de bajo nivel, el lenguaje se desarrolló para incentivar la programación
independiente de la máquina. Un programa escrito cumpliendo los estándares e
intentando que sea portátil puede compilarse en muchos computadores. C se
desarrolló originalmente (conjuntamente con el sistema operativo Unix,
con el que ha estado asociado mucho tiempo) por programadores para
programadores. Sin embargo, ha alcanzado una popularidad enorme, y se ha usado
en contextos muy alejados de la programación de sistemas, para la que se diseñó
originalmente.
Propiedades
Un núcleo del
lenguaje simple, con funcionalidades añadidas importantes, como funciones
matemáticas y de manejo de archivos, proporcionadas por bibliotecas.Es
un lenguaje muy flexible que permite programar con múltiples estilos. Uno de
los más empleados es el estructurado "no llevado al extremo"
(permitiendo ciertas licencias de ruptura).
Un sistema de
tipos que impide operaciones sin sentido.Usa un lenguaje de preprocesado,
el preprocesador de C, para tareas como
definir macros
e incluir múltiples archivos de código fuente.Por
defecto, el paso de parámetros
a una función se realiza por valor. El paso por referencia se consigue pasando
explícitamente a las funciones las direcciones de memoria de dichos
parámetros.Punteros a funciones y variables estáticas, que permiten una forma
rudimentaria de encapsulado y polimorfismo.
Tipos de datos
agregados (struct) que permiten que datos relacionados (como un empleado, que
tiene un id, un nombre y un salario) se combinen y se manipulen como un todo
(en una única variable "empleado").
Carencias
Recolección de
basura nativa, sin embargo se encuentran a tal efecto bibliotecas
como la "libgc" desarrollada por Sun Microsystems, o el Recolector de basura
de Boehm.Soporte para programación
orientada a objetos, aunque la implementación original de C++ fue un
preprocesador que traducía código fuente de C++ a C.
Funciones
anidadas, aunque GCC
tiene esta característica como extensión.Polimorfismo
en tiempo de código en forma de sobrecarga,
sobrecarga de operadores y sólo dispone de un soporte rudimentario para la programación
genérica.Soporte nativo para programación multihilo
y redes de computadores.Aunque la lista de
las características útiles de las que carece C es larga, este factor ha sido
importante para su aceptación, porque escribir rápidamente nuevos compiladores
para nuevas plataformas, mantiene lo que realmente hace el programa bajo el
control directo del programador, y permite implementar la solución más natural
para cada plataforma. Ésta es la causa de que a menudo C sea más eficiente que
otros lenguajes. Típicamente, sólo la programación cuidadosa en lenguaje ensamblador produce un código más
rápido, pues da control total sobre la máquina, aunque los avances en los
compiladores de C y la complejidad creciente de los microprocesadores modernos han reducido
gradualmente esta diferencia.
En algunos casos,
una característica inexistente puede aproximarse. Por ejemplo, la
implementación original de C++ consistía en un preprocesador que traducía
código fuente C++ a C. La mayoría de las funciones orientadas a objetos incluyen
un puntero especial, que normalmente recibe el nombre "this", que se
refiere al objeto al que pertenece la función. Mediante el paso de este puntero
como un argumento de función, esta funcionalidad puede desempeñarse en C.
Historia
Desarrollo inicial
El desarrollo
inicial de C se llevó a cabo en los Laboratorios Bell
de AT&T
entre 1969 y 1973; según Ritchie, el periodo más creativo tuvo lugar en 1972.
Se le dio el nombre "C" porque muchas de sus características fueron
tomadas de un lenguaje anterior llamado "B". Hay
muchas leyendas acerca del origen de C y el sistema operativo con el que está
íntimamente relacionado, Unix. Algunas de ellas son:
El desarrollo de C
fue el resultado del deseo de los programadores de jugar con Space Travel. Habían estado jugando en el mainframe
de su compañía, pero debido a su poca capacidad de proceso y al tener que
soportar 100 usuarios, Thompson y Ritchie no tenían suficiente control sobre la
nave para evitar colisiones con los asteroides. Por ese motivo decidieron
portar el juego a un PDP-7 de la oficina que no se utilizaba;
pero esa máquina no tenía sistema operativo,
así que decidieron escribir uno. Finalmente decidieron portar el sistema
operativo del PDP-11 que había en su oficina, pero era
muy costoso, pues todo el código estaba escrito en lenguaje ensamblador.
Entonces decidieron usar un lenguaje de alto nivel y portátil para que el
sistema operativo se pudiera portar fácilmente de un ordenador a otro. Consideraron
usar B, pero carecía de las funcionalidades necesarias para aprovechar algunas
características avanzadas del PDP-11. Entonces empezaron a crear un nuevo
lenguaje, C.
La justificación
para obtener el ordenador original que se usó para desarrollar Unix fue crear
un sistema que automatizase el archivo de patentes. La versión original de Unix
se desarrolló en lenguaje ensamblador. Más tarde, el lenguaje C se desarrolló
para poder reescribir el sistema operativo.En 1973, el lenguaje C se había
vuelto tan potente que la mayor parte del kernel
Unix, originalmente escrito en el lenguaje ensamblador PDP-11/20, fue reescrita
en C. Éste fue uno de los primeros núcleos de sistema operativo implementados
en un lenguaje distinto al ensamblador. (Algunos casos anteriores son el
sistema Multics,
escrito en PL/I,
y Master Control Program para el B5000 de Burroughs, escrito en ALGOL
en 1961).
El C de Kernighan
y Ritchie
En 1978, Ritchie y
Brian Kernighan publicaron la primera
edición de El
lenguaje de programación C, también conocido como La biblia
de C. Este libro fue durante años la especificación informal del lenguaje. El
lenguaje descrito en este libro recibe habitualmente el nombre de "el C de
Kernighan y Ritchie" o simplemente "K&R C" (La segunda
edición del libro cubre el estándar ANSI C,
descrito más abajo.)
Kernighan y
Ritchie introdujeron las siguientes características al lenguaje:
·
El tipo de datos struct.
·
El tipo de datos long int.
·
El tipo de datos unsigned int.
·
Los operadores =+ y =- fueron sustituidos por += y
-= para eliminar la ambigüedad sintáctica de expresiones como i=-10, que se
podría interpretar bien como i =- 10 o bien como i = -10.
El C de Kernighan
y Ritchie es el subconjunto más básico del lenguaje que un compilador debe de
soportar. Durante muchos años, incluso tras la introducción del ANSI C, fue
considerado "el mínimo común denominador" en el que los programadores
debían programar cuando deseaban que sus programas fueran transportables, pues
no todos los compiladores soportaban completamente ANSI, y el código
razonablemente bien escrito en K&R C es también código ANSI C válido. En
estas primeras versiones de C, las únicas funciones que necesitaban ser
declaradas si se usaban antes de la definición de la función eran las que
retornaban valores no enteros. Es decir, se presuponía que una función que se
usaba sin declaración previa (prototipo) devolvería un entero.
Ceylon
Ceylon es un lenguaje de
programaciónorientado a objetos,
desarrollado por Red Hat. El lenguaje en sí mismo toma mucha
de su sintaxis de Lenguaje
de programación Java. Gavin escribe en su blog que el Lenguaje Java
ha quedado un poco viejo; por lo tanto el diseño un lenguaje llamado Ceylon que
tiene como principal objetivo actualizar el lenguaje Java.
Los objetivos de
Ceylon incluyen:
·
Ser fácil de aprender tanto para desarrolladores
Java como C#
·
Eliminar la verbosidad de Java pero manteniendo la
legibilidad
·
Mejorar el tipado estático de Java
·
Proveer una expresión declarativa para eliminar
dependencias con xml
·
Apoyar y fomentar un estilo de programación más
funcional.
·
Proveer soporte para meta-programación
·
Proveer construcción modular.
Cg
Cg o C for Graphics es un
lenguaje de alto nivel desarrollado por Nvidia en
colaboración con Microsoft para la programación de vertex
y pixel shaders. Es similar al lenguaje de MicrosoftHLSL.
El lenguaje está
basado en lenguaje de
programación C y comparte varias de sus características aunque
existen diferencias notables y elementos añadidos para adaptarlos a cuestiones
concretas y especiales de la programación de las GPU (Graphics Processing
Unit o Unidad de Procesamiento de Gráfico).Este lenguaje fue
diseñado específicamente para las acelaradoras y API
gráficas, no pretende ser utilizado como lenguaje de propósito general. Por el
contrario, el lenguaje CUDA (también orientado a programación de
GPU) si puede ser utilizado para aplicaciones de propósito general.
Descripción
general
En un primer
momento, las aceleradoras se programaban en bajo nivel, utilizando directamente
el repertorio de
instrucciones de los procesadores de GPU. Cg surge como
alternativa para facilitar la labor al programador. El lenguaje suele consistir
de dos tipos de programas completamente diferentes que interactúan entre sí. El
primero es un programa de manipulación de vértices (modificar el modelo
tridimensional) directamente desde la aceleradora, sin gastar recursos de la CPU
principal. Por otra parte, la función del segundo tipo de programa es
especificar el color de cada píxel en función de múltiples factores. Algunas
de las ventajas de usar Cg son:
·
Un lenguaje de alto nivel es más fácil de
programar, aprender, leer y mantener
·
Es fácil para depurar errores.
·
Puede funcionar en un amplio rango de hardware y
plataformas (Es menos dependiente del hardware concreto y sus versiones que el
lenguaje assembler)
El compilador de
Cg puede optimizar el código en función de la versión de hardware concreta y
otras características disponibles en el momento de ejecutar el programa.
Perfiles
En el lenguaje
utiliza la noción de perfiles (Cg Profiles) para facilitar la portabilidad.
Cada uno de ellos establece capacidades mínimas y requisitos. De esta forma, un
programador puede desarrollar un programa (o varias versiones) con la seguridad
de que se ejecutará correctamente en aquellos sistemas que acepten ese perfil. El
establecimiento de los perfiles es una forma de asegurar la compatibilidad sin
tener que implementar estrategias más complejas como la Compatibilidad hacia
atrás.Los Tipos de datos, operadores, funciones, estructuras, entre
otros varían de acuerdo al perfil que se en el que se trabaje.
Tipos
de datos
C for Graphics
tiene seis tipos básicos de datos, algunos específicos para la programación de
las GPU:
·
float - número de 32bit en coma flotante
·
half - número de 16bit en coma flotante
·
int - número de 32bit entero
·
fixed - número de 12bit en coma fija
·
bool - valor booleano
·
sampler* - un objeto de textura
También existen
algunos tipos compuestos como vectores de 3 floats y matrices como 4x4 float.
Chip-8
CHIP-8 es un lenguaje de
programación interpretado, desarrollado por Joseph Weisbecker. Fue
inicialmente usado en los microcomputadores
de 8-bit COSMAC VIP y Telmac 1800 a mediados de 1970. Los programas
de CHIP-8 corren sobre una máquina virtual
de CHIP-8. Esto se hizo así para que los video juegos
fueran más fáciles de programar en otros computadores. Aproximadamente 20 años
después el CHIP-8 reapareció, pero esta vez, aparecieron diversos intérpretes
para algunos modelos de calculadoras
gráficas. Como era de esperar, desde finales de 1980 en adelante,
esos dispositivos de mano tienen mucho más poder de cálculo que los
microcomputadores de mediados de 1970.
Aplicaciones
en CHIP-8
Hay un número no
pequeño de video juegos clásicos portados a CHIP-8, como Pong,
Space Invaders, Tetris
y Pac-Man.
También hay disponible un generador aleatorio de laberintos. Esos programas
están en dominio público y pueden ser encontrador
fácilmente en Internet.
El
CHIP-8 hoy en día:
Hay una
implementación de CHIP-8 para casi todas las plataformas imaginables, así como
algunas herramientas de desarrollo. A pesar de eso, solo hay un pequeño número
de juegos para CHIP-8.
CHIP-8 tiene un
descendiente llamado SCHIP
(Super Chip), presentado por Erik Bryntse. En 1990, un interprete de CHIP-8
llamado CHIP-48 fue hecho para la calculadora gráficaHP-48
de esta forma los juegos podían ser programados más fácilmente. Estas
extensiones para CHIP-8 fueron conocidas como SCHIP. Este nuevo interprete
cuenta con una mayor resolución y varios opcodes adicionales que permiten
programarlo más fácilmente. Si no fuera por el desarrollo del intérprete de
CHIP-48, el CHIP-8 no sería conocido en nuestros días.
ChucK
Chuck es un nuevo lenguaje de programación orientado a sonido, que permite
generar, grabar, sintetizar sonido en tiempo real. Creado por Ge Wang y Perry
Cook, en la Universidad de Princeton. Interactivo, es posible añadir y
modificar, el código de programa, mientras chuck está aun en funcionamiento.
Entre sus características más relevantes se puede encontrar, una sintáxis
peculiar, en la que 'to chuck' (arrojar/conectar) se hace especialmente
notable. Además puesto que su mayor funcionalidad es el tiempo real, la
sincronización y el control del sonido digital al nivel de las muestras, están
explícitamente expresadas en el lenguaje. Funciona en Mac OsX, GNU/Linux
y Ms-Windows.
En el segundo, puede compilarse para correr bajo jack, lo cual permite sincronizar
fácilmente chuck con otros programas.
Clipper
Clipper es un lenguaje de
programación procedural e imperativo creado en 1985
por Nantucket Corporation y vendido posteriormente a Computer Associates, la que lo
comercializó como CA-Clipper. En un principio Clipper se creó como un compilador
para el sistema gestor intérprete
de bases de datos dBase III (de hecho las versiones
estacionales de Nantucket incluían una etiqueta que lo indicaba así), pero
con el tiempo el producto evolucionó y maduró, convirtiéndose en un lenguaje
compilado más poderoso que el original, no sólo por sus propias implementaciones
sino también por las ampliaciones desarrolladas por terceros en C, Ensamblador y Pascal,
de los que fue heredando características. Esto lo convirtió en la herramienta
líder de desarrollo de aplicaciones de bases de datos relacionales bajo sistema
operativo MS-DOS,
sobre todo programas de gestión, contabilidad y facturación (SAGE-SP,
líder del mercado español, lo usa para ContaPlus
y FacturaPlus), agendas comerciales y programas de tarificación (aproximadamente
el 80% de las compañías de seguros de España lo
utilizaron en los programas de sus agentes).
Características
A diferencia de
otros lenguajes xBase, Clipper nunca contó con un modo intérprete,
similar al de dBase. Sus utilidades para manejo de base de datos, tales como la de creación
de tablas (DBU), se entregaban con el código fuente escrito en Clipper e
incluido, el usuario podía adaptarlas a sus necesidades si quería. Se aportaban
también muchas rutinas escritas en C y Ensamblador a las que el usuario podía
acudir, incluso ampliar y crear bibliotecas de pre-enlace completas.
Clipper trabaja en
modo compilador puro generando un código objeto
binario; el paquete proveía también un enlazador (RTLINK o DLINK) que con el
módulo objeto y las librerías de pre-enlace generaba un módulo ejecutable
directo. Esto último le otorgaba a las aplicaciones Clipper una velocidad que
otros manejadores de bases de datos no poseían, y, como desventaja, la
necesidad de recompilar y enlazar nuevamente cada vez que se corregía algún
error en el código fuente (la depuración
era lenta).
Posee
características que fueron muy atractivas para su época y su entorno de trabajo
(DOS), tales como: manejo propio de memoria virtual
(RAM en disco); manejo de memoria
extendida, las aplicaciones podían superar la barrera de los 640Kb de RAM
impuesta por MS-DOS; rutinas y librerías pueden
cargarse sólo cuando son necesarias y se descargan de RAM cuando ya no hacen
falta (enlace y overlays dinámicos); la cantidad de registros por tablas estaba
sólo limitada a la capacidad del disco; gran robustez en las aplicaciones,
particularmente en las diseñadas para cliente-servidor (red LAN), etc. Si bien
no poseía prácticamente funciones de cálculo tales como las trigonométricas,
que otros lenguajes como FoxPro sí incorporaron; el usuario las
podía fácilmente elaborar en C y
utilizarlas como cualquier otra función de librería propia del paquete, ventaja
que devenía de que el compilador Clipper y muchas de sus librerías estaban casi
completamente desarrolladas en C.
Su forma,
administración, almacenamiento e intercambio de pantallas era sencillo,
efectivo y veloz; lo que otorgaba buen dinamismo a las aplicaciones
desarrolladas con Clipper. El lenguaje en sí era poderoso, contando con una
gran cantidad de sentencias, funciones, administración de memoria y variables
que permitían al programador desarrollos muy flexibles y eficientes; en forma
razonablemente rápida. También el paquete incluía un completo "manual en
línea navegable", que se cargaba en memoria RAM, a requerimiento del
programador, y se accedía por la sola presión de un par de teclas.En su larga
época dorada, ha sido, probablemente, el lenguaje gestor de bases de datos
relacionales de "bajo y mediano porte" más utilizado en el mundo. Aun
hoy existen muchos desarrolladores Clipper (algunos agrupados comunidades y con
foros en Internet), que elaboran aplicaciones, incluso estilo Windows, usando
sus propias librerías gráficas escritas en C y Ensamblador.
Las
primeras versiones
Las primeras
versiones se denominan versiones estacionales por hacer referencia a una
estación del año en sus nombres oficiales. Todas ellas se nominaban como compiladores dBase. Estas fueron:
·
Nantucket Clipper Winter'84 - lanzada el 25
de mayo de 1985
·
Nantucket Clipper Summer'85 - lanzada en 1985
·
Nantucket Clipper Winter'85 - lanzada el 29 de enero de 1986
·
Nantucket Clipper Autumn'86 - lanzada el 31 de octubre de 1986
·
Nantucket Clipper Summer'87 - lanzada el 21 de diciembre de 1987
·
Gatsoft Clipper Summer'88 - lanzada el 16 de marzo de 1988
CLU
CLU es un lenguaje de
programación creado por el instituto de tecnología de Massachusetts
(MIT)
por Barbara Liskov y sus estudiantes entre 1974
y 1975.
Usaba constructores para los tipos de datos abstractos que se incluyeron en el
código, un paso adelante en la programación
orientada a objetos (POO). No obstante, muchas otras de las
características de POO estaban incompletas o necesitaban un mayor desarrollo.
Por otra parte, el lenguaje se obstaculiza por una sintaxis que en ocasiones
puede resultar engorrosa. CLU y Alphard parecen ser ambos lenguajes orientados
a objetos completos, sin serlo en realidad.La sintaxis de CLU esta basada en ALGOL,
un punto de partida para el diseño de la mayoría de nuevos lenguajes. La
incorporación más importante es el concepto de cluster, CLU's type
extension system and the root of the language's name (CLUster), que viene a
significar, "tipo de extensión del sistema del CLU y de la raíz de los
nombres de los lenguajes". Los clusters corresponden generalmente al
concepto de "objeto" en un lenguaje orientado a objetos, y tienen una
sintaxis muy similar.
Mientras que los
clusters ofrecieron un sistema entonces-avanzado para los programas de
estructuración, CLU no ofreció ninguna clase de estructura para los clusters.
Los nombres de los clusters son globales, y no se proporcionó ningún mecanismo
a los clusters para agruparlos o permitir que sean creados
"localmente" dentro de otros clusters. Este problema no se da solo en
CLU, ya que sorprendentemente muchos lenguajes han carecido de esta
característica - el problema se encuentra centralizado en ALGOL,
de dar alcance a las variables. Parece ser, que dar alcance a los nombres del
cluster/objeto sería una expansión obvia.CLU no realiza conversiones de tipo
implícito. En un cluster, las conversiones tipo explícito "up" y
"down" cambian entre el tipo abstracto
y la representación. Hay un tipo universal "any", y un procedimiento
force[] para comprobar que un objeto es de un tipo correcto. Los objetos pueden
ser mutable o inmutables, este ultimo "tipos base" por ejemplo
números enteros.
Otras
características
Otra
característica importante del tipo sistema de CLU son los iteradores
(patrones de diseño), que devuelven objetos de un conjunto, uno detrás de otro.
Los iteradores son como "cajas negras" que ofrecen una interfaz de
programación de aplicacionesAPI
donde no importaba el tipo de datos que estuvieran usando. Así, el iterador
para un conjunto de números complejos
sería idéntico que para un array de números enteros. Los iteradores son ahora
una característica común de la mayoría de los lenguajes modernos.
Una característica
distintiva final en CLU es la asignación múltiple, donde puede aparecer más de
una variable en el lado izquierdo de un operador de asignación. Por ejemplo, escribiendo
x,
y = y, x
los valores de intercambio de x
y de Y
. De la
misma forma, las funciones podrían retornar varios valores, como x,
y, z = f (t)
.Todos los objetos en un programa de CLU se
declaran al principio, siendo así, la reserva de memoria automática.
COBOL
El lenguajeCOBOL (acrónimo
de COmmon Business-Oriented Language,
Lenguaje Común Orientado a Negocios) fue creado en el año 1959 con el
objetivo de crear un lenguaje de
programación universal que pudiera ser usado en cualquier ordenador,
ya que en los años 1960 existían numerosos modelos de
ordenadores incompatibles entre sí, y que estuviera orientado principalmente a
los negocios, es decir, a la llamada informática de
gestión.
Historia
En la creación de
este lenguaje participó la comisión CODASYL,
compuesta por fabricantes de ordenadores, usuarios y el Departamento
de Defensa de Estados Unidos en mayo de 1959. La definición del
lenguaje se completó en poco más de seis meses, siendo aprobada por la comisión
en enero de 1959.
El lenguaje COBOL fue diseñado inspirándose en el lenguaje Flow-Matic
de Grace Hopper y el IBM COMTRAN de Bob
Bemer, ya que ambos formaron parte de la comisión.
Gracias a la ayuda
de los usuarios COBOL evolucionó rápidamente y fue revisado de 1961
a 1965
para añadirle nuevas funcionalidades. En 1968 salió la primera
versión ANSI
del lenguaje, siendo revisada posteriormente en 1974 (COBOL ANS-74), 1985
(COBOL ANS-85, ampliado en 1989 con funciones matemáticas, finalizando el
estándar actual más usado, conocido como COBOL-ANSI), y en 2002
(COBOL ANS-2002). Desde el año 2007 se viene preparando una nueva
revisión del lenguaje. Además, existe una versión conocida como COBOL
ENTERPRISE, actualizada regularmente y lanzada en 1991, usada generalmente
en sistemas Host. En el 2011 se actualizó con Visual COBOL.
Características
COBOL fue dotado
de unas excelentes capacidades de autodocumentación Una buena gestión de
archivos y una excelente gestión de los tipos de datos para la época, a través
de la conocida sentencia PICTURE para la definición de campos estructurados.
Para evitar errores de redondeo en los cálculos que se producen al convertir los
números a binario y que son inaceptables en temas comerciales, COBOL puede
emplear y emplea por defecto números en base diez.
Para facilitar la creación de programas en COBOL, la sintaxis del mismo fue
creada de forma que fuese parecida al idioma inglés, evitando el uso de
símbolos que se impusieron en lenguajes de programación posteriores.Pese a
esto, a comienzos de los ochenta se fue quedando anticuado respecto a los
nuevos paradigmas de
programación y a los lenguajes que los implementaban. En la revisión
de 1985 se solucionó, incorporando a COBOL variables locales, recursividad,
reserva de memoria dinámica y programación estructurada. En la revisión de 2002
se le añadió orientación a objetos, aunque desde la revisión de 1974 se podía
crear un entorno de trabajo similar a la orientación a objetos, y un método de
generación de pantallas gráficas estandarizado.
Antes de la
inclusión de las nuevas características en el estándar oficial, muchos
fabricantes de compiladores las añadían de forma no estándar. En la actualidad
este proceso se está viendo con la integración de COBOL con Internet. Existen
varios compiladores que permiten emplear COBOL como lenguaje de scripting y de servicio web. También existen compiladores
que permiten generar código COBOL para la plataforma .NET
y EJB.
COMAL
COMAL (COMmon Algorithmic Language) es un lenguaje de
programación desarrollado en Dinamarca
por Benedict Løfstedt y Børge Christensen en 1973.COMAL fue creado como
una mezcla de los lenguajes BASIC y Pascal,
al objeto de introducir fácilmente a los estudiantes en el paradigma de la programación
estructurada.
COMAL está
disponible para plataformas de 8, 16 y 32 bits:
COMIT
El COMIT es el primer lenguaje de
programación para la manipulación de cadenas y de reconocimiento de
patrones. Se basa en la traducción automática de máquina, donde se pueden
sustituir cadenas de símbolos por otras cadenas. Fue desarrollado por Yngve del
MIT.
Cada enunciado de programa es muy parecido a una producción libre de contexto y
representa el conjunto de sustituciones que se pueden hacer si se encuentra esa
cadena en los datos.Como Yngve mantuvo patentado su código, un grupo de los Laboratorios Bell de AT&T
decidió desarrollar su propio lenguaje, lo cual dio por resultado el SNOBOL.
R
R es un lenguaje y entorno de programación para análisis estadístico
y gráfico.Se trata de un proyecto de software libre,
resultado de la implementación GNU del premiado lenguaje S. R y S-Plus
-versión comercial de S- son, probablemente, los dos lenguajes más utilizados
en investigación por la comunidad estadística, siendo además muy populares en
el campo de la investigación biomédica, la bioinformática y las matemáticas financieras.
A esto contribuye la posibilidad de cargar diferentes bibliotecas o paquetes
con finalidades específicas de cálculo o gráfico. R se distribuye bajo la
licencia GNU
GPL y está disponible para los sistemas operativosWindows, Macintosh, Unix y GNU/Linux.
Historia
Fue desarrollado
inicialmente por Robert Gentleman y Ross Ihaka del Departamento de Estadística
de la Universidad de
Auckland en 1993.1 Su desarrollo actual es responsabilidad
del R Development Core Team.
A continuación se
enumeran algunos hitos en el desarrollo de R:
·
Versión 0.16: Es la última versión alfa
desarrollada esencialmente por Ihaka y Gentleman, que incluye gran parte de las
características descritas en el "White Book". La lista de correo
comenzó su andadura el 1 de abril de 1997.
·
Versión 0.49 del 23 de abril de 1997: Es la versión
más antigua de la que se conserva el código (que todavía compila en algunas
plataformas UNIX).
En esta fecha arrancó también CRAN con tres espejos que albergaban 12 paquetes.
Poco después aparecieron las versiones alfa para Windows
y Mac
OS.
·
Versión 0.60 del 5 de diciembre de 1997: R se
integra oficialmente en el Proyecto GNU.
El código se versiona a través de CVS.
·
Versión 1.0.0 del 29 de febrero de 2000: Los
desarrolladores lo consideran suficientemente estable para su uso en
producción.2
·
Versión 1.4.0: Se introducen los métodos S4 y
aparece la primera versión para Mac OS X.
·
Versión 2.0.0: Introduce el lazy loading, que
permite una carga rápida de datos con un coste de memoria mínimo.
·
Versión 2.1.0: Aparece el soporte para UTF-8
y comienzan los esfuerzos de internacionalización
para distintos idiomas.
·
Versión 2.9.0: El paquete 'Matrix' se incluye en la
distribución básica de R.
Características
R proporciona un
amplio abanico de herramientas estadísticas (modelos lineales y no lineales, tests estadísticos,
análisis de series temporales,
algoritmos de clasificación y agrupamiento,
etc.) y gráficas.Al igual que S, se trata de un lenguaje de programación, lo
que permite que los usuarios lo extiendan definiendo sus propias funciones. De
hecho, gran parte de las funciones de R están escritas en el mismo R, aunque
para algoritmos computacionalmente exigentes es posible desarrollar bibliotecas
en C, C++
o Fortran
que se cargan dinámicamente. Los usuarios más avanzados pueden también
manipular los objetos de R directamente desde código desarrollado en C. R
también puede extenderse a través de paquetes desarrollados por su comunidad de
usuarios.
R hereda de S su orientación a
objetos. La tarea de extender R se ve facilitada por su permisiva
política de lexical scoping.Además, R puede integrarse con distintas bases de datos y existen bibliotecas que
facilitan su utilización desde lenguajes de programación interpretados como Perl
y Python.Otra
de las características de R es su capacidad gráfica, que permite generar
gráficos con alta calidad. R posee su propio formato para la documentación
basado en LaTeX.
R también puede
usarse como herramienta de cálculo numérico,
campo en el que puede ser tan eficaz como otras herramientas específicas tales
como GNU Octave y su versión comercial, MATLAB.4 Se ha desarrollado una interfaz,
RWeka5 para interactuar con Weka
que permite leer y escribir ficheros en el formato arff y enriquecer R
con los algoritmos de minería de datos
de dicha plataforma.
Curry
Curryes un lenguaje experimental de programación en lógica funcional, basado
en el lenguaje Haskell, que combina elementos de programación
funcional y programación lógica.
El programa es expresado a través de un conjunto de funciones expresados bajo
ecuaciones o reglas.
Cython
Cython es un lenguaje de
programación para simplificar la escritura de módulos de extensión
para Python en C y C++. Siendo estrictos, la sintaxis de Cython es la misma de
Python pero con algunos agregados:
*Se pueden llamar
funciones en C, o funciones/métodos de C++, directamente desde el código en
Cython.
*Es posible usar
tipos estáticos en las variables (enteros, flotantes, o cualquier tipo de
dato).
Cython compila a
código en C o C++ desde Python, y el resultado puede ser usado desde Python
como un "Modulo de extensión", o como una aplicación embebida en el
intérprete CPython.Cython
es un proyecto derivado de Pyrex, pero implementa más funcionalidades
y optimizaciones que este.1
Ventajas
La ventaja
esencial de este enfoque, es que al entremezclar perfectamente código Python/C
(es decir, C usando <python.h>) es que el código Python existente se
puede ajustar a casi la velocidad de C con sólo añadir unos pocos tipos
estáticos a las declaraciones y haciendo algunas adaptaciones en los bucles
críticos -sin necesidad de una interfaz complicada o muy invasiva del código.
La velocidad de codificación y la legibilidad del código sigue siendo bastante
Pythonica. Debido a reducción del consumo general en las estructuras de control
(especialmente los bucles), las optimizaciones optimistas y la (limitada)
inferencia de tipos, el código Python compilado con Cython normalmente se
ejecuta más rápido que en el intérprete CPython
2.6.x, aunque las mejoras absolutas dependen en gran medida el código. Con las declaraciones
de tipos estáticos, la aceleración típica en cálculos numéricos/matriciales es
de 100x-1000x2 En comparación a la típica
optimización con Psyco (Python JIT compiler) qué es entre
4x-100x.
Dart
Dart (originalmente llamado Dash)
es un lenguaje de
programación desarrollado por Google.
Fue revelado en la Conferencia en Aarhus, Dinamarca, el 12
Octubre de 2011. El objetivo de Dart no es reemplazar JavaScript
como el principal lenguaje de programación web en los navegadores web, sino ofrecer una
alternativa más moderna. El espíritu del lenguaje puede verse reflejado en las
declaraciones de Lars Bak, ingeniero de software de Google, que define a Dart
como un “lenguaje estructurado pero flexible para programación Web”.
La razón para un nuevo lenguaje
Dart está pensado
para resolver los problemas de JavaScript y ofrecer unos mejores resultados,
pese a que en su presentación no se hicieron referencias explícitas a
JavaScript. Tiene la capacidad de ser una herramienta sencilla para proyectos
más grandes y ofrece una mejor seguridad. Los ingenieros de Google
desarrollaron desde 2011 un programa desde Internet para el desarrollo de
aplicaciones llamado Brightly, que quizás podrá ser la primera aplicación
creada con Dart. Google ofrecerá una herramienta para compilar Dart a ECMAScript
3 en el instante, para ser compatible con los navegadores que no utilicen Dart.
Google también integrará una máquina virtual
nativa en Google Chrome y facilitará a sus
competidores lo mismo para sus navegadores. La MV de Dart y el Compilador de
Dart estarán disponibles a finales de 2011.
Data Language/Interface
Data Language/Interface (abreviado DL/1 o DL/I) es el
lenguaje de programación para acceder a las bases de datos de IMSy a su
sistema de comunicación. Se implementa desde cualquier lenguaje existente
realizando llamadas a un programa puente llamado DFSLI000. Este software
contiene puntos de entrada para gestionar varios lenguajes de programación, por
ejemplo, para llamar a PLITODLI
desde un programa PL/1 o CBLTDLI desde un programa COBOL. El programa DFSLI00
se enlaza desde el programa real, pasa la información a IMS y posteriormente
devuelve datos y un código de retorno.En cualquier base de datos IMS full-function,
el elemento más pequeño que se puede consultar es el segmento. Cada segmento se
compone de campos, donde normalmente uno de ellos será un campo clave. Los
segmentos en la base de datos están organizados de forma jerárquica, al
segmento del nivel más alto se denomina segmento raíz. Existen restricciones en
cuanto al número de segmentos distintos: un máximo de 255 segmentos diferentes
en 15 niveles. Sin embargo, no hay ningún limite en el número de ocurrencias de
cada tipo de segmento, más allá de los limites físicos del espacio de
almacenamiento.
La estructura de
la base de datos se presenta a la aplicación mediante PCB (Bloque de Control de
Programa, o Program Control Block), este es uno de los parámetros que se pasan
al DFSLI000. Además de PCB para acceso a bases de datos, existes PCB para mensajería y acceso a bases de datos en
ficheros secuenciales.
DRAKON es un lenguaje de programación algorítmico visual
ideado para el proyecto espacial soviético del transbordador Buran. Su desarrollo,
iniciado en 1986, fue dirigido por Vladimir Parondzhanov. El objetivo era
reemplazar los varios lenguajes especializados, como PROL2, DIPOL y LAKS usados
hasta entonces en el proyecto Buran, por un único sistema general. El trabajo
finalizó en 1998 (5 años después de que el proyecto Buran fuera oficialmente
cancelado), con el desarrollo de un sistema de programación llamado "Grafit-Floks".
Dylan
Dylan es un lenguaje de
programación funciónal y orientado a objetos. Fue creado a
principios de los años 1990 por iniciativa de Apple Computer.Dylan es, en esencia, una
versión depurada y simplificada de CLOS, un sistema de programación orientado a objetos desarrollado en Common
Lisp. En Dylan, la mayoría de las entidades (incluyendo los tipos de
datos primitivos, métodos y clases) son objetos de “primera clase”. Los
programas pueden ser escritos desde una forma fuertemente tipeada a una forma
débilmente tipeada. Dylan soporta herencia múltiple, polimorfismo,
palabras clave, macros, y muchas otras características avanzadas.La meta de
Dylan es ser un lenguaje apropiado para el desarrollo de software comercial.
Historia
Dylan fue creado a
principios de los años 90 por iniciativa de Apple Computer. Durante el desarrollo, se
intentó usarlo con los ordenadores de Apple Newton, pero la implementación del
lenguaje no estuvo listo a tiempo, y Newton usó una combinación de C y el
lenguaje de programación NewtonScript (desarrollado por Walter Smith) en su
lugar. Apple concluyó su desarrollo de Dylan en 1995.
Otros dos grupos
contribuyeron al diseño del lenguaje y desarrollaron implementaciones: la
compañía de software ‘’’Harlequin’’’ lanzó un entorno
de desarrollo integrado para Microsoft Windows y ‘’’Carnegie Mellon
University’’’ lanzó un compilador para sistemas Unix. Ambas
implementaciones son hoy en día de código abierto
y son mantenidas por un grupo de voluntarios.El lenguaje Dylan tuvo como nombre
en clave ‘Ralph’. James Joaquin eligió el nombre Dylan por “DYnamic LANguage”
(lenguaje dinámico).
Lenguaje
ensamblador
Lenguaje de máquina del Intel
8088. El código de máquina en hexadecimal
se resalta en rojo, el equivalente en lenguaje assembler en magenta, y las
direcciones de memoria donde se encuentra el código, en azul. Abajo se ve un
texto en hexadecimal y ASCII. El lenguaje ensamblador, o assembler
(assembly language en inglés) es un lenguaje de
programación de bajo nivel
para los computadores, microprocesadores, microcontroladores, y otros circuitos integrados programables.
Implementa una representación simbólica de los códigos de máquina binarios y otras
constantes necesarias para programar una arquitectura dada de CPU y
constituye la representación más directa del código máquina específico para cada
arquitectura legible por un programador. Esta representación es usualmente
definida por el fabricante de hardware, y está basada en los mnemónicos
que simbolizan los pasos de procesamiento (las instrucciones),
los registros
del procesador, las posiciones de memoria, y otras características del
lenguaje. Un lenguaje ensamblador es por lo tanto específico a cierta arquitectura de
computador física (o virtual). Esto está en contraste con la mayoría
de los lenguajes de programación de alto nivel,
que, idealmente son portables.
Un programa utilitario
llamado ensamblador es usado para traducir
sentencias del lenguaje ensamblador al código de máquina del computador
objetivo. El ensamblador realiza una traducción más o menos isomorfa
(un mapeo de uno a uno) desde las sentencias mnemónicas a las instrucciones y
datos de máquina. Esto está en contraste con los lenguajes de alto nivel, en
los cuales una sola declaración generalmente da lugar a muchas instrucciones de
máquina. Muchos sofisticados ensambladores ofrecen mecanismos adicionales para
facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la
ayuda de depuración.
Particularmente, la mayoría de los ensambladores modernos incluyen una
facilidad de macro
(descrita más abajo), y son llamados macro ensambladores.
Fue usado
principalmente en los inicios del desarrollo de software,
cuando aún no se contaba con potentes lenguajes de alto nivel y los recursos
eran limitados. Actualmente se utiliza con frecuencia en ambientes académicos y
de investigación, especialmente cuando se requiere la manipulación directa de hardware,
altos rendimientos, o un uso de recursos controlado y reducido. Muchos
dispositivos programables (como los microcontroladores) aún cuentan con el
ensamblador como la única manera de ser manipulados.
Características
El código escrito
en lenguaje ensamblador posee una cierta dificultad de ser entendido ya que su
estructura se acerca al lenguaje máquina, es decir, es un lenguaje de bajo
nivel. El lenguaje ensamblador es difícilmente portable, es decir, un código
escrito para un microprocesador, puede necesitar ser modificado, para poder ser
usado en otra máquina distinta. Al cambiar a una máquina con arquitectura
diferente, generalmente es necesario reescribirlo completamente. Los programas
hechos por un programador experto en lenguaje ensamblador son generalmente
mucho más rápidos y consumen menos recursos del sistema (memoria RAM y ROM) que
el programa equivalente compilado desde un lenguaje de alto nivel. Al programar
cuidadosamente en lenguaje ensamblador se pueden crear programas que se
ejecutan más rápidamente y ocupan menos espacio que con lenguajes de alto
nivel.
Con el lenguaje
ensamblador se tiene un control muy preciso de las tareas realizadas por un microprocesador por lo que se pueden crear
segmentos de código difíciles y/o muy ineficientes de programar en un lenguaje
de alto nivel, ya que, entre otras cosas, en el lenguaje ensamblador se dispone
de instrucciones del CPU que generalmente no están disponibles en los lenguajes
de alto nivel. También se puede controlar el tiempo en que tarda una rutina en
ejecutarse, e impedir que se interrumpa durante su ejecución.
Programa
ensamblador
Típicamente, un
programa ensamblador (assembler en inglés)
moderno crea código objeto traduciendo instrucciones mnemónicas
de lenguaje ensamblador en opcodes, y resolviendo los nombres
simbólicos para las localizaciones de memoria y otras entidades.1 El uso de referencias simbólicas
es una característica clave del lenguaje ensamblador, evitando tediosos
cálculos y actualizaciones manuales de las direcciones después de cada
modificación del programa. La mayoría de los ensambladores también incluyen
facilidades de macros para realizar sustitución textual -
ej. generar cortas secuencias de instrucciones como expansión en línea en vez
de llamar a subrutinas.
Los ensambladores
son generalmente más simples de escribir que los compiladores
para los lenguajes de alto
nivel, y han estado disponibles desde los años 1950. Los
ensambladores modernos, especialmente para las arquitecturas basadas en RISC,
tales como MIPS,
Sun SPARC,
y HP PA-RISC,
así como también para el x86 (-64),
optimizan la planificación de instrucciones para explotar la segmentación del CPU
eficientemente. En los compiladores para lenguajes de alto nivel,
son el último paso antes de generar el código ejecutable.
El lenguaje
ensamblador refleja directamente la arquitectura y las instrucciones
en lenguaje de máquina
de la CPU, y pueden ser muy diferentes de una arquitectura de CPU a otra. Cada
arquitectura de microprocesador tiene su propio lenguaje de máquina, y en
consecuencia su propio lenguaje ensamblador ya que este se encuentra muy ligado
al la estructura del hardware para el cual se programa. Los microprocesadores
difieren en el tipo y número de operaciones que soportan; también pueden tener
diferente cantidad de registros, y distinta representación de los tipos de
datos en memoria. Aunque la mayoría de los microprocesadores son capaces de
cumplir esencialmente las mismas funciones, la forma en que lo hacen difiere y
los respectivos lenguajes ensamblador reflejan tal diferencia.
Instrucciones de
CPU
La mayoría de los
CPU tienen más o menos los mismos grupos de instrucciones, aunque no
necesariamente tienen todas las instrucciones de cada grupo. Las operaciones
que se pueden realizar varían de un CPU a otro. Un CPU particular puede tener
instrucciones que no tenga otro y viceversa. Los primeros microprocesadores de
8 bits no tenían operaciones para multiplicar o dividir números, por ejemplo, y
había que hacer subrutinas para realizar esas operaciones. Otros CPU puede que
no tengan operaciones de punto flotante y habría que hacer o conseguir
bibliotecas que realicen esas operaciones.
Ensamblado
La transformación
del lenguaje ensamblador en código máquina la realiza un programa ensamblador,
y la traducción inversa la puede efectuar un desensamblador. A diferencia de los lenguajes de alto
nivel, aquí hay usualmente una correspondencia 1 a 1 entre las
instrucciones simples del ensamblador y el lenguaje de máquina. Sin embargo, en
algunos casos, un ensamblador puede proveer "pseudo instrucciones"
que se expanden en un código de máquina más extenso a fin de proveer la
funcionalidad necesaria y simplificar la programación. Por ejemplo, para un
código máquina condicional como "si X mayor o igual que", un
ensamblador puede utilizar una pseudoinstrucción al grupo "haga si menor
que", y "si = 0" sobre el resultado de la condición anterior.
Los Ensambladores más completos también proveen un rico lenguaje de macros que
se utiliza para generar código más complejo y secuencias de datos.Para el mismo
procesador y el mismo conjunto de instrucciones de CPU, diferentes programas
ensambladores pueden tener, cada uno de ellos, variaciones y diferencias en el
conjunto de mnemónicos o en la sintaxis de su lenguaje ensamblador. Por
ejemplo, en un lenguaje ensamblador para la arquitectura x86, se puede expresar
la instrucción para mover 5 al registro AL de la siguiente manera: MOV AL, 5,
mientras que para otro ensamblador para la misma arquitectura se expresaría al
revés: MOV 5, AL. Ambos lenguajes ensambladores harían exactamente lo mismo,
solo que está expresado de manera diferente. El primero usa la sintaxis de Intel,
mientras que el segundo usa la sintaxis de AT&T
El uso del
ensamblador no resuelve definitivamente el problema de cómo programar un
sistema basado en microprocesador de modo sencillo ya que para hacer un uso
eficiente del mismo, hay que conocer a fondo el microprocesador, los registros de trabajo
de que dispone, la estructura de la memoria, y muchas cosas más referentes a su
estructura básica de funcionamiento.
ECMAScript
ECMAScript es una especificación de lenguaje de programación
publicada por ECMA
International. El desarrollo empezó en 1996 y estuvo basado en el
popular lenguaje JavaScript propuesto como estándar por Netscape
Communications Corporation. Actualmente está aceptado como el
estándar ISO
16262. ECMAScript define un lenguaje de tipos dinámicos ligeramente inspirado
en Java
y otros lenguajes del estilo de C. Soporta algunas características de la programación
orientada a objetos mediante objetos basados en prototipos y
pseudoclases.
La mayoría de navegadores de Internet incluyen una
implementación del estándar ECMAScript, al igual que un acceso al Document Object
Model para manipular páginas web. JavaScript
está implementado en la mayoría de navegadores, y el Internet Explorer de Microsoft
usa JScript.
El navegador Opera
tiene su propio intérprete de ECMAScript con extensiones para soportar algunas
características de JavaScript y JScript. Cada navegador tiene extensiones
propias al estándar ECMAScript, pero cualquier código que se adecue al estándar
debería funcionar en todos ellos.ActionScript,
para Adobe Flash, también está basado en el
estándar ECMAScript, con mejoras que permiten mover, crear y analizar
dinámicamente objetos, mientras la película está en ejecución.
Erlang
Erlang es un lenguaje
de programación
concurrente y un sistema de ejecución que incluye una máquina
virtual y bibliotecas.El subconjunto de programación secuencial de Erlang es un
lenguaje funcional,
con evaluación estricta, asignación única, y tipado dinámico. Fue diseñado en la
compañía Ericsson para realizar aplicaciones
distribuidas, tolerantes a fallos, soft-real-time
y de funcionamiento ininterrumpido. Proporciona el cambio
en caliente de código de forma que éste se puede cambiar sin parar
el sistema. Originalmente, Erlang era un lenguaje propietario de Ericsson, pero
fue cedido como software de código
abierto en 1998. La implementación de Ericsson es, principalmente
interpretada pero también incluye un compilador HiPE (sólo soportado en
algunas plataformas).
La creación y
gestión de procesos es trivial en Erlang, mientras que, en muchos lenguajes,
los hilos se
consideran un apartado complicado y propenso a errores. En Erlang toda concurrencia
es explícita. Erlang recibe el nombre de A. K. Erlang. A veces se piensa que el
nombre es una abreviación de ERicsson LANGuage, debido a su uso
intensivo en Ericsson. Según Bjarne Däcker -quien fue el jefe del Computer
Science Lab en su día-, esta dualidad es intencional.
Euler
Euler es un lenguaje de
programación creado por Niklaus Wirth
y Helmut Weber, concebido como una extensión y generalización de ALGOL
60. La meta de sus diseñadores era crear un lenguaje:
·
más simple y sencillo que ALGOL 60
·
que fuese útil y al mismo tiempo eficiente
·
que pudiese ser definido rigurosamente con
herramientas formales
Euler usa un
concepto de tipo general. En Euler, los arrays, procedimientos y condiciones
múltiples no son entidades con nombre: al contrario que en ALGOL, no están al
mismo nivel que las variables. En cambio, se comportan al nivel de constantes
booleanas y numéricas. Por tanto, aparte del tradicional tratamiento de dichas
constantes, Euler presenta los siguientes nuevos tipos de datos:
·
Referencia
·
Etiqueta
·
Símbolo
·
lista (array)
·
procedimiento
·
indefinido
Todas las
constantes pueden ser asignadas a variables, que tienen la misma forma que en
ALGOL, pero que no tienen tipo fijo: Euler es un lenguaje
de programación con tipos dinámicos. Es más, un procedimiento puede
devolver un valor de cualquier tipo, y este tipo puede ser distinto en
distintas llamadas al mismo procedimiento.
Similarmente, los
elementos de una lista pueden tener valores de cualquier tipo, incluso dentro
de la misma lista. Así que si los elementos de la lista son etiquetas o
procedimientos, tenemos una condición múltiple (switch) o una lista de
procedimientos, respectivamente. La creación de listas de listas es en esencia
un tipo de datos árbol. Como era de esperar, Euler proporciona operadores
generales de comprobación y conversión de tipos.
Extended ML
Extended ML es un lenguaje de
programación creado por Kahrs, Sannella y Tarlecki basado en ML.
Extiende la sintaxis de ML para incluir axiomas de semántica, los cuales pueden
no ser ejecutables pero que sirven para especificar rigurosamente el
comportamiento de un programa. Con esta extensión el lenguaje puede utilizarse
para aplicar técnicas de refinamiento de programas para, a partir de una
especificación formal, producir un programa en el lenguaje Standard
ML que cumple con la especificación. Extended ML se utiliza para la
enseñanza de desarrollo formal de
programas, especificación de programas y para investigación en
verificación automatizada de programas.
FLOW-MATIC
Es el primer
lenguaje de alto nivel orientado al ámbito de gestión. Fue creado por Grace Murray Hopper (1906 – 1992) en 1955
para UNIVAC.
Estableció el concepto de lenguajes de programación basados en palabras del
lenguaje natural; también desarrolló los primeros compiladores de la historia,
el A-0 (Math Matic) y el B-0, y en 1960 presentó su primera versión del
lenguaje COBOL
(Common Business-Oriented Language).
Fortran
Fortran (previamente FORTRAN) (contracción del inglésFormula Translating
System) es un lenguaje de
programaciónalto nivel
de propósito general, procedimental e imperativo,
que está especialmente adaptado al cálculo numérico y a la computación
científica.
Desarrollado
originalmente por IBM en 1957 para el equipo IBM
704, y usado para aplicaciones científicas y de ingeniería, el
FORTRAN vino a dominar esta área de la programación desde el principio y ha
estado en uso continuo por más de medio siglo en áreas de cómputo intensivo
tales como la predicción numérica del tiempo, análisis
de elementos finitos, dinámica
de fluidos computacional (CFD), física computacional, y química computacional. Es una de los
lenguajes más populares en el área de la computación
de alto rendimiento y es el lenguaje usado para programas que
evalúan el desempeño (benchmark) y el ranking de los supercomputadoresmás
rápidos del mundo.

Historia
A finales de 1953,
John W. Backus sometió una propuesta a sus
superiores en IBM
para desarrollar una alternativa más práctica al lenguaje ensamblador para programar el computador centralIBM
704. El histórico equipo FORTRAN de Backus consistió en los
programadores Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter
Sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Lois Haibt y David Sayre.A
mediados de 1954 fue terminada una especificación del borrador para The IBM
Mathematical Formula Translating System. El primer manual para el FORTRAN
apareció en octubre de 1956, porque los clientes eran reacios a
usar un lenguaje de
programación de alto nivel
a menos que su compilador pudiera generar código cuyo desempeño fuera
comparable al de un código hecho a mano en lenguaje ensamblador.Mientras que la
comunidad era escéptica en que este nuevo método pudiera posiblemente superar
la codificación a mano, éste redujo por un factor de 20 al número de sentencias
de programación necesarias para operar una máquina, y rápidamente ganó aceptación.
Durante una entrevista en 1979 con Think, la revista de los empleados de IBM,
el creador, John Backus, dijo, "Mucho de mi trabajo ha venido de ser
perezoso. No me gustaba escribir programas, y por eso, cuando estaba trabajando
en el IBM 701 escribiendo programas para computar trayectorias de misiles,
comencé el trabajo sobre un sistema de programación para hacer más fácil
escribir programas".
El lenguaje fue
ampliamente adoptado por los científicos para escribir programas numéricamente
intensivos, que incentivó a los escritores de compiladores a producir
compiladores que pudieran generar un código más rápido y más eficiente. La
inclusión en el lenguaje de un tipo de datos
y de la aritmética de números complejos
amplió la gama de aplicaciones para las cuales el lenguaje se adaptaba
especialmente e hizo al FORTRAN especialmente adecuado para aplicaciones
técnicas tales como la ingeniería eléctrica.
Hacia 1960, las
versiones de FORTRAN estaban disponibles para los computadors IBM 709,
650,
1620,
y 7090.
Significativamente, la cada vez mayor popularidad del FORTRAN estimuló a
fabricantes de computadores de la competencia a proporcionar compiladores
FORTRAN para sus máquinas, así que por 1963 existían más de 40 compiladores
FORTRAN. Por estas razones, el FORTRAN es considerado ser el primer lenguaje de
programación ampliamente usado soportado a través de una variedad de
arquitecturas de computador.El desarrollo del FORTRAN fue paralelo a la
temprana evolución de la tecnología del compilador. De hecho, muchos avances en
la teoría y el diseño de compiladores fueron motivados específicamente por la
necesidad de generar código eficiente para los programas en FORTRAN. Versiones
Algunas otras
versiones subsiguientes fueron:
FORTRAN IV
FORTRAN 77
FORTRAN 90
FORTRAN 95
FORTRAN 2003
FORTRAN 2008
FORTRAN 2010
Principales
características
El lenguaje fue
diseñado teniendo en cuenta que los programas serían escritos en tarjetas
perforadas de 80 columnas. Así por ejemplo, las líneas debían ser numeradas y
la única alteración posible en el orden de ejecución era producida con la
instrucción goto. Estas características han evolucionado de versión en
versión. Las actuales contienen subprogramas, recursión y una variada gama de estructuras de control.
Ventajas
e inconvenientes de su sintaxis
Lo que fue la
primera tentativa de proyección de un lenguaje de programación de alto nivel,
tiene una sintaxis considerada arcaica por muchos programadores que aprenden
lenguajes más modernos. Es difícil escribir un bucle "for", y errores
en la escritura de sólo un carácter pueden llevar a errores durante el tiempo
de ejecución en vez de errores de compilación, en el caso de que no se usen las
construcciones más frecuentes. Algunas de las versiones anteriores no poseían
facilidades que son consideradas como útiles en las máquinas modernas, como la
asignación dinámica de memoria.
Se debe tener en
cuenta que la sintaxis de Fortran fue afinada para el uso en trabajos numéricos
y científicos. Muchas de sus deficiencias han sido abordadas en revisiones
recientes del lenguaje. Por ejemplo, Fortran 95 posee comandos mucho más breves
para efectuar operaciones matemáticas con matrices y dispone de tipos. Esto no
sólo mejora mucho la lectura del programa sino que además aporta información
útil al compilador. Por estas razones Fortran no es muy usado fuera de los
campos de la informática y el análisis numérico, pero permanece como el
lenguaje a escoger para desempeñar tareas de computación numérica de alto
rendimiento.
FoxPro 2
FoxPro (acrónimo de FoxBASE Professional) es un lenguaje
de programación orientado a objetos, que a la vez es un Sistema Gestor de Bases
de datos o Database Management System (DBMS), publicado originalmente por Fox
Software y posteriormente por Microsoft, para los sistemas operativos MS-DOS,
MS Windows, Mac OS y UNIX. Aunque FoxPro es un DBMS y como tal soporta
relaciones entre las tablas, no se le considera como un Sistema administrador
de bases de datos relacionales (o RDBMS), por no soportar las transacciones.
FP
FP (abreviación de Functional
Programming) es un lenguaje de
programación creado por John Backus
para apoyar la diseminación del paradigma de Programación
a nivel funcional.
Componentes del lenguaje
Valores
Las principales
estructuras de datos del lenguaje son los valores de base y las secuencias:
Si x1,...,xn son valores, también lo es la secuencia〈x1,...,xn〉.
Estos valores se
construyen a partir de cualquier conjunto de valores atómicos: booleanos,
enteros, reales, caracteres, etc.
booleanos : {T,
F}
enteros : {0,1,2,...,∞}
caracteres : {'a', 'b', 'c',...}
símbolos : {x,
y,...}
El símbolo ⊥ representa el valor indefinido.
Las secuencias preservan el valor indefinido:
〈x1,...,⊥,...,xn〉 = ⊥
Funciones
Los programas en
FP son funcionesf tales
que cada una hace corresponder un valorx en otro :f:x representa el valor resultante de
aplicar la función f a x.
Game Maker Language
Game Maker Languaje (GML) es un lenguaje de
programación interpretado, desarrollado para usarse como complemento
de la aplicación de desarrollo de juegos Game Maker.
El lenguaje es utilizado en el programa para dar mayor potenciación al
desarrollo de juegos u otros sistemas dentro de tal. El lenguaje fue
codificadoo usando el lenguaje Delphi. Es un lenguaje de
programación muy flexible, su sintaxis es comparable con la de C++,
aunque también se ve influenciado por la sintaxis de otros lenguajes como Pascal.
La estructura general del código GML puede tomar diferentes formas de sintaxis,
ya que no se ve sujeta a una sintaxis estricta como la de C. Es
capaz de trabajar con números, cadenas de texto y demás de manera nativa.
Funciones
El lenguaje GML por
ende ya tiene un gran número de funciones y sistemas implementados dentro del
mismo programa en el que trabaja, es decir, no necesita de librerías externas
como en otros lenguajes (C++ por ejemplo), aun así, también cabe la
posibilidad de poder usar librerías externas en formato DLL para
potenciar ciertos campos del sistema.
Variables
GML no necesita de
la declaración compulsiva de variables para trabajarlas, es decir, basta con
asignarle un valor fijo una vez en cualquier sitio. En este caso, la variable
ya está declarada y puede usarse de forma general, aun así, GML también incluye
un bloque "var" imitando las declaraciones de variables de otros
lenguajes, pudiendo declarar un sin número de variables en el programa sin
necesidad de asignarles un valor (si no que este automáticamente es
0
, como
en C++).
Game Maker también
trabaja con constantes, las cuales se pueden asignar desde una función del
programa (más las que ya existen por ende). Dentro del código GML existen dos
tipos de variables de trabajo, las variables
locales y variables globales.
Las variables locales trabajan únicamente dentro de un "objeto", es
decir, no es existente fuera del "objeto" o bloque de código que la
trabaje (lo cual permite usar el mismo nombre de la variable en otro objeto).
Por otro lado están las variables globales, las cuales usan el prefijo
global.
antes
del nombre de la variable.
Las variables
globales tienen uso en todo el programa, por lo cual solo puede existir una
sola variable global con el mismo nombre, y su valor puede verse afectado desde
cualquier parámetro del programa/código.
Gemix
Gemix es uno de los lenguajes de
programación que podemos encontrar en la suite de creación de
videojuegos Gemix Studio. El lenguaje, al igual que el
propio producto en general, se encuentra en desarrollo. Se podría decir que es
una evolución del lenguaje DIV ya que en la actualidad es totalmente
compatible con este (a excepción de las funcionalidades de red y modo 8),
compartiendo su misma estructura y filosofía. Es una evolución de DIV ya
que a todo lo que este es, añade numerosas funcionalidades.
Características
A continuación se
lista una serie de características tanto a nivel de estructura de lenguaje como
a nivel de funcionalidades: Lenguaje interpretado. El compilador
de Gemix convierte el código fuente en un código intermedio que posteriormente
es ejecutado por el intérprete.
Su estructura es una mezcla de C y Pascal
y heredera integral de la de DIV.
Incorpora una
novedad, ya presente en DIV: el tratamiento de procedimientos de
manera muy similar a los procesos de Linux, pero de forma
automática. Normalmente, cada proceso representa un objeto en pantalla, aunque
estos también pueden ser usados de manera similar a funciones tradicionales.
Los procesos aportan en cierta medida uno de los principios de la programación
orientada a objetos, el encapsulamiento. Esto es posible gracias a
la incorporación de las variables locales que se declaran una vez, y están
presentes en cada proceso en forma de una copia independiente. Existen
variables locales predefinidas que el sistema usa para almacenar parámetros
tales como la posición horizontal y vertical, el gráfico asignado al proceso,
el ángulo de rotación, etc.
Motor 2D de
renderizado por software. Esto permite la visualización, escalado y rotado,
entre otras, de sprites,
texto y primitivas gráficas. Además Gemix añade a esto un potente sistema de
efectos y modos de fusión de los gráficos.
Genie
Genie es un lenguaje de programación de alto nivel, moderno, y de propósito
general en desarrollo activo desde el año 2008.1 Fue diseñado como un dialecto
alternativo más simple y limpio para el compilador Vala,
preservando al mismo tiempo la misma funcionalidad del lenguaje Vala. La
sintaxis de Genie se deriva de numerosos lenguajes modernos como Python,
Boo, D y Delphi.
Al igual que Vala,
Genie usa el sistema de tipos GObject para crear clases e interfaces declaradas
en el código fuente de Genie, sin imponer requisitos adicionales de tiempo de
ejecución (es decir, a diferencia de Python, Java
o Mono, este no requiere una máquina
virtual).Genie permite el acceso a las bibliotecas de C, especialmente las
basadas en GObject (como GTK+), sin necesidad de utilizar otro API.
Durante la compilación, el código se traduce primero a código fuente y
cabeceras de C, que se compilan entonces al código de máquina con cualquier compilador
C
disponible como GCC,
lo cual permite el desarrollo de software multi-plataforma.Aunque tanto Vala
como Genie son desarrollados y promovidos por el proyecto Gnome,
los programas desarrollados en Genie no dependen del entorno de escritorio
Gnome, y usualmente requieren sólo de GLib.
Go
Go es un lenguaje de
programaciónconcurrente
y compilado inspirado en la sintaxis de C. Ha
sido desarrollado por Google y sus diseñadores iniciales son
Robert Griesemer, Rob Pike y Ken Thompson. Actualmente sólo está
disponible para los sistemas operativosGNU/Linux
y Mac OS X.En el día de la publicación del
lenguaje, Francis McCabe, desarrollador del lenguaje de programación Go!,
solicitó que se le cambiase el nombre al lenguaje de Google
para evitar confusiones con su lenguaje. McCabe creó Go! en el año 2003; sin
embargo, aún no ha registrado el nombre.
Gobstones
Gobstones es un lenguaje de
programación diseñado para la enseñanza de ideas básicas de
programación. Fue utilizado por primera vez en una materia de introducción a la
programación de la Universidad
Nacional de Quilmes. Se diferencia de otros lenguajes dedicados a
tal fin, como puede ser Logo,
debido a que el pasaje de este lenguaje a otros utilizados en la industria
resulta más sencillo, por la utilización de una sintaxis similar a la de éstos.
La sintaxis del lenguaje fue diseñada para ser similar a lenguajes como C y Java
(posee bloques de código encerrados por llaves).
Su primera
implementación fue hecha en el lenguaje Haskell,
para ser usado en el intérprete Hugs. Existen implementaciones en otros
lenguajes como Python y C++. Gobstones
posee tipos primitivos que intentan ser intuitivos, pertenecientes a un
universo de discurso diseñado especialmente para este lenguaje. Presenta un
tablero que posee un cabezal que apunta en todo momento a una celda del mismo.
El cabezal puede poner y sacar bolitas de diferentes colores, y además moverse
a otras celdas del tablero. Si el cabezal se mueve a una celda no existente o
intenta sacar bolitas de una celda vacía, el programa finaliza de forma
anormal.
El lenguaje además
posee una diferenciación clara entre comandos y expresiones puras. Los comandos
describen acciones que realiza el cabezal sobre el tablero, y por lo tanto
generan efectos. Las expresiones se limitan sólo a denotar valores (no poseen efectos
laterales). El usuario puede definir procedimientos (que dan nombre
a comandos nuevos) y funciones puras.
El lenguaje no
posee entrada y salida de datos. Al final de la ejecución de un programa
Gobstones, se visualiza un tablero final que resulta de los efectos descritos
en el programa.
Gödel
Gödel es un lenguaje de
programación declarativo, de propósito general que adhiere al
paradigma de la programación lógica.
Es un lenguaje fuertemente tipado,
con un sistema de tipos basado en many-sorted logic con polimorfismo
parametrizado. Se le dio ese nombre en honor al lógico Kurt Gödel.
Características
Gödel tiene un
sistema de módulos; permite enteros y racionales de precisión arbitraria y números de punto flotante. Puede resolver
restricciones sobre dominios finitos de enteros así como restricciones lineales
racionales. Admite procesamiento de conjuntos finitos. Tiene también una regla
flexible de cómputo que admite el operador de poda, que es una generalización
del operador commit de los lenguajes de programación concurrentes.
Las facilidades
meta lógicas de Gödel dan cabida a meta programas que realizan análisis,
transformación, compilación, verificación y puesta a punto entre muchas otras
tareas.
Gofer
Gofer es una implementación del lenguaje de
programaciónHaskell desarrollado por Mark Jones en
Oxford, con fines educativos. Gofer es el acrónimo de G(ood) F(or) E(quational) R(easoning) en español: Adecuado para razonar ecuaciones. Ha
sido substituido por Hugs (Haskell User's Gofer System).
Haskell

Las
características más interesantes de Haskell incluyen el soporte para tipos de datos y funciones recursivas,
listas, tuplas,
guardas y calce de patrones. La combinación de las mismas pueden resultar en
algunas funciones casi triviales cuya versión en lenguajes imperativos pueden llegar a
resultar extremadamente tediosas de programar. Haskell es, desde 2002, uno de
los lenguajes
funcionales sobre los que más se ha investigado. Se han desarrollado
muchas variantes:
Versiones paralelas del MIT y Glasgow, ambas denominadas Parallel
Haskell.
·
Más versiones paralelas y distribuidas de Haskell
llamadas Distributed Haskell (anteriormente Goffin) y Eden
·
Una versión con ejecución especulativa: Eager
Haskell
·
Varias versiones orientadas
a objetos: Haskell++, O'Haskell y Mondrian.
·
Una versión educativa llamada Gofer desarrollada
por Mark Jones que fue suplantada por Hugs (ver abajo).
Para información
más detallada, referirse al sitio oficial o a los links al final de este
artículo.
Historia
A partir de la
publicación de Miranda,
en 1985,
los lenguajes funcionales proliferaron. En 1987, existían compitiendo entre
éllos más de una docena de lenguajes de programación puros funcionales no
estrictos. Durante la conferencia sobre Lenguajes de Programación Funcional y
Arquitecturas de Ordenador (FPCA '87) en Portland, Oregón,
se mantuvo un meeting durante el cual se alcanzó un fuerte consenso entre sus
participantes para formar un comité que definiese un estándar abierto para tales lenguajes.
Esto se hizo con el propósito expreso de consolidar los lenguajes existentes en
uno único que sirviera como base para la investigación futura en diseño de
lenguajes.
La primera versión
de Haskell ("Haskell 1.0") se definió en 1990. Los esfuerzos del
comité resultaron en una serie de definiciones del lenguaje, que culminaron a
finales de 1997
en Haskell 98, que se intentó
fuera una versión del lenguaje mínima, estable y portable, junto con una
biblioteca estándar asociada para la enseñanza, y como base de futuras extensiones.
El comité expresamente aprobó la creación de extensiones y variantes de Haskell
98 mediante la adición e incorporación de características experimentales.
En enero de 1999,
el estándar del lenguaje Haskell 98 se publicó en "The Haskell 98
Report". En enero de 2003, se publicó una versión revisada en
"Haskell 98 Language and Libraries: The Revised Report".3 El lenguaje continúa evolucionando
rápidamente, con las implementaciones de Hugs y de GHC
(véase más adelante), que representan el actual estándar de facto. A
principios del 2006 comenzó el proceso de definición de un sucesor del estándar
de Haskell 98, llamado informalmente Haskell′
("Haskell Prime").4 Este proceso intenta producir una
revisión menor de Haskell 98.
Tipos
simples predefinidos
El tipo Bool:Los valores con
este tipo representan expresiones lógicas cuyo resultado puede ser True
o False.
Funciones y operadores
(&&) ::
Bool -> Bool -> Bool. Conjunción lógica.
(||) :: Bool
-> Bool -> Bool. Disyunción lógica.
not :: Bool
-> Bool. Negación lógica.
otherwise ::
Bool. Función constante que devuelve el valor True.
El tipo Int:Los valores de
este tipo son números enteros de precisión limitada que cubren al menos el
intervalo [-2^29, 2^29 - 1] ([minBound, maxBound]).
El tipo Integer: Los
valores de este tipo son números enteros de precisión ilimitada que tienen las
mismas funciones y operadores del tipo Int.
El tipo Float: Los
valores de este tipo son números reales. ( 2010, 23.4 , 5.7 )
El tipo Double: Los
valores de este tipo son números reales, de mayor rango y con aproximaciones
más precisas que los de tipo Float.
El tipo Char: Los
valores de este tipo son caracteres que se encuentran en una masa de alta
complejidad de en una suma de caracteres dados con su alta definición
Antes de utilizar
esta función en hugs debemos utilizar IMPORT CHAR antes de nuestro algoritmo
HQ9+
HQ9+ es un lenguaje
de programación esotérico que consiste en sólo cuatro instrucciones,
cada una de un solo carácter: H, Q, 9, y + (de ahí
el nombre). No es Turing completo,
pero es muy eficaz para hacer ciertos tipos de programas.
Propósito
del lenguaje
En el invierno de
2000, Cliff L. Biffle creó el lenguaje HQ9+ como una broma. Lo basó en los
ejemplos más comunes de código fuente en los lenguajes de
programación. Esos ejemplos eran los programas "hola
mundo", los quines, y
los programas que imprimen la letra de la canción inglesa 99 Bottles of Beer
("99 botellas de cerveza"). Para hacer estos tipos de programas, HQ9+
es el mejor. Sin embargo, es completamente inútil para todos los otros tipos de
programas.Además, este programa incrementaría el acumulador tres veces. Nota
que un programa que contiene algo más que instrucciones
+
y una
sola instrucción Q
imprime más que su código fuente, y por tanto
no es un auténtico quine.
HyperCard
HyperCard fue una aplicación
informática de Apple Computer
que se contó entre los primeros sistemas hipermedia
con éxito anteriores a la World Wide Web.
Conceptualmente se acerca a una base de datos,
pues almacena información, siendo además gráfico, flexible y capaz de crear
ficheros fáciles de modificar. También incluía HyperTalk, un lenguaje de programación
potente y relativamente fácil de usar, para manipular los datos y la interfaz
de usuario. Los usuarios de HyperCard lo usaban a menudo como un sistema de
programación para el desarrollo
rápido de aplicaciones más que como base de datos.
HyperCard fue
lanzado originalmente con el System Software 6 en 1987 y retirado
definitivamente del mercado en marzo de 2004, aunque para entonces hacía muchos
años que no se actualizaba. HyperCard corre nativamente sólo en Mac
OS versiones 9 y anteriores, pero puede usarse aún en el modo Classic de Mac
OS X.
Descripción
HyperCard está
basado en el concepto de una «pila» de «tarjetas» virtuales. Las tarjetas
contienen datos, como lo harían en un rolodex. El motor de presentación era
parecido en concepto a un «formulario» de los usados en la mayoría de los
entornos de desarrollo
rápido de aplicaciones (RAD), como Borland Delphi o Visual Basic. Una pila especial «home»
estaba disponible como lanzador, repositorio de scripts compartidos y ubicación
de las preferencias de usuario.
HyperCard no era
sólo un motor de base de datos: la apariencia de cada tarjeta podía
modificarse, de la misma forma que puede escribirse información no estándar
sobre las tarjetas de un rolodex. Una capa de fondo especial de cada pila
contenía elementos que aparecían en todas las demás tarjetas de la misma pila,
o en todas las tarjetas basadas en dicho fondo. Los fondos podían incluir
imágenes (que era su propósito inicial), además de los objetos también
disponibles para las demás tarjetas: campos gráficos, botones, texto
(estático), campos de texto (editable) y otros elementos típicos de las GUIs.
Cada tarjeta podía entonces contener datos diferentes asociados a los campos de
texto o gráficos, creando de esta forma la funcionalidad de base de datos.
El comando
find
(‘hallar’) de HyperCard navegaba rápidamente a las tarjetas que contenían el
texto buscado usando el método patentado llamado hintBits. Esto podía
acotarse con modificaciones tales como find "Bob" in card field
"hello"
(‘hallar «Bob» en el campo de tarjeta «hola»’). De
forma parecida, había un comando sort
(‘ordenar’) que
permitía evaluar expresiones completas para clasificar las tarjetas según un
orden.
Añadir scripts
también era fácil. Bastaba simplemente con «command-option-clicar»
sobre cualquier elemento de la pila (o pulsar el botón Script en el
diálogo de propiedades del elemento) para abrir un editor. En él podía
editarse, salvarse y usarse inmediatamente el script. Además, HyperCard
contenía la «caja de mensajes», una línea de comandosinteractiva en una
ventana flotante que podía ejecutar líneas simples de script, incluyendo el
comando
find
, por lo que servía también como diálogo de
búsqueda. HyperCard 2.0 añadió un depurador.
HyperTalk fue lo
suficientemente popular como para que uno de sus usos principales no fuese el
de base de datos sino el de herramienta de programación. Miles de «pilas»
fueron escritas y distribuidas como stackware en los pocos años en los
que HyperCard tuvo amplia difusión.
Icon
Icon es un lenguaje de programación
de muy alto nivel, especialmente recomendado para trabajar con cadenas de texto, ya que permite una
programación rápida y concisa. Puede ser usado para análisis y formateo de
textos, inteligencia
artificial o programación de prototipos. Las últimas versiones,
además, incluyen gráficos y facilidades GUI. Fue
diseñado en los años 1970 por Ralph E. Griswold, y otros
colaboradores en el "Department of Computer Science" de la Universidad de Arizona. Griswold, que
lideraba el proyecto, ya tenía experiencia anterior en el diseño de lenguajes
de alto nivel, ya que fue uno de los creadores de Snobol,
del que tomaron algunas características.
Sintaxis
básica
Se deriva de la
clase ALGOL
de los lenguajes de programación estructurada, por lo que tiene una sintaxis similar
a la de C, pero
sobre todo, a la de Pascal,
ya que utiliza el símbolo ‘:=’ para las asignaciones. Por otra parte, se
asemeja a C en la utilización de los corchetes para estructurar el programa y
en la ejecución de un procedimiento principal llamado "main".
Otras
características comunes a otros lenguajes de programación de scripting es que no es necesario declarar
las variables,
los tipos son emitidos automáticamente y los números pueden ser convertidos a
cadena de caracteres y volver automáticamente. Otro aspecto a destacar es la
ausencia de un carácter de fin de línea. Las líneas no terminan en punto y coma
como en el caso de C, por ejemplo, sino que terminan en una coma implícita
siempre que la línea tenga sentido. Los procedimientos son los bloques de
construcción básicos en los programas. Aunque los nombres y palabras utilizadas
en ICON se asemejen más a Pascal, el funcionamiento es más similar al que se le
da en C, y puede devolver valores.
Evaluación
de expresiones
Condicional
Hay expresiones
condicionales que pueden tener éxito y producir un resultado, o fallar y no
producir ningún resultado. Un ejemplo es la operación de comparación, i >
j que tendrá éxito siempre que el valor de i sea mayor que el de j. Algo
parecido ocurre con i > j > k que tendrá éxito cuando el valor de
j se encuentre entre el de i y el de k.
El éxito o el
fracaso de las operaciones condicionales se utiliza en lugar de valores
booleanos para conducir las estructuras de
control en ICON. Se asignaría
el valor de i a k en el caso de que el valor de i sea mayor que el de j, y se
le asignaría el valor de j en el caso contrario. La utilidad de estos conceptos
de éxito o fracaso es ilustrada mediante la orden “find(s1,s2)”, que falla en
el caso de que s1 no sea una subcadena de s2. Esto devolvería i, que es la
posición de la cadena “line” en la que se encuentra la subcadena “or”. En el
caso de que no se encuentre la subcadena, el programa no devolvería ningún
resultado. Muchas expresiones son condicionales.
Un ejemplo es “read()”, que devuelve la siguiente línea de un archivo de
entrada, y termina cuando se alcanza el final del archivo. Esta expresión copia
el archivo de entrada en el archivo de salida.Si un argumento de una función
falla, la función no se llama, la llamada falla.
Ioke
Ioke es un lenguaje de
programación dinámico, fuertemente tipado,
basado en prototipos con implementaciones para la Máquina Virtual de Java y el Common Language
Runtime (CLR). Fue diseñado por Ola Bini, uno de los desarrolladores
de JRuby.
Es un lenguaje homoicónico, con cierto parecido al
lenguaje Ío.
El código de Ioke contiene documentación y pruebas unitarias.Ioke fue anunciado el 6
de noviembre de 2008.
JOSS
JOSS (acrónimo de JOHNNIAC Open Shop System) fue uno de los
primeros lenguajes de
programación de tiempo compartido
(compartir recursos de computación entre muchos usuarios a través de
multitareas). Su predecesor fue ALGOL 58.Fue desarrollado por J. Clifford Shaw
en la empresa RAND
y fue implementado por primera vez en un formato beta, en el ordenador JOHNNIAC
en mayo
de 1963.
La implementación completa se desplegó en enero de 1964,
soportando 5 terminales y la versión final llamada JOSS In, soportando a 10
terminales, se desplegó en enero de 1965.
Fue escrito en lenguaje ensamblador simbólico, llamado
EasyFox (E y F en un alfabeto fonético militar en los Estados Unidos de la época). EasyFox fue
también desarrollado por Cliff Shaw. JOSS fue apodado "The Helpful
Assistant” (El asistente útil) y es conocido por su interfaz
de usuario coloquial. Originalmente las cintas de máquina de escribir verde/negro se
utilizaron en sus terminales con el verde siendo usado para la entrada del
usuario y negro para la respuesta del ordenador.
Cualquier comando que no era conocido retornaba la respuesta "Eh?".
JOSS II, fue
desarrollado por Charles L. Baker, Joseph W. Smith, D. Irwin Greenwald, y
Edward G. Bryan para las computadoras PDP-6 entre 1964 y febrero
de 1966.
Muchas variantes se han desarrollado y aplicado a una variedad de plataformas.
Algunas de estas variantes se mantuvieron similares al original: TELCOMP,
FOCAL, CAL, CITRAN, ISIS, PIL/I, JEAN (TIC 1900 series), mientras que otros,
como MUMPS, se desarrollaron en distintas direcciones.
Limbo
Limbo es un lenguaje de
programación para escribir sistemas distribuidos. Además es el
lenguaje usado para escribir aplicaciones para el sistema operativoInferno.
Fue diseñado en los Laboratorios Bell
por Sean Dorward, Phil Winterbottom y Rob Pike.
El compilador
de Limbo genera código objeto
independiente de la plataforma que luego es interpretado por la máquina virtual Dis o compilado antes de
su ejecución para mejorar el rendimiento. Por ello, todas las aplicaciones
hechas con Limbo son completamente portables en todas las plataformas
soportadas por Inferno.
Características
del lenguaje
Limbo tiene las
siguientes características:
1.
Programación Modular
3.
Chequeo de tipos estricto tanto en tiempo de
compilación y ejecución
4.
Comunicación entre
procesos sobre canales tipificados
5.
Recolección de
basura automática
6.
Tipos de dato
abstractos simples
Lingo
Lingo es el lenguaje de
programación que lleva incorporado Macromedia Director, un programa de autoría.
Permite integrar con relativa facilidad texto, imágenes, sonidos y video
digital, siendo una alternativa a lenguajes más tradicionales, como el C/C++,
porque el desarrollo de la aplicación es mucho más rápido y flexible. El
soporte para publicar suele ser el CD y desde hace algún tiempo, con la ayuda
de Adobe Shockwave, también la WWW.
Sintaxis
El cambio a la
sintaxis de JavaScript es una importante mejora sobre
el Director de Macromedia. Esta característica
proporciona un lenguaje y una sintaxis más comunes entre el MX de Macromedia
Director y Flash
de Macromedia. En Director, la puesta en práctica de la lengua está encima del
motor de SpiderMonkey ( Javascript-C
) [ 1 ], que es un intérprete preembalado de ECMAScript escrito en C y se
conforma en gran parte a la especificación de ECMA [ 2 ], excepto en las áreas
donde las funciones o las palabras claves de encargo exponen funcionalidad
Director.
Logo
Logo es un lenguaje de programación de alto nivel, en parte funcional, en
parte estructurado; de muy fácil aprendizaje, razón por la cual suele ser el
lenguaje de programación preferido para trabajar con niños y jóvenes. Fue
diseñado con fines didácticos por Danny Bobrow, Wally
Feurzeig y Seymour Papert, los cuales se basaron en las
características del lenguaje Lisp.
A pesar de que Logo no fue creado con la finalidad de usarlo para enseñar
programación, puede usarse para enseñar la mayoría de los principales conceptos
de la programación, ya que proporciona soporte para manejo de listas, archivos
y entrada/salida.
Papert
desarrolló un enfoque basado en su experiencia con Piaget a principios de los
sesenta.
Fundamentalmente consiste en presentar a los niños retos intelectuales que
puedan ser resueltos mediante el desarrollo de programas en Logo. El proceso de
revisión manual de los errores contribuye a que el niño desarrolle habilidades
metacognitivas al poner en práctica procesos de autocorrección. Es conocido por
poder manejar con facilidad gráficas tortuga, listas, archivos y
recursividad.
Logo es uno de los
pocos lenguajes de programación con instrucciones en español en algunos intérpretes, entre ellos: FMSLogo,
LogoWriter, WinLogo, Logo Gráfico, XLogo, MSWLogo y LogoEs. Logo tiene más de 180 intérpretes y
compiladores, según constan en el proyecto "Logo Tree".
XLogo, MSWLogo y LogoES tienen la particularidad de ser además software
libre.
Lenguaje
Una característica
más explotada de Logo es poder producir «gráficos
tortuga», es decir, poder en dar instrucciones a una tortuga
virtual,un cursor gráfico usado para crear dibujos, que en algunas versiones es
un triángulo,en otras tiene la figura de una tortuga vista desde arriba. Esta
tortuga o cursor se maneja mediante palabras que representan instrucciones,
La característica
de que las instrucciones se puedan comprender en las diferentes lenguas es lo
que hace al Logo un lenguaje de programación tan fácil de aprender. Una
secuencia de instrucciones en Logo puede constituirse en un rudimentario
programa, usandose como un bloque. Esta caracterísctica modular y reutilizable
de las instrucciones hace que Logo sea muy flexible, recursivo, y apto para
trabajarse en forma de módulos.
Otras
instrucciones básicas de Logo en español son: -cs: borrar pantalla. -rep
(número de veces) [ (acción) (cantidad) ] ej. -repite 4 [ av 100 gd 90 ], esta
repetición crea un cuadrado. -st: mostrar tortuga. -ht: ocultar tortuga. -pu:
subir lápiz, hace que la tortuga no dibuje mientras camina. -pd: bajar lápiz,
hace lo contrario que "-pu" ("sl" en intérpretes en
español).
Meta Lenguaje
ML es un lenguaje de programación de propósito general de la familia de
los lenguajes de
programación funcional desarrollado por Robin Milner y otros a finales de los años 1970 en la Universidad de
Edimburgo. ML es un acrónimo de Meta Lenguaje dado que fue concebido como el lenguaje para desarrollar
tácticas de demostración en el sistema LCF (El lenguaje para el cual ML era meta
lenguaje es pplambda, una combinación del cálculo de predicados de
primer orden y el lambda-cálculopolimórfico
sencillamente tipificado).
Frecuentemente se
clasifica a ML como un lenguaje funcional impuro dado que permite programar
imperativamente con efecto
colateral, a diferencia de otros lenguajes de programación
funcional, tales como Haskell.
Entre las
características de ML se incluyen evaluación por valor, álgebra de funciones,
manejo automatizado de memoria por medio de recolección de
basura, polimorfismo parametrizado, análisis de estático de tipos, inferencia de tipos, tipos de datos
algebraicos, llamada por patrones y manejo de excepciones. Esta combinación
particular de conceptos hace que sea posible producir una de los mejores
compiladores actualmente disponibles.
En la actualidad
varios lenguajes de la familia ML están disponibles, principalmente Standard
ML (SML) y Ocaml (Ocaml contiene la sintaxis de ML
como un subconjunto). Varias ideas aparecidas en ML han influido el diseño de
otros lenguajes, tales como Cyclone y Nemerle. Los lenguajes de la
familia ML se aplica principalmente en diseño y manipulación de lenguajes de
programación (compiladores, analizadores, demostradores de teoremas), así como
en bioinformática, sistemas financieros, protocolos de sincronización, etc.
METAFONT
METAFONT es un lenguaje de
programación usado para definir fuentes vectoriales. Es también el
nombre de un intérprete
que ejecuta código METAFONT, convirtiendo las fuentes vectoriales en fuentes de
mapas de bits que pueden ser incluídas en
documentos PostScript.
Historia
Donald Knuth empezó a trabajar en la
creación de software tipográfico o de fuentes en 1977, y produjo la primera
versión de METAFONT en 1979. Debido a deficiencias en el lenguaje
METAFONT original, Knuth desarrolló un nuevo sistema METAFONT en 1984
y este sistema es el que se usa hoy en día (con pequeñas revisiones); Tiene un
sistema de versiones similar al de TeX, en el que el número de versión crece
asintóticamente hacia el número e
en cada revisión. Este lenguaje de programación fue inventado por Donald Knuth
como un complemento del sistema TeX. Una de sus características es que todas
las formas de glifos están definidas con potentes
ecuaciones geométricas, por ejemplo, se puede definir un punto dado como la
intersección de un segmento lineal y una curva de Bézier.
Notas técnicas
A diferencia de
los formatos de fuente comunes (tales como TrueType
o PostScript Type 1), una fuente METAFONT
está conformada principalmente de trazos con "plumas" de
ancho-finito, junto con regiones rellenas. De esta manera, en lugar de
describir directamente el contorno del glifo, un archivo METAFONT describe los
trayectos de la pluma. Algunas fuentes sencillas, tales como las fuentes
caligráficas para matemáticas en la familia Computer Modern, utilizan una sola
brocha con una pluma relativamente grande para definir cada trazo visual en los
glifos.
Las fuentes más
complejas, tal es el caso de las fuentes de texto Roman en la familia Computer
Modern, utilizan una pluma pequeña para trazar alrededor del contorno de los
trazos visuales, los cuales son posteriormente rellenados; el resultado es muy
similar a una fuente de contorno, pero con esquinas ligeramente suavizadas
definidas por la forma de la pluma.
Dado que las
formas de la fuente están definidas por ecuaciones
en lugar de números directamente codificados, es posible tratar parámetros como
la razón de aspecto, la inclinación de la fuente, el ancho del pincel, el
tamaño serif,
etcétera como parámetros de entrada en cada definición de glifo. Así, cambiando
la definición de uno de estos parámetros en el archivo METAFONT, es posible
producir un cambio consistente en toda la fuente.
Computer Modern
Roman ilustra a muchos usuarios esta característica; una instalación típica de
TeX incluye un número de versiones de la fuente en tamaños de 5pt a 17pt, con
los mismos anchos de pincel en todos los tamaños (en lugar de incrementarse
como si la fuente fuese agrandada a escala) y las razones de aspecto de
ensanchamiento en los tamaños pequeños para mayor legibilidad. Además, las
fuentes Computer Modern typewriter y sans-serif
están definidas usando esencialmente el mismo archivo METAFONT como la fuente
Roman, pero con diferentes parámetros globales.
Las curvas en
METAFONT están definidas no como secciones cónicas sino como splines cúbicos,
para mayor versatilidad y sencillez de cálculo. Puede renderizar cualquier tipo
de salida gráfica, no solo cincelados. Sin embargo, se prefiere MetaPost
con su salida PostScript para ilustraciones avanzadas. Es mayormente invocada
sin petición directa del usuario.
El formato DVIpuede
contener referencias a tipos de fuente, en lugar de solo conjuntos de cinceles
de raster o vectoriales que otros formatos como PostScript permiten.
Consecuentemente los cinceles en los tipos de fuente necesitan ser accedidos
tantas veces como se hagan peticiones para visualizado, impresión o conversión a
un archivo DVI. La mayoría de las distribuciones TeX están configuradas para
que cualquier fuente no disponible en la resolución requerida son generadas por
llamadas a METAFONT. Los tipos de fuente son entonces almacenadas para reusarse
posteriormente.
METAFONT puede
funcionar también en modo interactivo, y tiene comandos para mostrar por
pantalla las imágenes que produce. Knuth dijo que él usa METAFONT como una calculadora
de escritorio para resolver ecuaciones complicadas, aunque ahora usa MetaPost
para las ilustraciones matemáticas.
Dado que METAFONT no puede crear fuentes vectoriales directamente, los polacos
JNS team desarrollaron METATYPE1 (basados en MetaPost)
para crear fuentes PostScript Type 1. Su gran desventaja es que no es posible
utilizar plumas lo cual reduce enormemente el poder del lenguaje METAFONT.
Uso
Mientras los
diseñadores de fuentes reconocidos, tal como Hermann Zapf, han colaborado con Knuth
para crear nuevas fuentes, el sistema no ha sido ampliamente adoptado por
diseñadores de fuentes profesionales.
Miranda
Miranda fue desarrollado entre los años 1985
y 1986
por David Turner. Se trata de un lenguaje
de programación funcional sucesor de SASL y KRC. El principal
objetivo de este lenguaje era el desarrollar una versión comercial de un lenguaje
funcional:
·
no-estricto.
·
puramente funcional.
Fue comercializado
por Research Software Ltd. de Inglaterra, la cual registró la palabra 'Miranda'
como marca comercial. Fue el primer lenguaje puramente funcional en ser
destinado al uso comercial y no al académico La solución a muchos ejemplos de
programas resulta más simple en Miranda que en la mayoría de los lenguajes de
programación excepto quizás APL, y como otros lenguajes funcionales,
sus usuarios comentan que este les permite producir programas fiables en un
menor período en comparación con el otros lenguajes de programación usados
anteriormente
Salió por primera
vez en 1985
como un interprete rápido en C para los sistemas operativos Unix,
con sucesivas entregas en 1987 y 1989. El último lenguaje de programación Haskell
es similar un muchos aspectos a Miranda. Todos los lenguajes de la familia de
MIRANDA se caracterizan porque los argumentos se pasan a las funciones sin evaluar
(lazy evaluation): el argumento de una función se evalúa cuando la función
necesita su valor. Un programa en este tipo de lenguajes (llamado script)
consiste en un conjunto de declaraciones de ecuaciones recursivas y datos de
tipo algebraico. La palabra set es importante aquí: el orden de las ecuaciones
es, en general, irrelevante, y no es necesario definir una entidad inicial para
su uso.
Es raro la
necesidad del uso de corchetes y no es necesario el uso de terminaciones de
instrucción (;, endif,…)
Los comentarios se
inician utilizando los caracteres ‘||’ y continua hasta el final de la línea.
Una convención alternativa de comentarios es la que afecta a todo el fichero
fuente, conocida como “literate srcript”, en la cual todo línea es comentario a
no ser que empiece por el signo’ >’ Los tipos básicos de datos de Miranda
son char, num y bool. Una cadena de caracteres no es más
que una lista de chars, mientras que num puede representar tanto a enteros como
a reales sin necesidad de conversiones explícita
Las tuplas
son secuencias de elementos de distintos tipos, análogo a los registros
de los lenguajes parecidos a Pascal,
y son escritos entre paréntesis this_employee = ("García, Paco",
10560, False, 35)La lista en cambio, es la estructura de datos
más usada en Miranda. Se escribe entre corchetes y separa cada elemento por
comas, los cuales deben de ser del mismo tipo. week_days =
["Mon","Tue","Wed","Thur","Fri"]
La concatenación de listas es mediante ‘++’,
la diferencia con ‘--‘, la construcción con ‘:’ comprobar el tamaño con ‘#’ y
devolver el elemento de cierta posición de la lista (indexación) mediante
‘!’ days = week_days ++
["Sat","Sun"]
Existen muchos
atajos para construir listas: ‘..’ es usado para listas cuyos elementos forman
un serie aritmética, con la posibilidad de especificar un orden de incremento a
parte de en 1: fac n = product
[1..n]
Modula-2
Modula-2 es un lenguaje de
programación cuyo autor es Niklaus Wirth,
autor también del lenguaje Pascal.
Como novedad respecto a este último lenguaje, introduce el concepto de módulo,
y de encapsulación. Del código
contenido en un módulo, sólo se facilita una interfaz
pública denominada módulo de definición, permaneciendo el resto oculto
(encapsulado) para un desarrollador
ajeno, lo que facilita el mantenimiento de dichas estructuras de programación a
la vez que imposibilita la modificación de las mismas a cualquiera que no posea
el código de su módulo de implementación.
Este concepto de
módulo constituye el antecedente de las clases u objetos que se observan en el
concepto moderno de Programación
Orientada a Objetos (POO); sin embargo, la incapacidad de declarar
múltiples instancias de los módulos, así como la ausencia de todo tipo de
herencia, impiden afirmar que Modula-2 sea un lenguaje orientado a objetos
propiamente dicho.
Modula-2 se
utiliza principalmente en las universidades por su excelente adaptación a la
enseñanza de lenguajes estructurados, pero en el ámbito laboral su difusión ha
sido escasa frente al predominio de C, lo que ha contribuido a crear un
distanciamiento entre universidad y mercado laboral. Existen compiladores
de Modula-2 como Mocka o GNU Modula-2
(para GNU/Linux y resto de sistemas soportados
por GCC),
FST (para MS-DOS)
o Native XDS (para Windows) entre otros.
Modula-3
Modula-3 es un lenguaje de
programaciónimperativo,
estructurado
y modular,
concebido como el sucesor de Modula-2. Las principales características
del lenguaje son su simplicidad y la seguridad, además de conservar la potencia
de los lenguajes de programación de sistemas.
Historia
Modula-3 fue
diseñado por Luca Cardelli, Jim Donahue, Mick Jordan, Bill Kalsow y Greg Nelson
en el DEC
Systems Research Center (DEC SRC) y en Olivetti
a finales de los 80. Su diseño estuvo muy influido por el
lenguaje Modula-2+, que se usaba en el DECSRC en aquel momento, y era el
lenguaje en el que estaban escritos los Sistemas Operativos para la máquina VAX DEC
Firefly.
El proyecto de
Modula-3 comenzó en Noviembre del 86, cuando Maurice Wilkes escribió a Niklaus Wirth con ideas para una nueva
versión de Modula.
Wilkes había estado trabajando para DEC justo antes de ello, y había vuelto a Inglaterra
para unirse al Olivetti Research Strategy Board. Wirth ya había comenzado a
trabajar con Oberon
, pero no tuvo problemas con que el equipo de Wilkes continuara desarrollando
usando el nombre de "Modula".
Modula-3 pretendía
continuar con la tradición de PASCAL, además de añadir nuevas
construcciones para conseguir una programación práctica para el mundo real. En
particular, añadía soporte para programación genérica (parecido a las plantillas),
multiprogramación, manejo de excepciones, recolección de
basura, programación
orientada a objetos, principio de
ocultación y encapsulamiento de código. El mayor
objetivo en el diseño de Modula-3 era crear un lenguaje que implementara las
características más importantes de los modernos lenguajes
imperativos de un modo simple. Por ello, se omitieron características
complicadas y "peligrosas" como la herencia múltiple y la sobrecarga
de operadores.
La definición del
lenguaje se completó en Agosto del 88, y una versión
actualizada salió en Enero del 89. Los compiladores de DEC y Olivetti
le siguieron enseguida, al igual que las implementaciones de terceros.
Durante los 90, Modula-3 se difundió considerablemente
como lenguaje docente, pero nunca fue ampliamente adoptado para usos
industriales. También pudo haber contribuido en esto la desaparición de DEC, un
partidario clave para Modula-3. En cualquier caso, a pesar de la simplicidad y
potencia del lenguaje, parece que hay poca demanda para un lenguaje compilado altamente estructurado
e implementado como un lenguaje orientado a
objetos restringido. Durante algún tiempo, un compilador
de código cerrado (llamado CM3) y un entorno
de desarrollo integrado (llamado Reactor) y también una Máquina Virtual de
Java eran ofrecidos por Critical Mass Inc., pero dicha compañía
cerró en el año 2000.
Características del
lenguaje
El manejo de excepciones está basado en un
sistema de bloques TRY...EXCEPT bastante común. Una característica que no se ha
adoptado en otros lenguajes (a excepción de Python y Scala)
es la construcción del EXCEPT definido como un pseudo-CASE, en el que cada
posible excepción es un caso en una cláusula EXCEPT. Modula-3 también incluye
la construcción LOOP...EXIT...END, en la que el bucle se repite hasta que
se encuentra un EXIT (esta estructura es equivalente a un bucle simple dentro
de un TRY...EXCEPT)
El empleo de objetos
se mantiene intencionadamente en su vertiente más simple. Un tipo de objeto (clase) se crea con la declaración OBJECT.
Ésta tiene basicamente la misma sintaxis que una declaración RECORD, aunque un
objeto así declarado es un tipo de referencia mientras que RECORD no lo es.La
construcción REVEAL de Modula-3 proporciona un mecanismo conceptualmente simple
y muy potente para ocultar los detalles de implementación a los clientes, con
distintos niveles de "amistad".
En resumen, las
características del lenguaje son:
·
Resaltado explícito de código inseguro
·
Tipo
de dato fuerte, equivalencia estructural de tipos
·
Objetos
·
Threads
Modula-3 es uno de
los pocos lenguajes en los que la evolución de sus características está documentada.
En System Programming with Modula-3, se tratan cuatro puntos esenciales
del diseño del lenguaje. Estos temas son Estructural vs. Equivalencia
Semántica, reglas para los subtipos, módulos genéricos y tipos de parámetros
(como READONLY)
Implementaciones
Existen bastantes compiladores
disponibles, y la mayoría de ellos son de código abierto. DEC-SRC M3. Es un
compilador desarrollado en DEC
para Unix,
Windows NT y Windows
95. Para instalarlo en Windows hay que tener Microsoft Visual C++ 4.0 o superior.
1.
Critical Mass CM3. Es un completo sistema Modula-3,
fácil de usar y de instalar y con considerables mejoras sobre su antecesor,
DEC-SRC M3. Funciona en varias plataformas, incluyendo Linux
y Win32.
2.
Polytechnique Montreal Modula-3 PM3. Es un
compilador de código abierto basado en SRC, extendido y mejorado por un gran
número de personas y organizaciones. Actualmente se está fusionando con CM3
3.
Persistent Modula 3. Es una extensión de Modula-3
basada en PM3. Es el resultado de un trabajo de investigación en estado beta.
Sólo se ha instalado en Linux, Solaris y
Alpha/OSF.
4.
EzM3, una implementación liviana y fácilmente portable,
desarrollada junto a CVSup.
5.
HM3, un sucesor del PM3 versión 1.1.15 con el uso
de hilos NPTL probado sólo en Linux
Natural
NATURAL es un lenguaje
de cuarta generación de Software AG. Tiene la sentencia de control
de flujo "ESCAPE TOP", la cual es similar a "continue" en
C, o "Continue For" en "Visual Basic.NET 2005", excepto que
también funciona dentro de una subrutina para retornar desde la misma y
continuar con la siguiente iteracción del bucle de proceso. Como
"continue", evita gran número de indentaciones cuando se usan bloques
anidados de instrucciones dentro de cualquier sentencia de tipo bucle. Los
niveles de indentación pueden ser ajustados automáticamente con el comando
STRUCT dentro del Editor de NATURAL.
NetREXX
NetREXX es un lenguaje de
programación para la máquina virtual Java desarrollado en IBM por
Michael Cowlishaw con fuertes influencias de los lenguajes de programación REXX
(en cuya familia se considera incluido) y Java.
Actualmente existe solamente una implementación de este lenguaje que puede
descargarse y usarse gratuitamente desde la página oficial del lenguaje en IBM.
El compilador NetREXX de IBM es una aplicación Java que puede traducir el
código fuente NetREXX a código fuente Java, compilarlo a bytecodes Java
o interpretarlo directamente.
NQC
NQC, Not Quite C, No Suficiente C, es un lenguaje de
programación parecido al C, para
programar el RCX de LEGO.
Fue desarrollado por un ingeniero de Motorola
llamado Dave Baum y es totalmente gratuito. Funciona desde la línea de comandos,
esto significa que su funcionamiento es muy parecido al MS-DOS,
aunques mucho más comodo utilizarlo con el RCX Comand Center.
Programación del
RCX mediante NQC
En el libro de
Dave Baum "Dave's Baum Definitive Guide To LEGO® MINDSTOMS" se puede
encontrar toda la documentación necesaria para programar. Lo único que se necesita es un
editor de texto, como puede ser el Bloc de Notas que acompaña a todas las
versiones de Windows, y el compilador.
Para aprender este lenguaje de programación existe la posibilidad de seguir el
libro de Baum, o el preparado por Mark Overmars.
El RCX Comand
Center es un entorno de programación que facilita la escritura de los
programas, su depuración
y su descarga al RCX. También dispone de una extensa ayuda sobre el NQC
disponible en línea. Entre otros extras dispone de un teclado para facilitar la
creación de código musical y de un joystick para enviar órdenes al robot desde
el PC.
Nyquist
Nyquist es un lenguaje de
programación para composición y síntesis de sonido. Desciende del
lenguaje Fuge, creado por Chris Fraley. Uno de los desarrolladores posteriores
de Fugue, Roger Dannenberg,
implementó Nyquist como extensión sonora, del intérprente de Xlisp de David
Michael Betz.Como dialecto de Lisp, incluye todas las bendiciones y
dificultades de la programación funcional. Siendo una característica relevante,
que incluye el control del tiempo en la semántica misma del lenguaje. Además,
es extensible mediante la programación orientada a objeto, implementeada en
Xlisp. Actualmente funciona en las plataformas de Unix/linux, MacOS y Windows.
Nyquist en
Audacity
Audacity
es un editor de sonidos tan ligero como potente. Entre sus opciones está
precisamente, la posibilidad de programar en una versión especial del lenguaje
Nyquist. Para comprobarlo, vaya al menú efecto, tras crear una pista de audio y
seleccionar una porción de tiempo. Allí seleccione "Comando
Nyquist...", lo cual le permitirá programar en Nyquist, dentro del entorno
de Audacity. (Para probar los ejemplos anteriores, omita la función play)
Otra característica muy interesante de la relación Nyquist-Audacity es la
posibilidad de desarrollar plugins con interfaz visual, de manera rápida y
sencilla.
P Sharp
P Sharp
Desarrollado en la Universidad de Edimburgo Paradigma Programación lógica, programación concurrente. Apareció en
2003 Y Diseñado por Jonathan J. Cook Última versión estable 1.1.3
Implementaciones Visual Studio .NET,
Mono Influido por Prolog Sistema
operativo Multiplataforma Licencia GNU.
El lenguaje de
programación P# (o P Sharp) es un compilador de lenguaje Prolog concurrente que
integra elementos del lenguaje C#, creado para desarrollar aplicaciones en la
plataforma .NET de Microsoft. P# puede exportar su código a C#.
Parlog
El PARLOG (de PARallel LOGic) es
un lenguaje de programación lógica
similar al Prolog.
La diferencia sustancial es que en parlog se define un encabezado en el cuerpo
de cada cláusula (regla) y en ese encabezado podemos definir condiciones que
deben ser satisfechas para poder ejecutar el cuerpo de la cláusula.Este
lenguaje está orientado al desarrollo de sistemas concurrentes o con procesos que
se ejecuten en paralelo, por eso el nombre de PARLOG - PARALLEL LOGIC.
Pascal
Pascal es un lenguaje de
programación desarrollado por el profesor suizoNiklaus Wirth entre los años 1968 y 1969 y
publicado en 1970. Su objetivo era crear un lenguaje que facilitara el
aprendizaje de programación a sus alumnos, utilizando la programación
estructurada y estructuración de datos. Sin embargo con el tiempo su
utilización excedió el ámbito académico para convertirse en una herramienta
para la creación de aplicaciones de todo tipo.
Pascal se
caracteriza por ser un lenguaje de programación estructurado fuertemente
tipificado. Esto implica que:
·
El código está dividido en porciones fácilmente
legibles llamadas funciones o procedimientos. De esta forma Pascal
facilita la utilización de la programación estructurada en oposición al
antiguo estilo de programación monolítica.
·
El tipo de dato de todas las variables debe
ser declarado previamente para que su uso quede habilitado.
El nombre de
Pascal fue escogido en honor al matemático Blaise Pascal.
Características
únicas
A diferencia de
lenguajes de programación descendientes de C, Pascal
utiliza el símbolo ":=" para la asignación en vez de "=".
Si bien el segundo es más conocido, la práctica ha demostrado que muchos
usuarios utilizan el símbolo de igualdad para comparar valores en lugar del
comparador de C que es el símbolo ==. Esta sintaxis conduce a muchos errores o bugs
difíciles de rastrear en código C. Dado que Pascal no permite asignaciones
dentro de expresiones y utiliza sintaxis distintas para asignaciones y
comparaciones, no sufre estos errores.
Además sus
programas tienen definidas dos partes: declarativa y ejecutiva. En la primera
debe aparecer todo lo que se usará en la segunda, de lo contrario se detecta
como desconocido y evita ciertas incomprensiones como veremos más adelante. En
la parte declarativa se enuncian Unit existentes, procedimientos, funciones,
variables, constantes y nuevos tipos de datos estructurados.
Otra diferencia
importante es que en Pascal, el tipo de una variable se fija en su definición;
la asignación a variables de valores de tipo incompatible no están autorizadas
(en C, en cambio, el compilador hace el mejor esfuerzo para dar una
interpretación a casi todo tipo de asignaciones). Esto previene errores comunes
donde variables son usadas incorrectamente porque el tipo es desconocido; y
también evita la necesidad de notación húngara, que vienen a ser
prefijos que se añaden a los nombres de las variables y que indican su tipo.
Implementaciones
Las primeras
versiones del compilador de Pascal, entre ellas la más distribuida fue UCSD
Pascal, traducían el lenguaje en código para una máquina virtual llamada máquina-P. La gran
ventaja de este enfoque es que para tener un compilador de Pascal en una nueva
arquitectura de máquina solo hacía falta reimplementar la máquina-P. Como
consecuencia de esto, solo una pequeña parte del intérprete tenía que ser
reescrita hacia muchas arquitecturas.
En los años 1980, Anders Hejlsberg escribió el compilador
Blue Label Pascal para la Nascom-2. Más tarde fue a trabajar para Borland
y reescribió su compilador que se convirtió en Turbo Pascal para la IBMPC. Este nuevo compilador se vendió por
$49, un precio orientado a la distribución masiva. El económico compilador de
Borland tuvo una larga influencia en la comunidad de Pascal que comenzó a
utilizarlo principalmente en el IBM PC. En busca de un lenguaje estructurado
muchos aficionados al PC reemplazaron el BASIC por este producto.
Dado que Turbo Pascal sólo estaba disponible para
una arquitectura, traducía directamente hacia el código máquina del Intel 8088,
logrando construir programas que se ejecutaban mucho más rápidamente que los
producidos en los esquemas interpretados.
Durante los años 1990, estuvo disponible la tecnología
para construir compiladores que pudieran producir código para diferentes
arquitecturas de hardware. Esto permitió que los compiladores de Pascal
tradujeran directamente al código de la arquitectura en que corre. Con Turbo
Pascal versión 5.5, Borland agregó programación
orientada a objetos a Pascal. Sin embargo, Borland después decidió
mejorar esa extensión del lenguaje introduciendo su producto Delphi, diseñado a partir de estándar
Object Pascal, propuesto por Apple como base. Borland también lo llamó Object Pascal en las primeras versiones,
pero cambió el nombre a 'lenguaje de programación Delphi' en sus últimas
versiones.
Compiladores
disponibles públicamente
Varios
compiladores de Pascal están disponibles para el uso del público en general:
Epox
Compilador GNU
Pascal (GPC), escrito en C, basado en GNU Compiler
Collection (GCC). Se distribuye bajo licencia GPL.
Free
Pascal está escrito en Pascal (el compilador está creado usando Free
Pascal), es un compilador estable y potente. También distribuido libremente
bajo la licencia GPL. Este sistema permite mezclar código Turbo Pascal con
código Delphi, y soporta muchas plataformas y sistemas operativos.
Turbo Pascal fue el compilador Pascal
dominante para PC durante los años 1980
y hasta principios de los años 1990,
muy popular debido a sus magníficas extensiones y tiempos de compilación
sumamente cortos. Actualmente, versiones viejas de Turbo Pascal (hasta la 7.0)
están disponibles para descargarlo gratuito desde el sitio de Borland (es
necesario registrarse).
Delphi es un
producto tipo RAD (Rapid Application Development) de Borland. Utiliza el
lenguaje de programación Delphi, descendiente de Pascal, para crear
aplicaciones para la plataforma Windows. Las últimas versiones soportan
compilación en la plataforma .NET.
Kylix
es la versión más nueva de Borland reiterando la rama de Pascal de sus
productos. Es descendiente de Delphi, con soporte para el sistema operativo
Linux y una librería de objetos mejorada (CLX). El compilador y el IDE están
disponibles para uso no comercial. Actualmente este proyecto está
descontinuado.
Actualidad
Hoy en día se
siguen usando programas como turbo pascal para enseñar en escuelas de
computación.
Pauscal
Pauscal es un lenguaje de programación para Microsoft Windows de 32
bits desarrollado por Paul Guerra. La característica particular de
este Lenguaje de
programación es que su sintaxis está basada en el idioma español.
Este lenguaje es potente y no sólo se limita a fines educativos.
Pauscal funciona
satisfactoriamente en Windows 95, Windows
98, Windows 98 SE, Windows
ME, Windows XP, Windows Vista y Windows
7 aunque aún no en ReactOS. Las aplicaciones no requieren
ningún tipo de soporte externo para poder ejecutarse, ya que el compilador
genera código nativo. Esto incrementa la velocidad de ejecución, porque los
programas se ejecutan directamente en el procesador.
Para simplificar
la creación de aplicaciones, Pauscal incluye Visual Pauscal, el cual permite
diseñar visualmente las ventanas de programas.
Funcionamiento
Interno del Lenguaje
Este lenguaje no
es de código abierto por lo que solo se conoce que los cinco ejecutables
principales utilizados fueron programados en Visual Basic® los cuales son
Pauscal.exe, Visual Pauscal.exe, PauscalUninst.exe, compiler.exe y
debugger.exe.1 El resto de binarios incluidos son
propiedad de Borland® y Microsoft® según sea el caso y su inclusión muy
seguramente es ilegal, al no dejar clara las licencias de su utilización y
distribución, por lo que debe ser advertido a sus usuarios para evitar que
violen la ley y eviten afrontar posibles futuros problemas legales.
Plankalkül
Plankalkül fue el primer lenguaje de programación, que fue
creado por el científico alemán Konrad Zuse en los años 1943 a 1946 se
considera un lenguaje de alto nivel, pero no se publicó hasta 1972.Zuse querían
desarrollar un método sofisticado para el desarrollo de las tareas que el
equipo debe hacer.
Historia
Konrad Zuse
construyó varios ordenadores de los relés electromagnéticos complejos, pero en
1945 la guerra ha destruido todos, pero un solo modelo, el Z4. Después de la
destrucción de sus equipos, Konrad se mudó a un pueblo llamado Hinterstein,
donde comenzó a trabajar solo en su proyecto de desarrollo de su lenguaje de
programación, un proyecto que comenzó en 1943 como una propuesta para su tesis
de doctorado que señaló a su Plankalkül lenguaje de programación, lo que
significa que el programa de cálculo.
Zuse en 1948
publicó un artículo en el Archiv der Mathematik - una revista que publica
trabajos de alta calidad en todas las áreas de las matemáticas -, pero su
publicación no produjo una gran cantidad de información, es decir, no se
adquiere relevancia en el ámbito académico / profesional en aquel entonces.
Heinz Rutishauser (co-fundador de ALGOL) dijo: "El primer intento de
desarrollar un lenguaje algorítmico se llevó a cabo en 1948 por K. Zuse Su
notación era bastante general, pero la propuesta nunca alcanzó la consideración
que merece.."
La lengua fue muy
completa su temporada de reproducción y tenía algunas de sus características
más avanzadas en el área de estructuras de datos. El tipo más simple es el de
un solo bit de ella y se construyeron los tipos de números enteros y números
reales. El tipo real utilizado un esquema de calificación y los dos "poco
escondido", que se utiliza actualmente para evitar el almacenamiento de
los bits más significativos de la parte fraccionaria de un valor normalizado.
La lengua tiene tres variables Plankalkül específicos para el desarrollo de un
programa, entre ellas podemos destacar las letras V (el paso de parámetros), Z
(el almacenamiento de los valores intermedios) y R (ver resultados). Uno de los
mayores obstáculos para la aplicación del lenguaje Plankalkül ocurrió debido a
que utiliza la misma sintaxis difícil de entender, es decir, un desarrollador
en particular tomaría mucho tiempo para entender las secuencias lógicas utilizadas
en el programa. Por lo general, las variables que determina el idioma utilizado
por cuatro líneas. La primera línea fue declarada una de las letras V, Z o R,
la segunda línea se declaró la variable del índice, fue declarado el tercer
componente de la variable, y por último la cuarta línea es el tipo declarado de
la variable, por ejemplo, 5.0 (cinco bits), pero también podemos encontrar
ejemplos de programas escritos en forma lineal.
Características
Este lenguaje de
programación tiene, entre otros indicios de asignación, llamadas a funciones
(subrutinas), la aritmética de punto flotante, matrices (arrays), matemáticas o
lógicas sólo se pueden aplicar a las variables del mismo tipo, tipos de datos
compuestos, el tratamiento excepción, entre otras características.
Otras
características
·
Introduce la operación de asignación, por ejemplo
V1 + V2 = R1. El signo fue introducido en el ALGOL 60 GAMM-comité, pero el
comité no decidió aceptarlo.
·
Declaraciones comparativas del tipo: V1 = V2
=>R1 , es decir, compara la variable 1 con la variable dos, y si son iguales
le asigna el valor “verdadero” a la variable R1 y sino el valor “falso”.
·
Planes de programación, llamadas a subprogramas y
diferentes criterios de parada del programa.
·
Es un lenguaje de programación imperativo de alto
nivel.
·
Declaraciones condicionales, pero sin introducir el
“ELSE”.
·
Las funciones no son recurrentes.
·
Bucles (while).
·
Los datos se escriben en: punto flotante, punto
fijo, complejos.
·
Operaciones con lógica de predicados y algebra de
Boole.
·
Poderosas operaciones con listas y parejas de
listas.
·
NO hay recursividad.
·
Manejo de arrays, registros, estructuras de datos
jerárquicas y listas de parejas.
·
Manejo de las excepciones aritméticas.
·
Aplicaciones para jugar al ajedrez descritas en más
de 60 páginas.
Processing
Processing es un lenguaje de
programación y entorno
de desarrollo integradode código abierto
basado en Java,
de fácil utilización, y que sirve como medio para la enseñanza y producción de
proyectos multimedia e interactivos
de diseño digital. Fue iniciado por Ben Fry y Casey Reas a partir de
reflexiones en el Aesthetics
and Computation Group del MIT Media Lab dirigido por John Maeda. Processing
es desarrollado por artistas y diseñadores como una herramienta alternativa al software propietario. Puede ser utilizado
tanto para aplicaciones locales así como aplicaciones para la web (Applets). Se
distribuye bajo la licencia GNU GPL. Al estar basado en Java, puede heredar
todas sus funcionalidades, convirtiéndose en una herramienta poderosa a la hora
de encarar proyectos complejos.
Prolog
El Prolog (o PROLOG), proveniente del francésPROgrammation en LOGique,1
es un lenguaje de
programación lógico e interpretado, bastante conocido en el medio de
investigación en Inteligencia
Artificial.
Historia
Se trata de un lenguaje de
programación ideado a principios de los años 70 en la Universidad de
Aix-Marseille I (Marsella, Francia)
por los profesores Alain Colmerauer y Philippe Roussel. Nació de un proyecto que
no tenía como objetivo la implementación de un lenguaje de programación, sino
el procesamiento de lenguajes naturales. Alain Colmerauer y Robert Pasero
trabajaban en la parte del procesado del lenguaje natural y Jean Trudel y
Philippe Roussel en la parte de deducción e inferencia del sistema. Interesado
por el método de resolución SL, Trudel persuadió a Robert Kowalski para que se
uniera al proyecto, dando lugar a una versión preliminar del lenguaje Prolog a
finales de 19712 y apareciendo la versión
definitiva en 1972.3 Esta primera versión de Prolog fue
programada en ALGOL W.
Inicialmente se
trataba de un lenguaje totalmente interpretado hasta que, en 1983, David H.D.
Warren desarrolló un compilador capaz de traducir Prolog en un conjunto de
instrucciones de una máquina abstracta denominada Warren Abstract Machine, o
abreviadamente, WAM. Desde entonces Prolog es un lenguaje
semi-interpretado.
Si bien en un
principio se trataba de un lenguaje de uso reducido, la aparición de
intérpretes del mismo para microordenadores
de 8 bits (ej: micro-PROLOG) y para ordenadores
domésticos de 16 bits (ej: Turbo Prolog
de Borland,
entre otros muchos) a lo largo de la década de 1980 contribuyó notablemente a
su popularización.4 Otro importante factor en su
difusión fue la adopción del mismo para el desarrollo del proyecto de la quinta
generación de computadoras a principios de la década de los 80,5
en cuyo contexto se desarrolló la implementación paralelizada
del lenguaje llamada KL1 y del
que deriva parte del desarrollo moderno de Prolog.
Las primeras
versiones del lenguaje diferían, en sus diferentes implementaciones, en muchos
aspectos de sus sintaxis, empleándose mayormente como
forma normalizada el dialecto propuesto por la Universidad de Edimburgo6
, hasta que en 1995 se estableció un estándar ISO (ISO/IEC 13211-1), llamado
ISO-Prolog. Prolog se enmarca en el paradigma
de los lenguajes lógicos y
declarativos,
lo que lo diferencia enormemente de otros lenguajes más populares tales como Fortran,
Pascal,
C o Java.
Vuelta atrás (backtracking)
En los lenguajes de programación
antes mencionados, las instrucciones se ejecutan normalmente en orden
secuencial, es decir, una a continuación de otra, en el mismo orden en que
están escritas, que sólo varía cuando se alcanza una instrucción de control (un
bucle,
una instrucción condicional o una transferencia).
Los programas en
Prolog se componen de cláusulas de Horn
que constituyen reglas del tipo "modus ponendo ponens", es decir,
"Si es verdad el antecedente, entonces es verdad el consecuente".
No obstante, la forma de escribir las cláusulas de Horn es al contrario de lo habitual.
Primero se escribe el consecuente y luego el antecedente. El antecedente puede
ser una conjunción de condiciones que se denomina secuencia de objetivos.
Cada objetivo se separa con una coma y puede considerarse similar a una
instrucción o llamada a procedimiento de los lenguajes imperativos. En Prolog
no existen instrucciones de control. Su ejecución se basa en dos conceptos: la
unificación y el backtracking.
Gracias a la
unificación, cada objetivo determina un subconjunto de cláusulas
susceptibles de ser ejecutadas. Cada una de ellas se denomina punto de
elección. Prolog selecciona el primer punto de elección y sigue ejecutando
el programa hasta determinar si el objetivo es verdadero o falso.
En caso de ser
falso entra en juego el backtracking, que consiste en deshacer todo lo
ejecutado situando el programa en el mismo estado en el que estaba justo antes
de llegar al punto de elección. Entonces se toma el siguiente punto de elección
que estaba pendiente y se repite de nuevo el proceso. Todos los objetivos
terminan su ejecución bien en éxito ("verdadero"), bien en fracaso
("falso").
Expresiones
Prolog cuenta con
operadores para la unificación y comparación, sea con evaluación o sea simbólica,
como los siguientes:
X is Y %unificación
con evaluación.
X = Y
%unificación simbólica
X=:=Y
%comparación con evaluación
X == Y %comparación
simbólica.
Listas
La representación
de hechos simples no es lo común en la clasificación de elementos, sino que se
agrupan los elementos de un mismo tipo en una lista.
Las listas son
colecciones de elementos en Prolog. Una lista se divide en dos partes: Cabeza.
Es el primer elemento de la lista. Cola. Es una lista con el resto de los
elementos de la lista. La cabeza y la cola de una lista se separan con el
símbolo "|".
Pure data
Pure Data (o Pd) es un lenguaje de programación gráfico
desarrollado por Miller Puckette
durante los años 90 para la creación de música
computerizada interactiva y obras multimedia.
Aunque Puckette es el principal autor del software, Pd es un proyecto de código abierto y tiene una gran base de
desarrolladores trabajando en nuevas extensiones al programa. Está publicado
bajo una licencia similar a la licencia BSD.
Pd es muy similar
en alcance y diseño al programa original de Puckette, Max(desarrollado cuando
él estaba en IRCAM),
y es hasta cierto grado interoperable con Max/MSP,
el sucesor comercial del lenguaje Max. Ambos Pd y Max son ejemplos discutibles
de lenguajes de programación de "flujo de datos". En este tipo de
lenguajes, funciones u "objetos" son conectados o
"parcheados" unos con otros en un ambiente gráfico que modela el
flujo del control y el audio. A diferencia de la versión original de Max, sin
embargo, Pd siempre fue diseñado para hacer procesado de señales y tasas de
control en la CPU nativa, en vez de descargar la síntesis y el proceso de
señales a un tablero de PDS (como el Ariel ISPW que era usado para Max/FTS). El
código de Pd es la base de las extensiones MSP de David Zicarelli al lenguaje
Max para hacer proceso de audio en software.
Como Max, Pd tiene
una base modular de código con externos u objetos que son utilizados como
bloques de construcción para programas escritos en el software. Esto hace el
programa arbitrariamente extensible a través de una API
pública, y alienta a los desarrolladores a añadir sus propias rutinas de audio
y control, ya sea en el lenguaje de programación C o, con la ayuda de otros
externos, en Python, Javascript,
Ruby,
y potencialmente otros lenguajes también. Sin embargo, Pd es un lenguaje de
programación en sí mismo. Unidades de código modulares y reusables, escritas
nativamente en Pd, llamadas "parches" o "abstracciones",
son usadas como programas independientes y compartidas libremente entre la
comunidad de usuarios de Pd, y ninguna otra habilidad de programación es
requerida para usar Pd pero ayuda.
Con la adición del
externo "Entorno Gráfico para Multimedia" (GEM, por
su nombre en inglés), y otros externos diseñados para trabajar con él (como
Pure Data Packet, PiDiP para Linux, framestein para Windows,
GridFlow para proceso de matrices n-dimensionales que integra Pure Data con el
lenguaje de programación Ruby, etc.), es posible crear y manipular
vídeo, gráficos OpenGL, imágenes, etc, en tiempo real con
aparentemente infinitas posibilidades de interactividad con audio, sensores
externos, etc.
Adicionalmente, Pd
está diseñado nativamente para permitir colaboración en vivo a través de redes
o de Internet,
permitiendo a músicos conectados vía LAN, o incluso en distintas partes del
mundo, hacer música juntos en tiempo real. Las unidades donde se programa el
código se llaman “patch” o abstracciones, son utilizadas como programas independientes
y compartidos libremente entre la comunidad de usuarios de Pd. Los patchs
constan de diferentes objetos interconectados entre ellos. En su parte superior
encontraremos las entradas, donde se les enviaran valores numéricos u otros
tipos de datos, y en la inferior la salida de estos.
También existe la
posibilidad de crear patchs secundarios conocidos como subpatchs. Están dentro
del patch principal. Se crean escribiendo en un objeto las letras “pd” seguidas
de un espacio y el nombre que se le quiera dar a ese subpatch, como se muestra
en la figura. Clicando encima se nos abre la ventana donde encontramos el
código de nuestro subpatch.
El programa tiene
dos estados en los que se puede encontrar el usuario. En modo de edición o en
modo de ejecución. Para cambiar de un estado a otro teclearemos Ctrl+E. Cuando
estamos en el modo edición, podemos modificar el contenido de las cajas, o la
conexión entre ellas. En el modo de ejecución tenemos la posibilidad de poner
en marcha todo el patch, e ir modificando valores durante su reproducción o
cuando este, esté parado. Podemos enviar bangs, modificar valor de variables
dentro de los objetos “números”, o activar y desactivar sectores del código con
el objeto [toggle], activado cuando tiene una cruz y desactivado cuando no.
Python
Python es un lenguaje de
programación de alto nivel
cuya filosofía hace hincapié en una sintaxis muy limpia y que favorezca un
código legible. Se trata de un lenguaje de programación multiparadigma
ya que soporta orientación
a objetos, programación
imperativa y, en menor medida, programación
funcional. Es un lenguaje
interpretado, usa tipado dinámico,
es fuertemente
tipado y multiplataforma.
Es administrado por la Python Software
Foundation. Posee una licencia de código abierto, denominada Python
Software Foundation License,que es compatible con la Licencia pública
general de GNU a partir de la versión 2.1.1, e incompatible en
ciertas versiones anteriores.
Historia
Python fue creado
a finales de los ochenta2 por Guido van Rossum en el Centro para las
Matemáticas y la Informática (CWI, Centrum Wiskunde & Informatica), en los Países Bajos, como un sucesor del lenguaje
de programación ABC, capaz de manejar excepciones
e interactuar con el sistema operativo
Amoeba.El nombre del lenguaje proviene de la afición de su creador
original, Guido van Rossum, por los humoristas británicos Monty Python. Van Rossum es el principal
autor de Python, y su continuo rol central en decidir la dirección de Python es
reconocido, refiriéndose a él como Benevolente
Dictador Vitalicio (en inglés: Benevolent Dictator for Life,
BDFL).
En 1991, van
Rossum publicó el código de la versión 0.9.0 en alt.sources.5
En esta etapa del desarrollo ya estaban presentes clases con herencia,
manejo de excepciones, funciones y los tipos modulares, como:
str, list, dict, entre otros. Además en este lanzamiento inicial aparecía un
sistema de módulos adoptado de Modula-3;
van Rossum describe el módulo como “una de las mayores unidades de programación
de Python”.2 El modelo de excepciones en Python
es parecido al de Modula-3, con la adición de una cláusula else.3
En el año 1994 se formó comp.lang.python,
el foro de discusión principal de Python, marcando un hito en el crecimiento
del grupo de usuarios de este lenguaje.
Python alcanzó la
versión 1.0 en enero de 1994. Una característica de este lanzamiento fueron las
herramientas de la programación
funcional: lambda,
reduce, filter y map. Van Rossum explicó que “hace 12 años, Python adquirió
lambda, reduce(), filter() y map(), cortesía de un hacker de Lisp
que las extrañaba y que envió parches”.6 El donante fue Amrit Prem; no se
hace ninguna mención específica de cualquier herencia de Lisp en las notas de
lanzamiento. La última versión liberada proveniente de CWI fue Python 1.2. En
1995, van Rossum continuó su trabajo en Python en la Corporation for National Research Initiatives
(CNRI) en Reston, Virginia, donde lanzó varias versiones del
software.
Características y
paradigmas
Python es un
lenguaje de programación multiparadigma.
Esto significa que más que forzar a los programadores a adoptar un estilo
particular de programación, permite varios estilos: programación
orientada a objetos, programación
imperativa y programación
funcional. Otros paradigmas están soportados mediante el uso de
extensiones. Python usa tipado dinámico
y conteo de
referencias para la administración de memoria.
Una característica
importante de Python es la resolución dinámica de nombres; es decir, lo que
enlaza un método y un nombre de variable durante la ejecución del programa
(también llamado ligadura dinámica de métodos). Otro objetivo del diseño del
lenguaje es la facilidad de extensión. Se pueden escribir nuevos módulos
fácilmente en C o C++.
Python puede incluirse en aplicaciones que necesitan una interfaz programable.
Aunque la
programación en Python podría considerarse en alguna situación hostil a la
programación funcional tradicional del Lisp, existen bastantes
analogías entre Python y los lenguajes minimalistas de la familia Lisp como
puede ser Scheme.
Filosofía
Los usuarios de
Python se refieren a menudo a la Filosofía Python que es bastante
análoga a la filosofía de Unix. El código que sigue los principios
de Python de legibilidad y transparencia se dice que es "pythonico".
Contrariamente, el código opaco u ofuscado es bautizado como "no
pythonico" ("unpythonic" en inglés). Estos principios fueron
famosamente descritos por el desarrollador de Python Tim Peters en El Zen de
Python
Ratfor
RATFOR (abreviación de RATional FORtran, o
Fortran Racional) es un lenguaje de
programación implementado como un preprocesador para Fortran
66. Proveía al programador de estructuras de datos modernas (no presentes en
Fortran 66) para reemplazar sentencias GOTO y declaración de
números.
Ratfor fue
descrito por primera vez en el libro "Software Tools" (Kernighan y Plauger, 1976),
y fue implementado también esos años cuando los autores se encontraban
trabajando en los Laboratorios Bell
de Teléfonos. Ratfor implementada las siguientes sentencias de manejo de flujo
entre otras, según los autores “descaradamente robados del lenguaje C creado
para Unix por Dennis Ritchie”" ("Software Tools", p. 318):
Encerrado de
bloques con paréntesis de llave.
·
Sentencias de control if, else, for, while, do y repeat-until.
·
Sentencias "free-form", por ejemplo, no
regidas estrictamente por líneas de código.
·
Reemplazo de.GT,.GE, etc, por símbolos <, >,
etc.
Redcode
Redcode es un lenguaje que se asemeja al lenguaje
ensamblador, creado específicamente para ser interpretado por un MARS (ver Core
War) y más simplificado que un lenguaje ensamblador convencional. Redcode
posee instrucciones para mover el contenido de una dirección de memoria a otra,
realizar operaciones aritméticas y controlar la ejecución dentro del mismo
programa. Las instrucciones mnemónicas de Redcode son, a diferencia de un
lenguaje ensamblador, convertidas en un entero largo que posteriormente se
guarda en la memoria del MARS. Finalmente es el MARS el que interpreta los
enteros y realiza las operaciones indicadas.
Existen varias
versiones de Redcode desde su creación. Actualmente las más usadas son
Redcode'88 y Redcode'94, cada una con sus partidarios y detractores, debido a
la adición de una importante característica en Redcode en su última versión, el
P-space, que obligó a extender
las instrucciones de Redcode'88 de 17 a 19.
RPG
El lenguaje de programación RPG es un lenguaje de
programación desarrollado por IBM en 1964
y diseñado para generar informes comerciales o de negocios. Sus siglas en
inglés significan Report Program Generator.
En 1960
RPG es creado para la familia 1400, pero hasta 1964 no es lanzada la
versión final para la IBM 360. Ha sido actualizado en diversas
ocasiones, dando origen a las diferentes versiones del lenguaje. Una de las
últimas actualizaciones que se ha realizado hasta la fecha es el RPG/IV en 1995,
disponible con los ordenadores IBM de la familia AS/400.
Posteriormente, en 2001, y con la aparición de la versión 5
del OS/400,
surgió una nueva modificación sobre el lenguaje, soportándose a partir de ese
momento la programación en formato libre. Así mismo, se desarrollan las
funciones incorporadas que sustituyen a muchos de los antiguos indicadores y códigos
de operación. Todas estas incorporaciones permiten que el RPG se convierta en
un lenguaje mucho más legible, claro, flexible y moderno.
Entre sus
principales características podemos destacar las siguientes:
·
Orientado a la producción de informes.
·
Realiza cálculos fácilmente.
·
Emplea hojas de codificación diferentes para la
descripción de ficheros, entrada de datos, salida de resultados, etc.
RPG II
El RPG II es un lenguaje de
programación relativamente fácil de aprender impuesto por IBM en
algunas de sus máquinas, y destinado a la generación de informes
comerciales. Se utilizaba en las computadoras
System/3x y RPG III en el AS/400. Las sentencias RPG se
escriben en formato tabular, lo que hace incómodo el desarrollo de programas.
El programador no necesita conocer en
profundidad la máquina, por lo que resulta fácil de dominar. En 1980,
apareció el RPG II, diseñado para entornos más sofisticados, éste permite usar
técnicas de programación
estructurada y acceso a bases de datos.
El concepto de RPG
es el de una máquina cíclica que lee tarjetas, resume sus contenidos e imprime
un resultado, más bien como una máquina tabuladora. El lenguaje se
extendió para manejar otros dispositivos de rendimiento y aportar un método
rápido y eficiente de programar.
Ruby
Ruby es un lenguaje de
programacióninterpretado,
reflexivo
y orientado
a objetos, creado por el programador japonésYukihiro "Matz" Matsumoto, quien
comenzó a trabajar en Ruby en 1993, y lo presentó públicamente en 1995.
Combina una sintaxis inspirada en Python y Perl con características
de programación orientada a objetos similares a Smalltalk.
Comparte también funcionalidad con otros lenguajes de programación como Lisp,
Lua,
Dylan
y CLU.
Ruby es un lenguaje de programación interpretado en una sola pasada y su
implementación oficial es distribuida bajo una licencia
de software libre.
Historia
El lenguaje fue
creado por Yukihiro
"Matz" Matsumoto, quien empezó a trabajar en Ruby el 24 de febrero de 1993,
y lo presentó al público en el año 1995. En el círculo de amigos de Matsumoto
se le puso el nombre de "Ruby" (en español rubí) como broma
aludiendo al lenguaje de programación "Perl" (perla). La
última versión estable de la rama 1.8 es la 1.8.7_p248, de la rama 1.9 es la
1.9.2_p180 . La versión en 1.9 que incorpora mejoras sustanciales en el
rendimiento del lenguaje, que se espera queden reflejadas en la próxima versión
estable de producción del lenguaje, Ruby 1.9.0.1 Diferencias en rendimiento
entre la actual implementación de Ruby (1.8.6) y otros lenguajes de
programación más arraigados han llevado al desarrollo de varias máquinas
virtuales para Ruby. Entre ésas se encuentra JRuby, un intento de
llevar Ruby a la plataforma Java,
y Rubinius,
un intérprete
modelado basado en las máquinas virtuales de Smalltalk.
Los principales desarrolladores han apoyado la máquina virtual proporcionada
por el proyecto YARV, que se fusionó en el árbol de código fuente de Ruby el 31 de diciembre de 2006,
y se dió a conocer como Ruby 1.9
Objetivo
El creador del
lenguaje, Yukihiro
"Matz" Matsumoto, ha dicho que Ruby está diseñado para la productividad
y la diversión del desarrollador, siguiendo los principios de una buena
interfaz de usuario.2 Sostiene que el diseño de sistemas
necesita enfatizar las necesidades humanas más que las de la máquina:3
A menudo la gente,
especialmente los ingenieros en computación, se centran en las máquinas. Ellos
piensan, "Haciendo esto, la máquina funcionará más rápido. Haciendo esto,
la máquina funcionará de manera más eficiente. Haciendo esto..." Están
centrados en las máquinas, pero en realidad necesitamos centrarnos en las
personas, en cómo hacen programas o cómo manejan las aplicaciones en los
ordenadores. Nosotros somos los jefes. Ellos son los esclavos.
Ruby sigue el
"principio de la menor sorpresa", lo que significa que el lenguaje
debe comportarse de tal manera que minimice la confusión de los usuarios
experimentados. Matz ha dicho que su principal objetivo era hacer un lenguaje
que le divirtiera a él mismo, minimizando el trabajo de programación y la
posible confusión. Él ha dicho que no ha aplicado el principio de menor
sorpresa al diseño de Ruby,4 pero sin embargo la frase se ha
asociado al lenguaje de programación Ruby. La frase en sí misma ha sido fuente
de controversia, ya que los no iniciados pueden tomarla como que las
características de Ruby intentan ser similares a las características de otros
lenguajes conocidos. En mayo de 2005 en una discusión en el grupo de noticias
comp.lang.ruby, Matz trató de distanciar Ruby de la mencionada filosofía,
explicando que cualquier elección de diseño será sorprendente para alguien, y
que él usa un estándar personal de evaluación de la sorpresa. Si ese estándar
personal se mantiene consistente habrá pocas sorpresas para aquellos
familiarizados con el estándar.
Semántica
Ruby es orientado a objetos: todos los tipos de
datos son un objeto, incluidas las clases y tipos que otros lenguajes definen
como primitivas, (como enteros, booleanos, y "nil").
Toda función
es un método.
Las variables siempre son referencias a objetos, no los objetos mismos. Ruby
soporta herencia
con enlace dinámico, mixins
y métodos
singleton (pertenecientes y definidos por un sola instancia
más que definidos por la clase). A pesar de que Ruby no soporta herencia múltiple, la clases pueden
importar módulos
como mixins. La sintaxis procedural está soportada, pero todos los métodos
definidos fuera del ámbito de un objeto son realmente métodos de la clase
Object. Como esta clase es padre de todas las demás, los cambios son visibles para
todas las clases y objetos. Ruby ha sido descrito como un lenguaje
de programación multiparadigma: permite programación procedural
(definiendo funciones y variables fuera de las clases haciéndolas parte del
objeto raíz Object), con orientación a objetos, (todo es un objeto) o funcionalmente
(tiene funciones anónimas, clausuras o closures,
y continuations; todas las sentencias tiene valores, y las funciones devuelven
la última evaluación). Soporta introspección, reflexión
y metaprogramación, además de soporte para hilos de ejecución gestionados por el
intérprete. Ruby tiene tipado
dinámico, y soporta polimorfismo
de tipos (permite tratar a subclases utilizando la interfaz de la clase padre).
Ruby no requiere de polimorfismo
de funciones al no ser fuertemente tipado (los parámetros pasados a un método
pueden ser de distinta clase en cada llamada a dicho método).
De acuerdo con las
preguntas frecuentes de Ruby,5 "Si te gusta Perl,
te gustará Ruby y su sintaxis. Si te gusta Smalltalk,
te gustará Ruby y su semántica. Si te gusta Python,
la enorme diferencia de diseño entre Python y Ruby/Perl puede que te convenza o
puede que no."6
Características
·
cuatro niveles de ámbito de variable:
global, clase, instancia y local.
·
iteradores
y clausuras o closures
(pasando bloques de código)
·
expresiones
regulares nativas similares a las de Perl a nivel del lenguaje
·
posibilidad de redefinir los operadores (sobrecarga
de operadores)
·
altamente portable
·
Hilos de ejecución simultáneos en todas las
plataformas usando green Threads
·
Carga dinámica de DLL/bibliotecas
compartidas en la mayoría de las plataformas
·
introspección, reflexión
y metaprogramación
·
amplia librería estándar
·
soporta inyección de
dependencias
·
soporta alteración de objetos en tiempo de
ejecución
·
continuaciones y generadores
·
Ruby actualmente no tiene soporte completo de Unicode,
a pesar de tener soporte parcial para UTF-8.
Licencia
El intérprete y
las bibliotecas
están licenciadas de forma dual (inseparable) bajo las licencias libres y de código abiertoGPL
y Licencia pública Ruby.A partir de la versión 1.9.3 se opta por una licencia
dual bajo las licencias BSD de
dos cláusulas y Licencia pública Ruby.
Self
Self es un lenguaje de
programación orientado a objetos desarrollado por Sun Microsystems. Puede decirse que es un
sucesor de Smalltalk, y en algunos casos se considera
una evolución de éste. Self está basado en la idea de Prototipos,
a diferencia de la mayoría de los lenguajes orientados a objetos que utilizan
clases.
Simula
Simula es un lenguaje
de programación
orientada a objetos (OOP). Fue el primero de los lenguajes orientado
a objetos. Varios años después de su desarrollo, casi todos los lenguajes
modernos comenzaron a utilizar sus principios de orientación a objetos. Así fue
como se popularizaron términos como clases, objetos, instancias,
herencia, polimorfismo, etc.
Simula 67 fue lanzado oficialmente por sus autores Ole Johan
Dahl y Kristen Nygaard en mayo de 1967, en la Conferencia de Trabajo en
Lenguajes de Simulación IFIO TC 2, en Lysebu cerca de OsloHoy
en día, los creadores de Simula
han desarrollado un nuevo lenguaje de programación, llamado Beta, que
generaliza todas las construcciones del lenguaje en una única idea denominada patrón.
Snobol
SNOBOL (StriNg Oriented symBOlic Language) es un lenguaje de
programación de computadoras
de muy alto nivel que surgió en la década de los 60 en los Laboratorios Bell merced al equipo formado
por David J. Farber, Ralph E. Griswold y Ivan P. Polonsky.
Historia
Durante las
décadas de los cincuenta y sesenta del siglo veinte había un importante interés
en lenguajes de programación de computadoras de propósito especial. SNOBOL fue
uno más de los lenguajes orientados a cadenas de texto y de entre ellos uno de
los más exitosos. (v.g.: COMIT y TRAC).
Fue usado
ampliamente durante las décadas de los setenta y ochenta del siglo veinte como
un lenguaje de manipulación de texto en las disciplinas humanísticas, pero, en
años recientes su popularidad se ha desvanecido merced a que lenguajes nuevos
tales como AWK
y Perl
han hecho popular la manipulación de cadenas usando expresiones regulares; ahora es usado
principalmente por aficionados siendo raro ver implementaciones recientes.
La implementación
clásica fue en la PDP-10 y se ha usado para estudiar compiladores,
gramáticas formales e inteligencia
artificial, en particular traducción
automática y comprensión automática de lenguajes naturales. La implementación
original fue en una IBM 7090 en los Laboratorios Bell en Holmdel,
Nueva Jersey. Fue diseñado expresamente
para la portabilidad así que fue rápidamente exportado a otras plataformas.
Queda por
comprobar lo que se dice al respecto de que el algoritmo
de coincidencia de patrones de búsqueda es superior al de las expresiones
regulares de modo que programas bien escritos y compilados usando la
implementación SPITBOL del SNOBOL4 son del orden de 10 o más veces más rápidos
en su ejecución que los equivalentes escritos en Perl. Se llamaba
originalmente "SEXI" (StriNg EXpression Interpreter), que en español
es algo así como: Intérprete de Expresiones de Cadenas. La versión SNOBOL4 es
la cuarta y más reciente encarnación de una serie de lenguajes de programación
de computadoras para el propósito especial de manipulación de cadenas de
caracteres.
SNOBOL4 soporta
una cantidad importante de tipos de datos tales como: enteros, números reales
de precisión limitada, cadenas de texto, patrones de búsqueda, arreglos y
tablas así como la capacidad de permitir al programador definir tipos de datos
adicionales y nuevas funciones (esta última característica fue avanzada para su
época además de parecerse y de que precede a los 'records' del Pascal
o los 'structs' del C)
Sobresale de entre
los lenguajes de programación más famosos de su tiempo por usar los patrones de
búsqueda como un tipo de datos nativo al lenguaje y por proveer operadores para
concatenación de patrones y alternación, además de que las cadenas generadas
durante la ejecución pueden ser tratadas como programas que pueden a su vez ser
ejecutados. Un patrón de búsqueda puede ser muy simple o extremadamente
complicado. Un ejemplo de patrón simple puede ser una cadena de texto (v.g.: "ABCD"),
y un ejemplo de patrón complicado puede ser una gran estructura que describa la
gramática completa de un lenguaje de programación de computadoras.
Ofrece al programador
una amplia variedad de características incluyendo algunas muy exóticas, de ahí
que se pueda usar como si fuera un lenguaje orientado a
objetos, un lenguaje de
programación lógica, un lenguaje de
programación funcional o un lenguaje de programación imperativa
cambiando el conjunto de características usadas para escribir un programa.
También concatena cadenas que estén una junto a la otra en una sentencia y
mantiene las cadenas en un montículo de memoria liberando así a los
programadores de preocupaciones tales como asignación de memoria y manejo de
cadenas.
Se implementa
normalmente como un intérprete
debido a las dificultades para instrumentar algunas de sus características de
muy alto nivel, pero hay un compilador,
el SPITBOL, que provee casi todas las características que la versión
interpretada. El lenguaje de programación de computadoras Icon
es un descendiente de SNOBOL4.
Smalltalk
Smalltalk es un lenguaje de programación que permite
realizar tareas de computación mediante la interacción con un entorno de
objetos virtuales. Metafóricamente, se puede considerar que un Smalltalk es un
mundo virtual donde viven objetos que se comunican mediante el envío de
mensajes.
Un sistema
Smalltalk está compuesto por:
·
Imagen virtual que contiene todos los objetos del
sistema
·
Lenguaje de programación (también conocido como Smalltalk)
·
Biblioteca de Objetos reusables
·
Opcionalmente un entorno
de desarrollo que funciona como un sistema
en tiempo de ejecución.
Historia
Los orígenes de Smalltalk se encuentran en las
investigaciones realizadas por Alan Kay,
Dan Ingalls, Ted Kaehler, Adele Goldberg y otros durante los años setenta en el
Palo Alto Research Institute de Xerox (conocido como Xerox PARC), para la creación de un
sistema informático orientado a la educación. El objetivo era crear un sistema
que permitiese expandir la creatividad de sus usuarios, proporcionando un entorno
para la experimentación, creación e investigación.
Terminología
Un programa
Smalltalk consiste únicamente de objetos, un concepto que se utiliza
universalmente dentro de todo sistema Smalltalk. Prácticamente todo, desde un
número natural como el 4 hasta un servidor web
es considerado un objeto. Los objetos Smalltalk presentan características
comunes
·
Tienen una memoria
propia.
·
Poseen capacidad para comunicarse con otros
objetos.
·
Poseen la capacidad de heredar características de
objetos ancestros.
·
Tienen capacidad de procesamiento.
Los objetos se
comunican entre sí mediante el envío de
mensajes. Asimismo, un objeto puede proveer muchas operaciones
(actualmente esto está determinado por cada implementación) Las definiciones de
estas operaciones en los objetos son llamadas métodos. Un método especifica la reacción de un objeto cuando
recibe un mensaje que es dirigido a ese método. La resolución (en el sentido de
ligado) de un mensaje a un método es dinámica. La colección entera de métodos
de un objeto es llamada protocolo de
mensajes o interfaz de mensajes
del objeto. Los mensajes pueden ser parametrizados, estos parámetros serán
objetos, y el resultado o respuesta del mismo también será un objeto.
Las
características comunes de objetos está capturado bajo la noción de clase, de tal forma que los objetos
agrupados bajo una clase son llamados instancias
de ella. Las instancias son creadas durante la ejecución de un programa con
algún propósito y son barridos automáticamente en el momento que no son
necesitados más por el recolector de basura. Exceptuando algunos objetos
especiales como los muy simples, llamados literales (números, cadenas, etc), cada objeto tiene su propio
estado local y representa una instancia diferente de su clase.
Características
Smalltalk es
considerado el primero de los lenguajes orientados a objetos (OOP),
aunque en realidad el primero en implementar programación orientada a objetos
fue Simula.
En Smalltalk todo es un objeto, incluidos los números reales o el propio
entorno Smalltalk.
Como lenguaje
tiene las siguientes características:
1.
Orientación a Objetos
3.
Interacción entre objetos mediante envío de
mensajes
4.
Herencia simple y con raíz común
5.
Reflexión computacional completa
7.
Compilación
en tiempo de ejecución o Interpretado (dependiendo de la
distribución o del proveedor)
Smalltalk ha tenido gran influencia sobre otros lenguajes
como Java
o Ruby,
y de su entorno han surgido muchas de las prácticas y herramientas de
desarrollo promulgadas actualmente por las metodologías ágiles (refactorización,
desarrollo incremental, desarrollo dirigido por tests, etc.).
El entorno
Smalltalk
Las
implementaciones de Smalltalk de mayor peso (VisualWorks,
Squeak,
VisualSmalltalk, VisualAge y Dolphin) poseen un entorno de interacción muy
diferente al entorno
de desarrollo típico de otras tecnologías como Microsoft Visual
Studio .Net o Eclipse.
El entorno o ambiente Smalltalk es primordialmente gráfico y funciona como un sistema
en tiempo de ejecución que integra varias herramientas de
programación (Smalltalk), utilidades multimedia,
interfaces para ejecutar código no nativo a Smalltalk y servicios del sistema operativo.1
Estas posibilidades, que han influido en la metodología de trabajo y concepción
de la programación, se traducen en la tendencia a considerar a Smalltalk más
que un simple lenguaje de
programación. La forma de programar en Smalltalk no consiste en el
ciclo típico de las tecnologías tradicionales: Arrancar un editor de texto, compilar
y ejecutar y terminar la aplicación. En Smalltalk se manipula el entorno mismo,
comúnmente mediante el Navegador del Sistema.
Sintaxis
Tradicionalmente,
Smalltalk no posee una notación explícita para describir un programa entero. Sí
se utiliza una sintaxis explícita para definir ciertos elementos de un
programa, tales como métodos, pero la manera en que tales elementos están
estructurados dentro de un programa entero generalmente es definida por las múltiples
implementaciones. El estándar mismo no promueve otra dirección, por
lo que define una sintaxis abstracta de programas Smalltalk, que define todos
los elementos que constituyen un programa Smalltalk y la manera en que esos
elementos están lógicamente compuestos por otros elementos, sin embargo, cada
implementación es libre de definir y utilizar las muchas sintaxis posibles que
están conformes a la sintaxis abstracta estándar. Un ejemplo de una sintaxis
concreta es el Formato de Intercambio Smalltalk (o SIF, de Smalltalk
Interchange Format) definida en el mismo estándar.
La sintaxis de
Smalltalk-80 tiende a ser minimalista. Esto significa que existen un grupo
pequeño de palabras reservadas y declaraciones en comparación con la mayoría de
los lenguajes populares. Smalltalk posee un grupo de 5 palabras reservadas: self, super, nil, true y false.
SPARK
SPARK es un lenguaje de
programación especialmente diseñado para sistemas de alta
integridad. Es un subconjunto anotado de Ada
desarrollado por la empresa británica Praxis High Integrity Systems, Inc que
elimina ciertas características del lenguaje consideradas peligrosas en este
tipo de sistemas (como las excepciones o la sobrecarga de operadores), y que
añade anotaciones formales para realizar automáticamente análisis de flujo de
datos y de información.
Historia
Los orígenes de
este lenguaje de programación se encuentran en los trabajos realizados en la
Universidad de Southamton (Reino Unido)
sobre verificación formal de programas, y más concretamente en el desarrollo de
SPADE (Southampton Program Analysis Development Environment), un
conjunto de herramientas destinadas al análisis de flujo de datos y de
información. De hecho, el nombre «SPARK» deriva de «SPADE Ada Kernel».
La primera versión
de SPARK estaba basada en Ada 83 y fue desarrollada en 1988 por Bernard Carré y
Trevor Jennings en dicha Universidad con el patrocinio del Ministerio de
Defensa (MoD) británico. Más tarde siguió siendo desarrollado por la empresa
Program Validaton Limited (fundada por el profesor Carré), y después por Praxis
Critical Systems Limited. En octubre de 2004 esta empresa se fusionó con High
Integrity Systems Limited para formar Praxis High Integrity Systems.
Standard ML
El lenguaje de
programaciónStandard ML o SML es un lenguaje
descendiente del lenguaje ML que nació como el Meta Lenguaje
del sistema LCF.
A diferencia de muchos otros lenguajes de programación, SML tiene una
especificación formal, como semántica operacional publicada en el
libro The Definition of Standard ML.
Implantaciones
Standard ML of New
Jersey (abreviado SML/NJ) es un compilador completo, junto con sus librerías, herramientas,
y documentación. Moscow ML es una
implementación liviana, basada en el ambiente de ejecución de CAML Light.
Implementa el lenguaje SML completo, incluyendo sus módulos, también incluye la
mayor parte de la librería de ase de SML.
MLton es un
compilador para programas completos (no maneja la noción de módulos). Poly/ML es una implantación completa de
Standard ML. SML2c es un compilador para
firmas estructuras y funciones que genera código en lenguaje C. Está
basado en SML/NJ versión 0.67 y comparte con esa versión la mayor parte del
ambiente de ejecución, pero no planta ni herramientas de puesta a punto ni
perfiles de ejecución. La compatibilidad a nivel de los módulos con SML/NJ es
completa.Todas las distribuciones mencionadas son de tipo software libre. No hay versiones
comerciales de SML disponibles.
Superglús
Superglús es un lenguaje de programación de juegos del tipo aventura conversacional, también conocidas
como "Interactive fiction". El sistema de creación de aventuras de
Superglús está basado en el compilador Paguaglús, que a su vez es un compilador
que nace con el objetivo de emular el funcionamiento del sistema de creación de
aventuras PAWS
(Professional Adventure Writing System), para Spectrum
y Amstrad.
Aunque ya existía
un PAWS para PC este
era una versión para DOS, de difícil utilidad hoy en día, y
Paguaglús nació con el objetivo de permitir que los juegos resultantes fueran capaces
de correr sobre la máquina virtual Glulx, de modo que fueran accesibles a
todos los sistemas operativos en los que dicha máquina tuviera una
implementación. Sin embargo la principal ventaja de Paguaglús, su casi 100% de
compatibilidad con código de PAWS, es su principal problema, dado que PAWS es
un sistema de los años 80 con grandes limitaciones debidas fundamentalmente a
las capacidades reducidas de las máquinas de entonces.
Por otro lado,
tras la muerte de los sistemas 8 bits nacieron otros parsers basados en PAW con
capacidades mucho más avanzadas, aunque también basados en DOS, como SINTAC,
SKC o NMP.
En 2003 nos encontramos con que aquellos que quieran un sistema de creación de
aventuras del estilo de PAW tenían dos alternativas: Paguaglús: muy portable
pero poco potente. NMP, SKC, SINTAC:
mucho más potentes pero poco portables y con tendencia a no funcionar en SOs
modernos.
Pues bien, para
solventar esto nace, de la mano de Julio Sangrador (autor de Paguaglús) y
Carlos Sánchez (autor de NMP), la siguiente generación de lenguajes tipo PAWS:
Superglús, un sistema basado en Paguaglús pero liberado de la necesidad de
mantener compatibilidad con PAW, con las facilidades que esto da.
Vienna Definition
Language
El Vienna Definition Language (VDL), en español, «Lenguaje de
Definición de Viena» es un lenguaje de
programación desarrollado en un centro de IBM en Viena
(Austria),
que puede utilizarse para declarar definiciones algebraicas de lenguajes de
programación para software con una semántica operacional. Representa une metalenguaje
(lenguaje formal) y se ha utilizado, entre
otros, para la definición del lenguaje de programación PL/I.
A partir de este
lenguaje se ha creado una metodología, el Vienna Development
Method, lo que facilita formular demostraciones de corrección sobre programas
informáticos. Se sirve de una notación matemática, para expresar de
forma precisa especificaciones
de subrutinas.La
utilización de estos metalenguajes y demostraciones sólo suele rentabilizarse
para sistemas donde la seguridad es crítica (ej. pasos de tren, centrales nucleares), cuya demostración es
muy trabajosa y por lo tanto cara.
Visual SINTAC
Visual SINTAC fue el primer parser español de desarrollo visual de juegos tipo aventura
conversacional para Windows.
Su autor, Javier San José ("JSJ") publicó su primera versión en junio
de 1999. La siguiente es una
lista (incompleta) de características de Visual SINTAC:
- Entorno de desarrollo totalmente visual.
- Diseñador de mapas.
- Lenguaje de programación similar al BASIC.
- Completo tratamiento de objetos y PSIs.
- Características multimedia, soporte de gráfico
BMP, JPEG, sonido WAV, MOD, S3M, IT.
El lenguaje de
programación soporta características como:
- Bucles FOR...NEXT,
WHILE...LOOP.
- Sentencias IF...ELSE...ENDIF.
- Estructuras SELECT CASE...ENDSELECT.
- Procedimientos con paso y devolución de
parámetros.
- Declaración de variables locales y globales.
El proyecto fue
cancelado, después de 2 revisiones, por su autor debido al poco interés que
despertó inicialmente y en favor del auge de otros parsers que salieron por la
misma época. Actualmente, y a pesar del esfuerzo de dos personas, Morgul y Uto,
que intentaron solucionar parte de los fallos que el sistema tenía tras el abandono
del proyecto por su autor original, puede considerarse que la base de usuarios
de este parser es nula.
WS-CDL
El Lenguaje para la descripción de Coreografías
de Servicios Web (Web Services
Choreography Description Language (WS-CDL) es un lenguaje basado en XML que describe la colaboración entre
pares peer-to-peer,
mediante la definición - desde un punto de vista global - de los
comportamientos comunes y observables de cada participante de un proceso de
negocio. Es una recomendación candidata de la W3C cuyo desarrollo ha sido abandonado con el cierre del W3C
Web Services Choreography Working Group en julio de 2009.
ALGOL
Se denomina ALGOL
(o Algol) a un lenguaje de programación. La voz es un acrónimo de las palabras inglesasAlgorithmic
Language (lenguaje algorítmico). Fue muy popular en las
universidades durante los años 60, pero no llegó a cuajar como lenguaje
de utilización comercial. Sin embargo, Algol influyó profundamente en varios
lenguajes posteriores que sí alcanzaron gran difusión, como Pascal, C y Ada.
Hacia 1965 dos corrientes se distinguieron sobre
el tema de un sucesor para Algol. Como resultado se definieron los lenguajes Algol W que es un lenguaje minimalista,
rápidamente implementado y distribuido y, por otra parte, Algol 68 que para la época está en la
frontera entre un lenguaje para programar en él y un lenguaje para investigar
sobre él.
Algol W
Lenguaje elaborado
diseñado por Niklaus Wirth
y Tony Hoare
a partir de los trabajos del grupo ALGOL de la IFIP. Se trata de un lenguaje
conciso, simple de implementar, que evita todos los defectos conocidos del
lenguaje Algol e incluye sus propias características adicionales. Sin embargo,
el grupo Algol no lo adoptó como sucesor de Algol prefiriendo en su lugar al
que terminó siendo Algol 68. Algol W fue utilizado por gran cantidad de
usuarios y sembró el camino para el nacimiento del lenguaje Pascal. Entre las
características del lenguaje se destacan: Aritmética de doble precisión, números
complejos, Strings y estructuras de datos dinámicas, evaluación por
valor, pasaje de parámetros por valor, valor resultado o resultado.
Algol 68
La definición del
lenguaje fue presentada en la reunión del comité ALGOL de la IFIP en 1965. Luego de varios años de revisión del
diseño se llegó a una versión definitiva en 1968. Al principal autor es Adriaan van Wijngaarden. Los objetivos
principales de ALGOL 68 son el permitir comunicar algoritmos, el permitir una
eficiente ejecución de los mismos en diferentes arquitecturas y el de servir
como herramienta para la enseñanza. Una característica interesante de ALGOL 68
es que su semántica fue definida formalmente antes de ser implementado en base
al formalismo llamado gramáticas de dos niveles.
ZPL
ZPL es un lenguaje de programación con paralelismo
implícito orientado a operaciones con vectores o arreglos, creado por Lawrence
Snyder de la Universidad de Washington en 1993 (el primer compilador disponible
para uso general, fue liberado en 1997). El objetivo de ZPL es el facilitar la
programación de ejecutables que corran eficientemente en una gran variedad de
arquitecturas secuenciales y paralelas. Los programas de ZPL no contienen
directivas o instrucciones explícitamente paralelas, dado que es el compilador
del lenguaje el único responsable de extraer el paralelismo inherente a las
operaciones presentes en un programa. ZPL explota exclusivamente el modelo de paralelismo
de datos.
REXX
REXX (REstructured eXtended eXecutor) es un lenguaje de programación desarrollado en IBM por Mike Cowlishaw del que existen
numerosas implementaciones disponibles con código
abierto. Es un lenguaje de programación estructurado de alto nivel
diseñado para ser al mismo tiempo fácil de entender y fácil de leer. Hay intérpretes para REXX tanto comerciales
como de código
abierto para un amplio rango de plataformas y hay compiladores para
los mainframes
de IBM. El nombre también se aplica a la familia de lenguajes relacionados con
el lenguaje de programación REXX: el propio REXX (llamado en ese contexto REXX
clásico o tradicional), Object REXX y NetREXX.
Características
REXX tiene, entre
otras, las siguientes características:
- tiene la cadena de caracteres como base
- no hay declaraciones
- no hay palabras reservadas (excepto en un
contexto local)
- precisión numérica arbitraria
- aritmética decimal
- un gran conjunto de funciones (especialmente para procesado de cadenas
y palabras)
- gestión automática de la memoria
- arrays asociativos
- acceso directo a las órdenes y facilidades del
sistema
- manejo de errores sencillo
- herramientas de trazado y depuración dentro del intérprete
- acceso a la entrada y salida simplificado
REXX tiene
solamente 23 instrucciones de significado bastante evidente para los angloparlantes
(call, parse y select son
unos ejemplos) con unos requerimientos mínimos de puntuación y formateo. Es
esencialmente un lenguaje de formato libre con solamente un tipo de dato
primitivo: la cadena de caracteres. Esta filosofía implica que todos los datos
son visibles y que la depuración y el trazado se simplifican.
La sintaxis de
REXX parece similar a la de PL/I,
pero tiene menos notaciones; esto hace que el código sea más difícil de
analizar por el intérprete o el compilador pero más fácil de usar para el
programador.
Historia
REXX fue diseñado
e implementado por vez primera como un proyecto personal de Mike Cowlishaw de
IBM entre el 20 de marzo de 1979 y mediados de 1982, originalmente como un
lenguaje de programación de 'scripting' para reemplazar los lenguajes EXEC y
EXEC 2. Fue diseñado para ser un lenguaje de scripting o macros para cualquier
sistema y como tal, se considera a REXX precursor de lenguajes como Tcl y Python. Además, Cowlishaw se centró en que estuviese orientado
a las personas en lugar de orientado a los ordenadores e intentó que el
lenguaje se mantuviese pequeño y manejable por ello ("Keep the language
small" -"Mantén el lenguaje pequeño"- se leía en la pared sobre
su escritorio).
La primera versión
pública apareció en mayo de 1979 distribuida a través de VNET, la red interna
de IBM y los primeros usuarios aparte del propio Cowlishaw fueron Ray Mansell
(de Hursley en el Reino Unido) y Les Koehler (de Raleigh en Carolina del Norte)
que contribuyeron al lenguaje. A finales de 1979 al menos había unos 70
ordenadores con una implementación del lenguaje.
Algunas versiones
fueron distribuidas entre compradores seleccionados de IBM como el SLAC
(Stanford Linear Accelerator Center) donde la capacidad de REXX de trabajar con
aritmética decimal de precisión arbitraria fue bien recibida. Al ser descrito
por primera vez en público en la conferencia SHARE 56 en Houston, Texas, en
1981, la reacción de los clientes de IBM, liderada por Ted Johnston de SLAC
(parcialmente motivada por la aritmética de REXX), condujo a que se convirtiese
en producto oficial de IBM en 1982
y se incluyese en 1983
como parte del sistema VM/CMS.
A lo largo de los
años, IBM incluyó REXX en forma de intérprete o compilador en casi todos sus
sistemas operativos desde los mainframes a los ordenadores personales (VM/CMS, VM/GCS, MVS TSO/E, AS/400, OS/2,
VSE/ESA, AIX, CICS/ESA y PC-DOS) y ha hecho
versiones disponibles para Novell Netware, Windows,
Java
y Linux. La primera versión
fuera de IBM fue escrita por Charles Daney en 1984/5. Otras versiones han sido
también desarrolladas para Atari,
Amiga,
Unix (múltiples
variantes), Solaris, DEC, Windows,
Windows CE,
PocketPC, MS-DOS, Palm OS, QNX, OS/2, Linux,
BeOS, EPOC32, AtheOS, OpenVMS, OpenEdition, Macintosh
y Mac OS X.
La versión de REXX
para Amiga,
llamada ARexx debida a Bill Hawes
se incluyó con AmigaOS 2 y fue popular tanto para scripting como para control
de aplicaciones. Muchas aplicaciones Amiga tienen "puertos ARexx" en
ellas lo que permite controlar la aplicación a través de un "script"
definido por el usuario. Numerosas versiones gratuitas de REXX están
disponibles. En 1992
aparecieron las dos versiones de código abierto más ampliamente utilizadas:
REXX/imc del británico Ian Collier para UNIX y Regina del noruego Anders
Christensen (posteriormente adoptada por el australiano Mark Hessling) para
Windows y Linux. BREXX del griego Vasilis Vlachoudis es bien conocido para DOS,
WinCE y PocketPC.
Microsoft decidió
incluir Regina en todos sus Windows Resource Kits como lenguaje de scripting
y continuó esta práctica hasta Windows 2000 mientras introducía sus propias
aproximaciones al scripting a través de WSH (Windows Scripting Host) y
VBA (Visual Basic for Applications). En 1990, Cathy Dager de SLAC organizó el primer simposio REXX
independiente que conduciría cuatro años después a la formación de la RexxLA
(REXX Language Association). Los simposios se llevan a cabo anualmente. La
RexxLA promovió la aparición de un estándar ANSI para REXX así como de un borrador para un estándar de Object REXX. En
1996, ANSI se publicó el estándar para REXX:
ANSI X3.274–1996 “Information Technology – Programming Language REXX”.
Desde mediados de
la década de 1990, existen dos variantes nuevas de REXX:
- NetREXX – que compila a bytecodes
Java o es interpretado directamente.
- Object REXX – que es una versión orientada
a objetos compatible con REXX.
REXX cumplió su
vigesimoquinto aniversario el 20 de marzo de 2004, lo que se celebró en el decimoquinto Simposio
Internacional de REXX organizado por la RexxLA (REXX Language Association)
en Böblingen, Alemania, en mayo de 2004.
En el mismo
decimoquinto Simposio Internacional de REXX, el 4 de mayo de 2004, IBM anuncia
que retira Object REXX como producto y la intención de abrir el código fuente
de Object REXX. Ante este anuncio, la RexxLA se ofrece a gestionar el futuro de
Object REXX y nombra un comité para encargarse de la transición. El 12 de
octubre de ese mismo año anuncia que transferirá el código a RexxLA para que se
convierta en un proyecto de código abierto bajo la licencia Common Public
License y el 29 de noviembre de ese mismo año se ha terminado de
transferir todo el código excepto el código específico de la versión para OS/2,
el IBM Resource Workshop (que permitía crear diálogos para Windows), Object
REXX Workbench (IDE) y el paquete de funciones RxFTP. En febrero de 2005
aparece la primera versión pública de ooRexx (Open Object REXX) gestionada por
David Ashley y Rick McGuire.
JAL
JAL (Just Another Language) es un Lenguaje de programación similar al Lenguaje de programación Pascal
y un Compilador
que genera código ejecutable para el microcontrolador
PIC. Es un lenguaje de formato libre para programar
microcontroladores PIC y el compilador corre sobre Linux, Mac OS y MS-Windows.
JAL es el único lenguaje avanzado gratuito y tiene una base activa e importante
de usuarios. Se configura y extiende por el uso de librerías e inclusive se
puede combinar con lenguaje ensamblador.
Historia
Fue originalmente
creado por Wouter van Ooijen, pero actualizado como software
libre bajo la GNU
en el año 2003. En el año 2006, Stef Mientki inició el desarrollo de una nueva
version: V2. Kyle York es el programador de esta nueva versión, y un grupo
internacional de usuarios (en orden alfabético: Bert van Dam, Sunish Issac,
Dave Lagzdin, Javier Martinez, Stef Mientki, Wouter van Ooijen, Michael
Reynolds, André Steenveld, Joep Suijs, Vasile Surducan, and Michael Watterson)
son responsables de su testeo (beta testing).
Hollywood
Hollywood es un lenguaje de programación distribuido de
forma comercial y desarrollado por Andreas Falkenhahn (Airsoft Softwair) que se
centra esencialmente en la creación de aplicaciones con orientación multimedia.
Hollywood está disponible para AmigaOS
(68k y PPC), MorphOS,
WarpOS, AROS y Windows. Actualmente no
hay versión ni para Mac OS X
ni para Linux, pero el producto ya
es capaz de compilar ejecutables para estas plataformas. Hollywood incluye un
compilador cruzado interno que puede guardar automáticamente ejecutables para
todas las plataformas que soporta. Los ejecutables generados son completamente
autónomos y no tienen dependencias externas, así que pueden ser puestos en
marcha desde un lápiz o llave USB.Hollywood Designer es una herramienta
adicional para Hollywood que le permite utilizarlo como un programa de
presentaciones y un sistema de autoría.
Historia
Hollywood tiene
sus raíces en la plataforma Amiga. Inspirado por los lenguajes de programación
para Amiga como AMOS, Blitz BASIC
y Amiga E, el autor de
Hollywood, Andreas Falkenhahn, inició el desarrollo de en la primavera de 2002
tras terminar sus pruebas de la selectividad.2
La versión 1.0 fue lanzada en noviembre de 2002, pero únicamente para los
ordenadores Amiga
basados en la gama de procesadores 68000. Un mes más tarde, le siguió una versión
nativa PowerPC para MorphOS.3
El soporte para WarpOS se incluye con Hollywood 1.9 que apareció en primavera
de 2004 junto con el lanzamiento de la primera versión de Hollywood Designer,
una herramienta que puede ser utilizada para crear presentaciones con
Hollywood. El soporte del AmigaOS 4
está disponible desde marzo de 2005. Con el inicio de la versión 2.0 (lanzada
en enero de 2006), Hollywood pasa a utilizar el lenguaje de programación Lua como una máquina virtual, pero con
modificaciones significativas de la sintaxis y funcionalidad.4
A partir de la versión 3.0 (enero de 2008), Hollywood por primera vez también
se ejecuta en dos sistemas operativos ajenos al Amiga: Microsoft Windows y Mac OS X. Tras la versión
4.5 (enero de 2010), Hollywood está también disponible con un entorno de
desarrollo integrado para Windows.
Desde la versión 4.8 (abril de 2011), Hollywood también puede generar
ejecutables para Linux.
Información
general
Hollywood se
centra en la facilidad de uso y en la independencia de la plataforma. Ha sido
diseñado principalmente para la creación de juegos y aplicaciones multimedia. El juego de
instrucciones del lenguaje abarca 500 comandos para los siguientes campos:
gráficos 2D, sonido, operaciones del sistema de ficheros, salidas de texto,
animaciones, duendecillos gráficos, capas, efectos de transición, manipulación
de imágenes, guardado de imágenes y ficheros de video, funciones de tiempo y
fecha, funciones de entrada (teclado, palanca de juegos, ratón) así como
operaciones matemáticas y funciones de cadena. La programación en Hollywood se
realiza a través de los llamados guiones de Hollywood (con extensión *.hws).
Estos guiones son compilados dinámicamente y convertidos en ejecutables
autónomos. Todos los programas de Hollywood se ejecutan en un «cajón de arena»
(área para aislamiento de procesos), lo que hace imposible que se bloqueen.
D
D es un lenguaje de programación de uso general desarrollado por Walter Bright
cuya primera versión apareció en 1999. Se origina como un rediseño de C++, con un enfoque más
pragmático, pero no es un lenguaje puramente derivado del anterior. D ha
mantenido algunas características de C++ y también está influido por otros
conceptos de otros lenguajes como Java, C# y Eiffel. Una versión
estable fue lanzada el 2 de enero de 2007.
Características
D está siendo
diseñado con lecciones aprendidas del uso de C++ en vez de ser diseñado desde
una perspectiva teórica. Aunque usa muchos de los conceptos de C/C++ también
descarta algunos, y por lo tanto no es compatible con código escrito en C o
C++. D retiene la habilidad de C++ de hacer código de bajo nivel, permitiendo
incluir código en ensamblador. La herencia múltiple de C++ es reemplazada por
herencia simple e interfaces y 'mixins'. La sintaxis de declaración y la
sintaxis para las expresiones se parecen a las de C++.
El soporte del
lenguaje ensamblador demuestra una de las diferencias entre D con respecto a
otros lenguajes como Java y C#. Esto permite incluir código específico de la
máquina con código D, una técnica comúnmente usada por programadores de
software de sistema para acceder a características de bajo nivel necesarias
para interactuar directamente con el hardware, permitiendo escribir software
como sistemas operativos y drivers.
D incluye soporte
para comentarios de documentación, pero hasta ahora sólo el compilador
entregado por Digital Mars implementa un generador de documentación.
Orientada a
objetos
La programación
orientada a objetos está basada en herencia simple, con todas las clases
derivadas de la clase Object. D no soporta herencia múltiple; en vez de eso,
usa interfaces parecidas a las de Java, que son comparables a las clases
abstractas de C++.
Metaprogramación
Metaprogramación
es soportada por una combinación de plantillas, ejecución de funciones en
tiempo de compilación, tuplas y 'mixins' de cadena. Soporta CTFE (evaluación de
funciones en tiempo de compilación).
Manejo de memoria
La memoria es
usualmente manejada por un recolector de basura, pero objetos específicos
pueden ser finalizados inmediatamente cuando salen del ámbito. Es posible el
manejo de memoria explícito usando los operadores sobrecargados new y delete, y
simplemente llamando las funciones malloc y free de C directamente. La
recolección de basura puede ser controlada: los programadores pueden agregar y
excluir rangos de memoria de ser observados por el recolector, pueden pausar y
reanudar el recolector y forzar un ciclo generacional o de recolección
completa.3
El manual da muchos ejemplos de cómo implementar diferentes esquemas de manejo
de memoria altamente optimizados para cuando la recolección de basura es
inadecuada para el programa.
Interacción con
otros sistemas
La API de C es
admitida, al igual que todos los tipos fundamentales y derivados de C,
permitiendo acceso directo al código existente escrito en C y bibliotecas. La
biblioteca estándar de C es parte del D estándar. A menos que se usen
namespaces muy explícitos puede ser de alguna forma difícil de acceder, como se
puede observar en módulos escritos en D que hagan uso de dicha característica.
Pero la biblioteca estándar de D es usualmente suficiente.
Visual Basic .NET
Visual Basic .NET (VB.NET)
es un lenguaje de programaciónorientado a objetos que se
puede considerar una evolución de Visual Basic implementada sobre el framework
.NET. Su introducción resultó muy controvertida, ya que debido a
cambios significativos en el lenguaje VB.NET no es compatible hacia atrás con
Visual Basic, pero el manejo de las instrucciones es similar a versiones
anteriores de Visual Basic, facilitando así el desarrollo de aplicaciones más
avanzadas con herramientas modernas.
La gran mayoría de
programadores de VB.NET utilizan el entorno de desarrollo integradoMicrosoft Visual Studio en alguna de sus
versiones (desde el primer Visual Studio .NET hasta Visual Studio .NET 2010,
que es la última versión de Visual Studio para la plataforma .NET), aunque
existen otras alternativas, como SharpDevelop (que además es libre). Al igual
que con todos los lenguajes de programación basados en .NET, los programas
escritos en VB .NET requieren el Framework .NET o Mono para ejecutarse.
Versiones
Visual Basic 2008
(VB 9.0)
Para esta versión
se añadieron varias novedades, incluyendo:
- Soporte para LINQ
- Expresiones lambda
- Literales XML
Visual Basic 2010
(VB 10.0)
Visual Basic 2010
ofrece soporte para entorno de ejecución dinámico. VB 2010 forma parte de Microsoft
Silverlight. kariih
Relación con
Visual Basic
Si Visual Basic
.NET debe considerarse una mera versión de Visual Basic,
o si debe considerarse como un nuevo lenguaje de programación es un tema que ha
traído mucha discusión, y que aún la trae. La sintaxis básica es prácticamente
la misma entre VB y VB.NET, con la excepción de los añadidos para soportar
nuevas características como el control estructurado de excepciones, la
programación orientada a objetos, o los Genéricos. Las diferencias entre VB y
VB.NET son profundas, sobre todo en cuanto a metodología de programación y
bibliotecas, pero ambos lenguajes siguen manteniendo un gran parecido, cosa que
facilita notablemente el paso de VB a VB.NET.
Versiones del
entorno de programación para Visual Basic
Al mismo tiempo
que evolucionaba el lenguaje, las herramientas que Microsoft proporciona para
programar también evolucionaban para adaptarse a las novedades.
Visual Studio .NET
(2002)
Visual Studio .NET
se publicó en 2002 y fue la primera versión de Visual Studio en introducir el
framework .NET. Esta versión de Visual Studio introdujo, junto con el Framework
.NET tres nuevos lenguajes de programación, Visual C#, VB.NET y Visual J#. En
esta primera versión de Visual Studio .NET se podían programar aplicaciones
Windows.Forms (aplicaciones de escritorio) y aplicaciones ASP.NET (Aplicaciones
Web).
Visual Studio .NET
2003
Visual Studio .NET
2003 se publicó en 2003 fue una actualización menor de Visual Studio .NET,
básicamente propiciada por la introducción de la versión 1.1 del Framework
.NET. En esta versión se añadió por primera vez la posibilidad de programar
para dispositivos móviles usando .NET, ya fuera usando el Compact Framework, o
ASP.NET.
Visual Studio 2005
Publicado el 4 de octubre
de 2005, se basó en el framework .NET 2.0.
Añade soporte de
64-bit (x86-64: AMD64 e Intel 64, e IA-64: Itanium)
Ediciones: Express, Standard, Professional, Tools for Office, y 5
ediciones Visual Studio Team System (Architects, Software Developers, Testers,
y Database Professionals)
La versión interna
de Visual Studio 2005 es la 8.0, mientras que el formato del archivo es la 9.0.
Visual Basic
Express Edition
A partir de la
introducción en el mercado de la versión 2005 de Visual Studio Microsoft publicó
lo que se conoce como ediciones Exp de distintos programas. Las versiones
Express son versiones limitadas pero gratuitas, pensadas para usos no
profesionales (principiantes, aficionados y pequeños negocios), existiendo una
edición independiente para cada lenguaje.
Visual Basic
Express Edition es una versión de Visual Studio limitada. Esta versión permite
sólo programar en VB.NET, y además limita el tipo de proyectos que se pueden
desarrollar. Visual Web Developer Express Edition permite programar páginas
ASP.NET en VB.
Se lanzó el
Service Pack 1 para Visual Studio 2005 el 14 de diciembre de 2006.
Visual Studio 2008
El IDE de Visual
Studio 2008 permite trabajar contra 3 .NET frameworks diferentes:
- .NET Framework 2.0
- .NET Framework 3.0
- .NET Framework 3.5
También es muy
fácil de usar gracias al desarrollo de hardware. Además, integra el framework
ASP.NET AJAX para el desarrollo de AJAX.
Entornos de
desarrollo (IDE) alternativos a Visual Studio
Para desarrollar
en VB.NET existen algunas alternativas a Visual Studio, quizás la más notable
sea SharpDevelop.
SharpDevelop
SharpDevelop es un entorno
de programación integrado que permite programar en C# y en VB.NET. Este es un
entorno publicado bajo licencia LGPL, lo que implica que
es libre y que disponemos del código fuente.
MonoDevelop
MonoDevelop es una
implementación de SharpDevelop para programar usando Mono,
una implementación libre de .NET que funciona en distintos sistemas operativos.
Desarrollo multiplataforma
Gracias al
esfuerzo que ha realizado la gente del proyecto Mono
para implementar una versión compatible 100% con .NET que incluye la inmensa
mayoría de la bibliotecas y una implementación multiplataforma de
Windows.Forms, resulta posible programar para distintos sistemas operativos
usando VB.NET.
Java (lenguaje de
programación)
Java es un lenguaje de programaciónorientado a
objetos, desarrollado por Sun Microsystems a principios de los años 90. El lenguaje en sí
mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina
herramientas de bajo nivel, que suelen inducir a muchos errores, como la
manipulación directa de punteros o memoria.Con respecto a la
memoria, su gestión no es un problema ya que ésta es gestionada por el propio
lenguaje y no por el programador.
Las aplicaciones
Java están típicamente compiladas en un bytecode, aunque la compilación en código
máquina nativo también es posible. En el tiempo de
ejecución, el bytecode es normalmente interpretado o compilado a código nativo
para la ejecución, aunque la ejecución directa por hardware del bytecode
por un procesador
Java también es posible.
La implementación
original y de referencia del compilador, la máquina virtual y las bibliotecas de clases de
Java fueron desarrollados por Sun Microsystems en 1995. Desde entonces, Sun ha controlado las especificaciones,
el desarrollo y evolución del lenguaje a través del Java
Community Process, si bien otros han desarrollado también
implementaciones alternativas de estas tecnologías de Sun, algunas incluso bajo
licencias de software
libre.
Entre diciembre de
2006 y mayo de 2007, Sun Microsystems liberó la mayor
parte de sus tecnologías Java bajo la licencia GNU GPL, de acuerdo con
las especificaciones del Java Community Process, de tal forma que prácticamente
todo el Java de Sun es ahora software libre (aunque la biblioteca de clases de Sun que se
requiere para ejecutar los programas Java aún no lo es).
Historia
Java se creó como
una herramienta de programación para ser usada en un proyecto de set-top-box en
una pequeña operación denominada the Green Project en Sun Microsystems
en el año 1991. El equipo (Green
Team), compuesto por trece personas y dirigido por James Gosling,
trabajó durante 18 meses en Sand Hill Road en Menlo Park en su desarrollo.
El lenguaje se
denominó inicialmente Oak (por un roble que había fuera de la oficina de
Gosling), luego pasó a denominarse Green tras descubrir que Oak
era ya una marca comercial registrada para adaptadores de tarjetas gráficas y
finalmente se renombró a Java.
El término Java
fue acuñado en una cafetería frecuentada por algunos de los miembros del
equipo. Pero no está claro si es un acrónimo o no, aunque algunas fuentes
señalan que podría tratarse de las iniciales de sus creadores: James
Gosling, Arthur Van Hoff, y Andy Bechtolsheim. Otros
abogan por el siguiente acrónimo, Just Another Vague
Acronym ("sólo otro acrónimo ambiguo más"). La hipótesis
que más fuerza tiene es la que Java debe su nombre a un tipo de café disponible
en la cafetería cercana, de ahí que el icono de java sea una taza de café
caliente. Un pequeño signo que da fuerza a esta teoría es que los 4 primeros
bytes (el número mágico) de los archivos .class que genera el
compilador, son en hexadecimal, 0xCAFEBABE. A pesar de todas estas teorías, el
nombre fue sacado al parecer de una lista aleatoria de palabras.1
Los objetivos de
Gosling eran implementar una máquina virtual y un lenguaje con una estructura y
sintaxis similar a C++.
Entre junio y julio de 1994, tras una sesión maratoniana de tres días entre
John Gaga, James Gosling, Patrick Naughton, Wayne Rosing y Eric Schmidt, el
equipo reorientó la plataforma hacia la Web. Sintieron que la llegada del
navegador web Mosaic,
propiciaría que Internet se convirtiese en un medio interactivo, como el que
pensaban era la televisión por cable. Naughton creó entonces un prototipo de
navegador, WebRunner, que más tarde sería conocido como HotJava.
En 1994, se les
hizo una demostración de HotJava y la plataforma Java a los ejecutivos de Sun.
Java 1.0a pudo descargarse por primera vez en 1994, pero hubo que esperar al 23
de mayo de 1995, durante las conferencias de SunWorld, a que vieran la luz
pública Java y HotJava, el navegador Web. El acontecimiento fue anunciado por
John Gage, el Director Científico de Sun Microsystems. El acto estuvo
acompañado por una pequeña sorpresa adicional, el anuncio por parte de Marc
Andreessen, Vicepresidente Ejecutivo de Netscape, de que Java sería soportado
en sus navegadores. El 9 de enero del año siguiente, 1996, Sun fundó el grupo
empresarial JavaSoft para que se encargase del desarrollo tecnológico. [1]
Dos semanas más tarde la primera versión de Java fue publicada.
La promesa inicial
de Gosling era Write Once, Run Anywhere (Escríbelo una vez, ejecútalo en
cualquier lugar), proporcionando un lenguaje independiente de la plataforma y
un entorno de ejecución (la JVM)
ligero y gratuito para las plataformas más populares de forma que los binarios
(bytecode) de las aplicaciones Java pudiesen ejecutarse en cualquier
plataforma.
El entorno de
ejecución era relativamente seguro y los principales navegadores web pronto
incorporaron la posibilidad de ejecutar applets Java incrustadas en las páginas web.
Java ha
experimentado numerosos cambios desde la versión primigenia, JDK 1.0, así como un enorme incremento en
el número de clases y paquetes que componen la biblioteca estándar2
.
Además de los
cambios en el lenguaje, con el paso de los años se han efectuado muchos más
cambios dramáticos en la biblioteca de clases de Java (Java class library)
que ha crecido de unos pocos cientos de clases en JDK 1.0 hasta más de tres mil
en J2SE 5.0. APIs completamente nuevas, como Swing y Java2D, han sido introducidas y muchos de los métodos y clases
originales de JDK 1.0 están obsoletas.
En el 2005 se calcula en 4,5 millones el número
de desarrolladores y 2.500 millones de dispositivos habilitados con tecnología
Java.
Filosofía
El lenguaje Java
se creó con cinco objetivos principales:
- Debería usar la metodología de la programación
orientada a objetos.
- Debería permitir la ejecución de un mismo
programa en múltiples sistemas operativos.
- Debería incluir por defecto soporte para
trabajo en red.
- Debería diseñarse para ejecutar código en
sistemas remotos de forma segura.
- Debería ser fácil de usar y tomar lo mejor de
otros lenguajes orientados a objetos, como C++.
Para conseguir la
ejecución de código remoto y el soporte de red, los programadores de Java a
veces recurren a extensiones como CORBA
(Common Object Request Broker Architecture), Internet Communications Engine oOSGi respectivamente.
Orientado a
objetos
La primera
característica, orientado a objetos (“OO”), se refiere a un
método de programación y al diseño del lenguaje. Aunque hay muchas
interpretaciones para OO, una primera idea es diseñar el software de forma que
los distintos tipos de datos que usen estén unidos a sus operaciones. Así, los
datos y el código (funciones o métodos) se combinan en entidades llamadas objetos. Un objeto puede
verse como un paquete que contiene el “comportamiento” (el código) y el
“estado” (datos). El principio es separar aquello que cambia de las cosas que
permanecen inalterables. Frecuentemente, cambiar una estructura de datos
implica un cambio en el código que opera sobre los mismos, o viceversa. Esta
separación en objetos coherentes e independientes ofrece una base más estable
para el diseño de un sistema software. El objetivo es hacer que grandes
proyectos sean fáciles de gestionar y manejar, mejorando como consecuencia su
calidad y reduciendo el número de proyectos fallidos.
Otra de las
grandes promesas de la programación orientada a objetos es la creación de
entidades más genéricas (objetos) que permitan la reutilización del software
entre proyectos, una de las premisas fundamentales de la Ingeniería del
Software. Un objeto genérico “cliente”, por ejemplo, debería en teoría tener el
mismo conjunto de comportamiento en diferentes proyectos, sobre todo cuando
estos coinciden en cierta medida, algo que suele suceder en las grandes organizaciones.
En este sentido, los objetos podrían verse como piezas reutilizables que pueden
emplearse en múltiples proyectos distintos, posibilitando así a la industria
del software a construir proyectos de envergadura empleando componentes ya
existentes y de comprobada calidad; conduciendo esto finalmente a una reducción
drástica del tiempo de desarrollo. Podemos usar como ejemplo de objeto el
aluminio. Una vez definidos datos (peso, maleabilidad, etc.), y su
“comportamiento” (soldar dos piezas, etc.), el objeto “aluminio” puede ser
reutilizado en el campo de la construcción, del automóvil, de la aviación, etc.
La reutilización
del software ha experimentado resultados dispares, encontrando dos dificultades
principales: el diseño de objetos realmente genéricos es pobremente
comprendido, y falta una metodología para la amplia comunicación de
oportunidades de reutilización. Algunas comunidades de “código abierto” (open
source) quieren ayudar en este problema dando medios a los desarrolladores para
diseminar la información sobre el uso y versatilidad de objetos reutilizables y
bibliotecas de objetos.
Independencia de
la plataforma
La segunda
característica, la independencia de la plataforma, significa que programas
escritos en el lenguaje Java pueden ejecutarse igualmente en cualquier tipo de
hardware. Este es el significado de ser capaz de escribir un programa una vez y
que pueda ejecutarse en cualquier dispositivo, tal como reza el axioma de Java,
‘’’write once,
run anywhere’’’.
Para ello, se
compila el código fuente escrito en lenguaje Java, para generar un código
conocido como “bytecode” (específicamente Java bytecode)—instrucciones máquina
simplificadas específicas de la plataforma Java. Esta pieza está “a medio
camino” entre el código fuente y el código máquina que entiende el dispositivo
destino. El bytecode es ejecutado entonces en la máquina virtual (JVM), un
programa escrito en código nativo de la plataforma destino (que es el que
entiende su hardware), que interpreta y ejecuta el código. Además, se
suministran bibliotecas adicionales para acceder a las características de cada
dispositivo (como los gráficos, ejecución mediante hebras o threads, la
interfaz de red) de forma unificada. Se debe tener presente que, aunque hay una
etapa explícita de compilación, el bytecode generado es interpretado o
convertido a instrucciones máquina del código nativo por el compilador JIT
(Just In Time).
Hay
implementaciones del compilador de Java que convierten el código fuente
directamente en código objeto nativo, como GCJ. Esto elimina la etapa intermedia donde se genera el
bytecode, pero la salida de este tipo de compiladores sólo puede ejecutarse en
un tipo de arquitectura.
La licencia sobre
Java de Sun insiste que todas las implementaciones sean “compatibles”. Esto dio
lugar a una disputa legal entre Microsoft y Sun, cuando éste último alegó que
la implementación de Microsoft no daba soporte a las interfaces RMI y JNI
además de haber añadido características ‘’dependientes’’ de su plataforma. Sun
demandó a Microsoft y ganó por daños y perjuicios (unos 20 millones de dólares)
así como una orden judicial forzando la acatación de la licencia de Sun. Como
respuesta, Microsoft no ofrece Java con su versión de sistema operativo, y en
recientes versiones de Windows, su navegador Internet Explorer no admite la
ejecución de applets sin un conector (o plugin) aparte. Sin embargo, Sun y
otras fuentes ofrecen versiones gratuitas para distintas versiones de Windows.
Las primeras
implementaciones del lenguaje usaban una máquina virtual interpretada para
conseguir la portabilidad. Sin embargo, el resultado eran programas que se
ejecutaban comparativamente más lentos que aquellos escritos en C o C++. Esto
hizo que Java se ganase una reputación de lento en rendimiento. Las
implementaciones recientes de la JVM dan lugar a programas que se ejecutan
considerablemente más rápido que las versiones antiguas, empleando diversas
técnicas, aunque sigue siendo mucho más lento que otros lenguajes.
La primera de
estas técnicas es simplemente compilar directamente en código nativo como hacen
los compiladores tradicionales, eliminando la etapa del bytecode. Esto da lugar
a un gran rendimiento en la ejecución, pero tapa el camino a la portabilidad.
Otra técnica, conocida como compilación JIT (Just In Time, o ‘’’compilación al
vuelo’’’), convierte el bytecode a código nativo cuando se ejecuta la aplicación.
Otras máquinas virtuales más sofisticadas usan una ‘’’recompilación dinámica’’’
en la que la VM es capaz de analizar el comportamiento del programa en
ejecución y recompila y optimiza las partes críticas. La recompilación dinámica
puede lograr mayor grado de optimización que la compilación tradicional (o
estática), ya que puede basar su trabajo en el conocimiento que de primera mano
tiene sobre el entorno de ejecución y el conjunto de clases cargadas en
memoria. La compilación JIT y la recompilación dinámica permiten a los
programas Java aprovechar la velocidad de ejecución del código nativo sin por
ello perder la ventaja de la portabilidad en ambos.
La portabilidad es
técnicamente difícil de lograr, y el éxito de Java en ese campo ha sido dispar.
Aunque es de hecho posible escribir programas para la plataforma Java que
actúen de forma correcta en múltiples plataformas de distinta arquitectura, el
gran número de estas con pequeños errores o inconsistencias llevan a que a
veces se parodie el eslogan de Sun, "Write once, run anywhere" como
"Write once, debug
everywhere" (o “Escríbelo una vez, ejecútalo en cualquier parte” por
“Escríbelo una vez, depúralo en todas partes”)
El concepto de
independencia de la plataforma de Java cuenta, sin embargo, con un gran éxito
en las aplicaciones en el entorno del servidor, como los Servicios Web, los
Servlets, los Java Beans, así como en sistemas empotrados basados en OSGi, usando entornos Java empotrados.
PHP
PHP es un lenguaje de programacióninterpretado, diseñado
originalmente para la creación de páginas webdinámicas.
Se usa principalmente para la interpretación del lado del servidor (server-side
scripting) pero actualmente puede ser utilizado desde una interfaz de línea de
comandos o en la creación de otros tipos de programas incluyendo
aplicaciones con interfaz gráfica usando las bibliotecas Qt
o GTK+.
Visión general
PHP es un acrónimo
recursivo que significa PHP Hypertext Pre-processor
(inicialmente PHP Tools, o, Personal Home Page Tools). Fue creado
originalmente por Rasmus Lerdorf en 1994; sin embargo la
implementación principal de PHP es producida ahora por The PHP Group y sirve
como el estándar de facto para PHP al no haber una especificación formal.
Publicado bajo la PHP License, la Free Software Foundation considera esta
licencia como software libre.
Puede ser
desplegado en la mayoría de los servidores web y en casi todos los sistemas operativos
y plataformas sin costo alguno. El lenguaje PHP se encuentra instalado en más
de 20 millones de sitios web y en un millón de servidores, el número de sitios
en PHP ha compartido algo de su preponderante dominio con otros nuevos
lenguajes no tan poderosos desde agosto de 2005. El sitio web de Wikipedia está
desarrollado en PHP. Es también el módulo Apache más popular entre las
computadoras que utilizan Apache como servidor web.
El gran parecido
que posee PHP con los lenguajes más comunes de programación estructurada, como C y Perl, permiten a la mayoría de los programadores crear
aplicaciones complejas con una curva de aprendizaje muy corta. También les
permite involucrarse con aplicaciones de contenido dinámico sin tener que
aprender todo un nuevo grupo de funciones.
Aunque todo en su
diseño está orientado a facilitar la creación de sitios webs, es posible crear
aplicaciones con una interfaz gráfica para el usuario,
utilizando la extensión PHP-Qt
o PHP-GTK. También puede ser
usado desde la línea de órdenes, de la misma manera como Perl o Python pueden hacerlo; a esta versión de PHP se la llama
PHP-CLI (Command Line Interface).
Cuando el cliente
hace una petición al servidor para que le envíe una página web,
el servidor ejecuta el intérprete de PHP. Éste procesa el script solicitado que
generará el contenido de manera dinámica (por ejemplo obteniendo información de
una base de datos). El resultado es enviado por el intérprete al servidor,
quien a su vez se lo envía al cliente. Mediante extensiones es también posible
la generación de archivos PDF,
Flash,
así como imágenes en diferentes formatos.
Permite la
conexión a diferentes tipos de servidores de bases de datos tales como MySQL, PostgreSQL, Oracle, ODBC, DB2, Microsoft SQL Server, Firebird y SQLite.
PHP también tiene
la capacidad de ser ejecutado en la mayoría de los sistemas
operativos, tales como Unix
(y de ese tipo, como Linux
o Mac OS X)
y Microsoft
Windows, y puede interactuar con los servidores de
web más populares ya que existe en versión CGI, módulo para Apache,
e ISAPI.
PHP es una
alternativa a las tecnologías de MicrosoftASP y ASP.NET (que utiliza C# y Visual Basic .NET como lenguajes), a ColdFusion de la empresa Adobe, a JSP/Java y a CGI/Perl. Aunque su creación y desarrollo se da en el ámbito de
los sistemas libres, bajo la licencia GNU,
existe además un entorno de desarrollo integrado comercial llamado Zend Studio. CodeGear (la división de
lenguajes de programación de Borland)
ha sacado al mercado un entorno de desarrollo integrado para PHP, denominado
'Delphi for PHP. También existen al menos un par de módulos para Eclipse,
uno de los entornos más populares.1
Historia
Fue originalmente
diseñado en Perl, con base en la
escritura de un grupo de CGI binarios escritos en el lenguaje C por el programador
danés-canadiense Rasmus Lerdorf en el año 1994 para mostrar su currículum
vítae y guardar ciertos datos, como la cantidad de tráfico que su
página web recibía. El 8 de junio de 1995 fue publicado "Personal Home
Page Tools" después de que Lerdorf lo combinara con su propio Form
Interpreter para crear PHP/FI.
Dos programadores israelíes del Technion, Zeev Suraski
y Andi Gutmans,
reescribieron el analizador sintáctico (parser en
inglés) en el año 1997 y crearon la base del PHP3, cambiando el nombre del
lenguaje a la forma actual. Inmediatamente comenzaron experimentaciones
públicas de PHP3 y fue publicado oficialmente en junio de 1998.Para 1999,
Suraski y Gutmans reescribieron el código de PHP, produciendo lo que hoy se
conoce como motor Zend.
También fundaron Zend Technologies en Ramat Gan, Israel.
En mayo de 2000
PHP 4 fue lanzado bajo el poder del motor Zend Engine 1.0. El día 13 de julio de 2007 se
anunció la suspensión del soporte y desarrollo de la versión 4 de PHP,2 a pesar de lo
anunciado se ha liberado una nueva versión con mejoras de seguridad, la 4.4.8
publicada el 13 de enero del 2008 y posteriormente la versión 4.4.9 publicada
el 7 de agosto de 2008.3
Según esta noticia [1]
se dará soporte a fallos críticos hasta el 9 de agosto de 2008.
El 13 de julio de
2004, fue lanzado PHP 5, utilizando el motor Zend Engine 2.0 (o Zend Engine 2).
Incluye todas las ventajas que provee el nuevo Zend Engine 2 como:
- Mejor soporte para la programación orientada a objetos,
que en versiones anteriores era extremadamente rudimentario.
- Mejoras de rendimiento.
- Mejor soporte para MySQL con extensión
completamente reescrita.
- Mejor soporte a XML (XPath, DOM, etc.).
- Soporte nativo para SQLite.
- Soporte integrado para SOAP.
- Iteradores de datos.
- Manejo de excepciones.
- Mejoras con la implementación con Oracle.
Perl
Perl es un lenguaje de programación diseñado por Larry Wall en 1987. Perl toma características del
lenguaje C, del lenguaje interpretado bourne shell (sh),
AWK, sed, Lisp y, en un grado inferior, de muchos otros lenguajes de
programación.
Estructuralmente,
Perl está basado en un estilo de bloques como los del C o AWK, y fue
ampliamente adoptado por su destreza en el procesado de texto y no tener
ninguna de las limitaciones de los otros lenguajes de script.
Historia
Larry Wall comenzó
a trabajar en Perl en 1987
mientras trabajaba como programador en Unisys1
y anunció la versión 1.0 en el grupo de noticias comp.sources.misc el 18 de
diciembre de 1987. El lenguaje se expandió rápidamente en los
siguientes años. Perl 2, publicado en 1988,
aportó un mejor motor de expresiones regulares. Perl 3, publicado en 1989, añadió soporte para datos binarios.
Hasta 1991 la única documentación de Perl era
una simple (y cada vez más larga) página de manual Unix. En 1991 se publicó Programming
Perl (el libro del camello)
y se convirtió en la referencia de facto del lenguaje. Al mismo tiempo,
el número de versión de Perl saltó a 4, no por marcar un gran cambio en el
lenguaje, sino por identificar a la versión que estaba documentada en el
libro.Perl 4 trajo consigo una serie de lanzamientos de mantenimiento,
culminando en Perl 4.036 en 1993. En este punto, Larry Wall abandonó Perl 4
para comenzar a trabajar en Perl 5. Perl 4 se quedaría en esa versión hasta
hoy. El desarrollo de Perl 5 continuó en 1994. La lista de correo perl5-porters se estableció en
mayo de 1994 para coordinar el trabajo de adaptación de Perl 5 a diferentes
plataformas. Es el primer foro para desarrollo, mantenimiento y adaptación de
Perl 5.
Perl 5 fue
publicado el 17 de octubre
de 1994. Fue casi una completa reescritura del intérprete y añadió muchas nuevas
características al lenguaje, incluyendo objetos, referencias, paquetes y
módulos. A destacar, los módulos proveen de un mecanismo para extender el
lenguaje sin modificar el intérprete. Esto permitió estabilizar su núcleo
principal, además de permitir a los programadores de Perl añadirle nuevas
características.
El 26 de octubre
de 1995, se creó el Comprehensive
Perl Archive Network (CPAN). CPAN
es una colección de sitios web que almacenan y distribuyen fuentes en Perl,
binarios, documentación, scripts y módulos. Originalmente, cada sitio CPAN
debía ser accedido a través de su propio URL; hoy en día, http://www.cpan.org redirecciona
automáticamente a uno de los cientos de repositorios espejo de CPAN.
En 2008, Perl 5 continua siendo mantenido.
Características importantes y algunas construcciones esenciales han sido
añadidas, incluyendo soporte Unicode,
Hilos (threads), un soporte
importante para la programación orientada a objetos y otras mejoras.
Nombre
Perl se llamó
originalmente "Pearl", por la Parábola de la Perla. Larry Wall quería
darle al lenguaje un nombre corto con connotaciones positivas; asegura que miró
(y rechazó) todas las combinaciones de tres y cuatro letras del diccionario.
También consideró nombrarlo como su esposa Gloria. Wall descubrió antes del
lanzamiento oficial que ya existía un lenguaje de programación llamado PEARL y
cambió la ortografía del nombre.
El nombre
normalmente comienza con mayúscula (Perl) cuando se refiere al lenguaje
y con minúsculas (perl) cuando se refiere al propio programa intérprete
debido a que los sistemas de ficheros Unix distinguen mayúsculas y minúsculas.
Antes del lanzamiento de la primera edición de Programming Perl era
común referirse al lenguaje como perl; Randal L. Schwartz, sin embargo,
forzó el nombre en mayúscula en el libro para que destacara mejor cuando fuera
impreso. La distinción fue subsiguientemente adoptada por la comunidad.
El nombre es
descrito ocasionalmente como "PERL" (por Practical Extraction
and Report Language - Lenguaje
Práctico para la Extracción e Informe). Aunque esta expansión ha prevalecido
en muchos manuales actuales, incluyendo la página de manual de Perl, es un retroacrónimo
y oficialmente el nombre no quiere decir nada. La ortografía de PERL en
mayúsculas es por eso usada como jerga
para detectar a individuos ajenos a la comunidad. Sin embargo, se han sugerido
varios retroacrónimos, incluyendo el cómico Pathologically Eclectic Rubbish
Lister (Contabilizador de Basura Patológicamente Ecléctico).
It can be seen from Thais mega888 agent that there are more amateurs than before. instruction is collected from this channel because players are offered pardon betting formulas.
ResponderBorrarThe other most important thing is whether you bet 918kiss demo account
ResponderBorrarlegally on an online gambling site, and every free online gambler should maintain mindfulness regardless of the channel. Have a lot of self-discipline.
Plays perfectly but in order to play games 918kiss in casino
ResponderBorrar918live in ios
918kiss apk in casino
casino in malaysia
with real money in this format, focus and homework come first. Now is the era of video poker, as it exists in almost every casino, for example, it is known that slot machines have the lowest odds among casinos. But depends on the type of slot.
https://918kissapkiosdrive.car.blog/
http://jcorso.jigsy.com/
https://mattheq.livejournal.com/491.html
https://crutcher.doodlekit.com
https://www.evernote.com/shard/s724/sh/e8cfa898-924d-46a8-a41b-
a2957cfaec42/0c94efcdbac5844ffac4fea0edebdd24
In order to reduce losses and wins, the best event to think of is the "basic strategy" that casino royale xem phim every all-powerful blackjack performer must remember. Those who are enlarged will choose to use this strategy every period they bet. You can purchase strategy cards or deed actions to read. There will be casinos, and no one says that the casinos are not excited in things in the same way as that because in any case, the dealer yet gets water from the player's bet, and even if they yet lose a little percentage of the casino, they will pay more attention to the eagerness of each game bet. Especially in innovative games because it can slow the casino on the other hand of the game. Therefore, you can use strategy but think twice since thinking for a long grow old until the circular of betting games is delayed and additional players are frustrated.
ResponderBorrarThe blog article very surprised to me! Your writing zipleaf
ResponderBorraris good. In this I learned a lot! Thank you. https://zipleaf.auz.net/Companies/Dgsolagency