Antes de 1940 Los primeros lenguajes de programación preceden a la computadora moderna. En un inicio los lenguajes eran códigos. La máquina del telar de Jacquard, creada en 1801, utilizaba los orificios en tarjetas perforadas para representar los moimientos de un brazo de la máquina de tejer, con el objetio de generar patrones decoratios automáticamente. !urante un per"odo de nuee meses entre 18#$ % 18#&, 'da Loelace tradujo las memorias del matemático italiano Luigi (enabrea acerca de la nuea máquina propuesta por )*arles +abbage, la (áquina 'nal"tica. )on estos escritos, ella aadió unas notas en las cuales especificaba en detalle un m-todo para calcular los nmeros de +ernoulli con esta máquina, el cual es reconocido por muc*os *istoriadores como el primer programa de computadora del mundo. /erman /ollerit* se percató de que pod"a codificar la información en tarjetas perforadas cuando obseró a los conductores de trenes codificar la apariencia de los ticets del tren con la posición de los agujeros perforados en estos. En 180 /ollerit* codificó los datos del censo en tarjetas perforadas. Los primeros códigos de computadora estaban especializados segn sus aplicaciones. En las primeras d-cadas del siglo $0, los cálculos num-ricos estaban basados en los nmeros decimales. Eentualmente se fueron dando cuenta que la lógica pod"a ser representada con nmeros, no sólo con palabras. 2or ejemplo, 'lonzo )*urc* fue capaz de e3presar el cálculo lambda a tra-s de fórmulas. La máquina de 4uring estableció las bases para almacenar programas como datos en la arquitectura de on 5euman de una computadora. 6in embargo, a diferencia del cálculo lambda, el código de 4uring no serir"a satisfactoriamente como base para lenguajes de más alto niel7 su principal uso es en el análisis riguroso en la complejidad algor"tmica. )omo muc*os primeros9 en la *istoria, el primer lenguaje de programación moderno es dif"cil de identificar. !esde un inicio, las restricciones de *ard:are defin"an el lenguaje. Las tarjetas perforadas permit"an 80 columnas, pero algunas de estas ser"an utilizadas para una clasificación de cada tarjeta. ;<=4='5 inclu"a algunas palabras reseradas proenientes del >ngl-s, como >;9, ?<4<9 @go toA % )<54>5BE9. El uso del tambor magn-tico para la memoria implicaba que los programas informáticos tuieran que estar intercalados con las rotaciones del tambor. 2or lo tanto los programas eran mu% dependientes del *ard:are. 2ara algunas personas, lo que ser"a el primer lenguaje de programación moderno depende de cuánto poder % legibilidad *umana se requer"a antes de que se concediera el estado de Clenguaje de programaciónC. 4anto el telar de Jacquard como la (áquina !iferencial de +abbage, ten"an lenguajes mu% simples % e3tremadamente limitados para describir las acciones que estas máquinas realizaran. 6e puede incluso considerar los agujeros perforados en los rollos de pianola como un limitado lenguaje de dominio espec"fico, a pesar de no estar diseado para el consumo *umano.
Los años 40 En la d-cada de 1#0 fueron creadas las primeras computadoras modernas, con alimentación el-ctrica. La elocidad % capacidad de memoria limitadas forzaron a los programadores a escribir programas, en lenguaje ensamblador mu% afinados. ;inalmente se dieron cuenta de que la programación en lenguaje ensamblador requer"a de un gran esfuerzo intelectual % era mu% propensa a errores. En 1#8, Donrad use publicó un art"culo acerca de su lenguaje de programación 2lanalFl. 6in embargo, no fue implementado en su ida % sus contribuciones fueron aisladas de otros desarrollos. Entre algunos lenguajes importantes que fueron desarrollados en este per"odo se encuentranG •
1#& 7 2lanalFl @Donrad useA, diseado, pero sin implementar durante medio siglo
•
1#& 7 el sistema de codificación E5>').
1# 7 1H# 77 una serie de conjuntos de instrucciones nemot-cnicas, como la de E5>'), comenzando en 1# con )710 para +>5') @que luego eolucionar"a en B5>I')A. )ada conjunto de instrucciones estaba destinado a un fabricante espec"fico. •
Las décadas de 1950 y 1960 En los cincuenta, los tres primeros lenguajes de programación modernos, cu%os descendientes an continan siendo utilizados, sonG •
;<=4='5 @1HHA, creado por Jo*n +acus et al.
•
L>62 @1H8A, creado por Jo*n (c)art*% et al.
•
)<+
mbito l-3icoG un bloque puede tener sus propias ariables, procedimientos % funciones, inisible al código fuera de dic*o bloque, por ejemplo, ocultamiento de información. •
'lgol K0 influenció particularmente en el diseo de lenguajes posteriores, de los cuales algunos se
*icieron más populares. Los grandes sistemas de +urroug*s fueron diseados para ser programados en un subconjunto e3tendido de 'lgol. Las ideas fundamentales de 'lgol se continuaron, produciendo 'lgol K8G la sinta3is % la semántica se *izo an más ortogonal, con rutinas anónimas, un sistema de tipificación recursia con funciones de orden superior, etc. •
% no sólo la parte libre del conte3to, sino que tanto la sinta3is como la semántica del lenguaje completo fueron definidos formalmente, en t-rminos de una gramática de Ian Mijngaarden, un formalismo diseado espec"ficamente para este propósito. •
Las ariadas pero poco usadas caracter"sticas de 'lgol K8 @por ejemplo, bloques simultáneos % paralelosA % su complejo sistema de atajos sintácticos % coerciones automáticas de tipo lo *icieron impopular entre los ejecutores % se ganó una reputación de ser dif"cil. 5ilaus Mirt* salió del comit- de diseo para crear el sencillo lenguaje2ascal. 'lgunos de los lenguajes importantes que fueron desarrollados en este per"odo inclu%enG •
1H1 7 =egional 'ssembl% Language
•
1H$ 7 'utocode
•
1H# 7 >2L @precursor de L>62A
•
1HH 7 ;L
) @precursor de )<+
•
1HN 7 ;<=4='5 @primer compiladorA
•
1HN 7 )<(4='5 @precursor de )<+
•
1H8 7 L>62
•
1H8 7 'L?
•
1H 7 ;')4 @precursor de )<+
•
1H 7 )<+
•
1H 7 =2?
•
1K$ 7 '2L
•
1K$ 7 6imula
•
1K$ 7 65<+
•
1K& 7 )2L @precursor de )A
•
1K# 7 +'6>)
•
1K# 7 2LO>
•
1KN 7 +)2L @precursor de )A
1968-1979: estableciendo paradigmas !ndamentales El per"odo comprendido entre finales de 1K0 % finales de 1N0 trajo un gran florecimiento de lenguajes de programación. La ma%or"a de los paradigmas de lenguajes de programación más importantes % actualmente en uso se inentaron en este per"odoG 6imula, inentado en la d-cada de 1K0 por 5%gaard % !a*l como un superconjunto de 'lgol K0, fue el primer lenguaje diseado para apo%ar la programación orientada a objetos. •
), en principio un lenguaje de programación sistemas, fue desarrollado por !ennis =itc*ie % Den 4*ompson en los Laboratorios +ell entre 1K % 1N&. •
•
6malltal @mediados de los N0A proporcionaron un completo diseo de un lenguaje orientado a objetos.
2rolog, diseado en 1N$ por )olmerauer, =oussel % Do:alsi, fue el primer lenguaje de programación lógica. •
(L constru%ó un sistema de tipos polimórfico @inentado por =obin (ilner en 1N&A en el tope de Lisp, pionero en los lenguajes funcionales de programación con tipado estático. •
)ada uno de estos lenguajes generó toda una familia de descendientes, % los lenguajes más modernos cuentan al menos uno de ellos en su ascendencia. En los aos K0 % N0 tambi-n suscitó un debate considerable sobre los m-ritos de la Cprogramación estructuradaC, que esencialmente significaba programación sin el uso de?<4<. Este debate estaba estrec*amente relacionado con el diseo del lenguajeG algunos lenguajes no inclu"an ?<4<, lo que obligó a la programación estructurada en el programador. 'unque el debate se recrudec"a acaloradamente en ese momento, casi todos los programadores están de acuerdo en que, incluso en lenguajes que ofrecen ?<4<, es una mala práctica de programación usarlo, e3cepto en raras circunstancias. )omo resultado de ello, las generaciones posteriores de diseadores de lenguajes *an encontrado el debate sobre programación estructurada tedioso e incluso desconcertante. 'lgunos lenguajes importantes que se desarrollaron en este per"odo fueronG •
1K8 7 Logo
•
1K 7 + @precursor )A
•
1N0 7 2ascal
•
1N0 7 ;ort*
•
1N$ 7 )
•
1N$ 7 6malltal
•
1N$ 7 2rolog
•
1N& 7 (L
•
1NH 7 6c*eme
1N8 7 6PL @inicialmente sólo un lenguaje de consulta, posteriormente ampliado con construcciones de programaciónA •
La década de 1980: consolidaci"n# m"d!los# rendimiento La d-cada de 180 fueron aos de consolidación relatia en los lenguajes imperatios. En ez de inentar nueos paradigmas, se comenzó a trabajar a partir de las ideas inentadas en la d-cada anterior. )QQ combinaba la programación orientada a objetos % la programación de sistemas. El gobierno de Estados Bnidos estandarizó 'da, un lenguaje de programación de sistemas destinado a ser utilizado por contratistas de defensa. En Japón % en otras partes, se gastaron enormes sumas inestigando los llamados lenguajes de programación de quinta generación que incorporaban construcciones de la programación lógica. La comunidad de los lenguajes funcionales llearon a cabo la estandarización de (L % Lisp. La inestigación en (iranda, un lenguaje funcional, con ealuación perezosa, comenzó a tomar fuerza en esta d-cada. Bna nuea tendencia importante en el diseo de lenguajes era un ma%or enfoque en la programación de sistemas a gran escala a tra-s del uso de módulos, una organización a gran escala de unidades de código. (odula, 'da, % (L desarrollaron sistemas de módulos notables en la d-cada de 180. Los sistemas de módulos eran relacionados con frecuencia con construcciones de programación gen-ricas, que ser"an, en esencia, módulos parametrizados @-ase tambi-n polimorfismo en programación orientada a objetosA. 'unque no aparec"an nueos paradigmas de lenguajes de programación imperatios, muc*os inestigadores e3pandieron las ideas de los lenguajes anteriores % las adaptaron a nueos conte3tos. 2or ejemplo, los lenguajes de los sistemas 'rgus % Emerald adaptaron la programación orientada a objetos para sistemas distribuidos. La d-cada de 180 tambi-n trajo aances en la implementación de lenguajes de programación. El moimiento de =>6) en la arquitectura de computadoras postulaba que el *ard:are deb"a estar diseado para los compiladores más que para los programadores de ensamblador *umanos. )on la a%uda de las mejoras en la elocidad del procesador, permitiendo t-cnicas de compilación cada ez más agresias, el moimiento =>6) despertó un ma%or inter-s en la tecnolog"a de compilación de los lenguajes de alto niel. Las tecnolog"as de los lenguajes continuaron sobre estas l"neas entrando en la d-cada de 10. 'lgunos lenguajes importantes que se desarrollaron en este per"odo sonG •
180 7 )QQ @) con clases, el nombre cambió en julio de 18&A
•
18& 7 'da
•
18# 7 )ommon Lisp
•
18# 7 ('4L'+
•
18H 7 Eiffel
•
18K 7
•
18K 7 Erlang
•
18N 7 2erl
•
188 7 4cl
•
188 7 (at*ematica
•
18 7 ;L @+acusA
La década de 1990: la era de $nternet El rápido crecimiento de >nternet en la d-cada de 10 fue el siguiente gran acontecimiento *istórico para los lenguajes de programación. )on la apertura de una plataforma totalmente nuea para los sistemas informáticos, >nternet creó una oportunidad adoptar nueos lenguajes. En particular, el lenguaje de programación Jaa se *izo popular debido a su pronta integración con el naegador :eb 5etscape 5aigator, % arios lenguajes de scripting alcanzaron un amplio uso en el desarrollo de aplicaciones personalizadas para seridores :eb. La d-cada de 10 no io ninguna noedad fundamental en los lenguajes imperatios, pero s" muc*a recombinación % la maduración de iejas ideas. Esta era comenzó la difusión de los lenguajes funcionales. Bna filosof"a de conducción grande era la productiidad del programador. 6urgieron muc*os lenguajes de aplicaciones de desarrollo rápido9 @='!A, los cuales usualmente en"an con un >!E, recolector de basura, % eran descendientes de lenguajes anteriores. 4odos estos lenguajes eran orientados a objeto. Estos inclu"an
10 7 /asell
•
11 7 2%t*on
•
11 7 Iisual +asic
•
11 7 /4(L @lenguaje de marcado de *iperte3toA
•
1& 7 =ub%
•
1& 7 Lua
•
1# 7 )L<6 @parte del '56> )ommon LispA
•
1H 7 Jaa
•
1H 7 !elp*i @
•
1H 7 Jaa6cript
•
1H 7 2/2
•
1K 7 Meb!5'
•
1N 7 =ebol
•
1 7 !
%endencias act!ales La eolución de los lenguajes de programación contina, tanto en la industria como en inestigación. 'lgunas de las tendencias actuales inclu%enG 'umentar el soporte para la programación funcional en lenguajes importantes utilizados comercialmente, incluida la programación funcional pura para *acer el código más fácil de razonar % de paralelizar @tanto en macro como en micro7nielesA. •
•
)onstruir lenguajes para apo%ar la programación concurrente % distribuida.
(ecanismos para aadir al lenguaje erificación en cuanto a seguridad % confiabilidadG c*equeo sintáctico e3tendido, control de flujo de información, seguridad de *ilos. •
•
(ecanismos alternatios de modularidadG mi3ins, delegados, aspectos.
•
!esarrollo de soft:are orientado a componentes.
•
(etaprogramación, la refle3ión o el acceso al árbol de sinta3is abstracta.
•
(a%or -nfasis en cuanto a distribución % moilidad.
•
>ntegración con bases de datos, inclu%endo R(L % bases de datos relacionales.
6oporte para Bnicode para que el código fuente @te3to del programaA no se limite sólo a los caracteres contenidos en el conjunto de caracteres '6)>>, permitiendo, por ejemplo, el uso de caracteres no latinos basados en guiones o signos de puntuación e3tendidos. •
•
R(L para interfaz gráfica @RBL, R'(LA.
El código abierto como una filosof"a de desarrollo de lenguajes, inclu%endo la colección de compiladores de ?5B % lenguajes recientes, como 2%t*on, =ub%, % 6quea. •
•
2rogramación
•
Lenguajes que soporten programar sobre los procesadores de la ?2B en paralelo, como
'lgunos lenguajes importantes desarrollados durante este per"odo inclu%enG •
$000 7 'ction6cript
•
$001 7 )S
•
$001 7 Iisual +asic .5E4
•
$00$ 7 ;S
•
$00& 7 ?roo%
•
$00& 7 6cala
•
$00& 7 ;actor
•
$00N 7 )lojure
•
$00 7 ?o
•
$011 7 !art
&ersonas destacadas en la 'istoria de los leng!a(es de programaci"n •
Joe 'rmstrong, creador de Erlang.
•
Jo*n +acus, inentor de ;ortran.
•
'lan )ooper, desarrollador de Iisual +asic.
•
Edsger M. !ijstra, desarrolló la estructura para la programación estructurada.
•
James ?osling, desarrollador de
•
'nders /ejlsberg, desarrollador de 4urbo 2ascal, !elp*i % )S.
•
?race /opper, desarrolladora de ;lo:7(atic, influenciando el lenguaje )<+
•
Dennet* E. >erson, desarrollador de '2L, % co7desarrollador de J junto a =oger /ui.
•
+ill Jo%, inentor de i, autor de +6! Bni3, creador de 6un<6, el cual se conirtió en 6olaris.
•
'lan Da%, pionero en programación orientada a objetos, creador de 6malltal.
+rian Dernig*an, coautor del primer libro de programación en lenguaje ) con !ennis =itc*ie, % coautor de los lenguajes de programación 'MD % '(2L. •
•
Tui*iro (atsumoto, creador de =ub%.
•
Jo*n (c)art*%, inentor de L>62.
•
+ertrand (e%er, inentor de Eiffel.
=obin (ilner, inentor de (L, % compartió cr-dito en el m-todo /indle%U(ilner de inferencia de tipo polimórfica. •
•
Jo*n on 5eumann, creador del concepto de sistema operatio.
•
(artin
6e%mour 2apert, pionero de la inteligencia artificial, inentor del lenguaje de programación Logo en 1K8. . •
•
!ennis =itc*ie, inentor de ). 6istema
•
5at*aniel =oc*ester, inentor del primer lenguaje en ensamblador simbólico @>+( N01A.
•
?uido an =ossum, creador de 2%t*on.
•
+jarne 6troustrup, desarrollador de )QQ.
•
Den 4*ompson, inentor de +, desarrollador de ?o, % coaut*or del sistema operatio Bni3.
•
Larr% Mall, creador de 2erl % 2erl K.
•
5ilaus Mirt*, inentor de 2ascal, (odula %
•
6tep*en Molfram, creador de (at*ematica.