SOFTWARE DE DESARROLLO Características del …admin-info.galeon.com/desarrollo.pdf · Java...
Transcript of SOFTWARE DE DESARROLLO Características del …admin-info.galeon.com/desarrollo.pdf · Java...
SOFTWARE DE DESARROLLO
Características del lenguaje Java
Lenguaje simple
Java posee una curva de aprendizaje muy rápida. Resulta relativamente sencillo escribir applets interesantes desde el principio. Todos aquellos familiarizados con C++ encontrarán que Java es más sencillo, ya que se han eliminado ciertas características, como los punteros. Debido a su semejanza con C y C++, y dado que la mayoría de la gente los conoce aunque sea de forma elemental, resulta muy fácil aprender Java. Los programadores experimentados en C++ pueden migrar muy rápidamente a Java y ser productivos en poco tiempo.
Orientado a objetos
Java fue diseñado como un lenguaje orientado a objetos desde el principio. Los objetos agrupan en estructuras encapsuladas tanto sus datos como los métodos (o funciones) que manipulan esos datos. La tendencia del futuro, a la que Java se suma, apunta hacia la programación orientada a objetos, especialmente en entornos cada vez más complejos y basados en red.
Distribuido
Java proporciona una colección de clases para su uso en aplicaciones de red, que permiten abrir sockets y establecer y aceptar conexiones con servidores o clientes remotos, facilitando así la creación de aplicaciones distribuidas.
Interpretado y compilado a la vez
Java es compilado, en la medida en que su código fuente se transforma en una especie de código máquina, los bytecodes, semejantes a las instrucciones de ensamblador. Por otra parte, es interpretado, ya que los bytecodes se pueden ejecutar directamente sobre cualquier máquina a la cual se hayan portado el intérprete y el sistema de ejecución en tiempo real (run-time).
Robusto
Java fue diseñado para crear software altamente fiable. Para ello proporciona numerosas comprobaciones en compilación y en tiempo de ejecución. Sus características de memoria liberan a los programadores de una familia entera de errores (la aritmética de punteros), ya que se ha prescindido por completo los punteros, y la recolección de basura elimina la necesidad de liberación explícita de memoria.
Seguro (?)
Dada la naturaleza distribuida de Java, donde las applets se bajan desde cualquier punto de la Red, la seguridad se impuso como una necesidad de vital importancia. A nadie le gustaría ejecutar en su ordenador programas con acceso total a su sistema, procedentes de fuentes desconocidas. Así que se implementaron barreras de seguridad en el lenguaje y en el sistema de ejecución en tiempo real.
Indiferente a la arquitectura
Java está diseñado para soportar aplicaciones que serán ejecutadas en los más variados entornos de red, desde Unix a Windows Nt, pasando por Mac y estaciones de trabajo, sobre arquitecturas distintas y con sistemas operativos diversos. Para acomodar requisitos de ejecución tan variopintos, el compilador de Java genera bytecodes: un formato intermedio indiferente a la arquitectura diseñado para transportar el código eficientemente a múltiples plataformas hardware y software. El resto de problemas los soluciona el intérprete de Java.
Portable
La indiferencia a la arquitectura representa sólo una parte de su portabilidad. Además, Java especifica los tamaños de sus tipos de datos básicos y el comportamiento de sus operadores aritméticos, de manera que los programas son iguales en todas las plataformas. Estas dos últimas características se conocen como la Máquina Virtual Java(JVM).
Alto rendimiento
Multihebra
Hoy en día ya se ven como terriblemente limitadas las aplicaciones que sólo pueden ejecutar una acción a la vez. Java soporta sincronización de múltiples hilos de ejecución (multithreading) a nivel de lenguaje, especialmente útiles en la creación de aplicaciones de red distribuidas. Así, mientras un hilo se encarga de la comunicación, otro puede interactuar con el usuario mientras otro presenta una animación en pantalla y otro realiza cálculos.
Dinámico
El lenguaje Java y su sistema de ejecución en tiempo real son dinámicos en la fase de enlazado. Las clases sólo se enlazan a medida que son necesitadas. Se pueden enlazar nuevos módulos de código bajo demanda, procedente de fuentes muy variadas, incluso desde la Red.
Produce applets
Java puede ser usado para crear dos tipos de programas: aplicaciones independientes y applets. Las aplicaciones independientes se comportan como cualquier otro programa escrito en cualquier lenguaje, como por ejemplo el navegador de Web HotJava, escrito íntegramente en Java.
Por su parte, las applets son pequeños programas que aparecen embebidos en las páginas Web, como aparecen los gráficos o el texto, pero con la capacidad de ejecutar acciones muy complejas, como animar imágenes, establecer conexiones de red, presentar menús y cuadros de diálogo para luego emprender acciones, etc.
Microsoft Visual Basic
Visual Basic es un lenguaje de programación desarrollado por Alan Cooper para Microsoft. El
lenguaje de programación es un dialecto de BASIC, con importantes añadidos. Su primera
versión fue presentada en 1991 con la intención de simplificar la programación utilizando
un ambiente de desarrollo completamente gráfico que facilitara la creación de interfaces
gráficas y en cierta medida también la programación misma. Desde el 2001 Microsoft ha
propuesto abandonar el desarrollo basado en la API Win32 y pasar a trabajar sobre un
framework o marco común de librerías independiente de la version del sistema operativo, .NET
Framework, a través de Visual Basic .NET (y otros lenguajes como C Sharp (C#) de fácil
transición de código entre ellos) que presenta serias incompatibilidades con el código Visual
Basic existente.
Visual Basic constituye un IDE (entorno de desarrollo integrado o en inglés Integrated
Development Enviroment) que ha sido empaquetado como un programa de aplicación, es decir,
consiste en un editor de código (programa donde se escribe el código fuente), un depurador
(programa que corrige errores en el código fuente para que pueda ser bien compilado), un
compilador (programa que traduce el código fuente a lenguaje de máquina), y un constructor de
interfaz gráfica o GUI (es una forma de programar en la que no es necesario escribir el código
para la parte gráfica del programa, sino que se puede hacer de forma visual).
Características generales
Es un lenguaje de fácil aprendizaje pensado tanto para programadores principiantes como
expertos, guiado por eventos, y centrado en un motor de formularios que facilita el rápido
desarrollo de aplicaciones gráficas. Su sintaxis, derivada del antiguo BASIC, ha sido ampliada
con el tiempo al agregarse las características típicas de los lenguajes estructurados modernos. Se
ha agregado una implementación limitada de la programación orientada a objetos (los propios
formularios y controles son objetos), aunque sí admite el polimorfismomediante el uso de los
Interfaces, no admite la herencia. No requiere de manejo de punteros y posee un manejo muy
sencillo de cadenas de caracteres. Posee varias bibliotecas para manejo de bases de datos,
pudiendo conectar con cualquier base de datos a través
de ODBC (Informix, DBase, Access, MySQL, SQL Server, PostgreSQL ,etc) a través de ADO.
Es utilizado principalmente para aplicaciones de gestión de empresas, debido a la rapidez con la
que puede hacerse un programa que utilice una base de datos sencilla, además de la abundancia
de programadores en este lenguaje.
El compilador de Microsoft genera ejecutables que requieren una DLL para que funcionen, en
algunos casos llamada MSVBVMxy.DLL (acrónimo de "MicroSoft Visual Basic Virtual
Machine x.y", siendo x.y la versión) y en otros VBRUNXXX.DLL ("Visual Basic Runtime
X.XX"), que provee todas las funciones implementadas en el lenguaje. Además existen un gran
número de bibliotecas (DLL) que facilitan el acceso a muchas funciones del sistema operativo y
la integración con otras aplicaciones. Sin embargo esto sólo es una limitación en sistemas
obsoletos, ya que las bibliotecas necesarias para ejecutar programas en Visual Basic vienen de
serie en todas las versiones de Windows desde Windows 2000.
Versiones
Las versiones de Visual Basic para Windows son muy conocidas, pero existe una versión de
Microsoft Visual Basic 1.0 para MS-DOS (ediciones Profesional y Estándar) menos difundida y
que data de 1992. Era un entorno que, aunque en modo texto, incluía un diseñador de
formularios en el que se podían arrastrar y soltar distintos controles.
La última versión sólo para 16 bits, la 3.0, incluía ya una detallada biblioteca de componentes
para toda clase de usos. Durante la transición de Windows 3.11 a Windows 95, apareció la
versión 4.0, que podía generar programas de 16 y 32 bits a partir de un mismo código fuente, a
costa de un gran aumento en el tamaño de los archivos "runtime" necesarios. Además, se
sustituyen los controles VBX por los nuevos OCX. Con la versión 5.0, se implementó por
primera vez la posibilidad de compilar a código nativo, obteniendo una mejora de rendimiento
considerable. Tanto esta como la posterior 6.0 soportaban características propias de los
lenguajes orientados a objetos, aunque careciendo de algunos ítems importantes como la
herencia, el polimorfismo y la sobrecarga. La versión 6.0 continua utilizándose masivamente.
Las versiones actuales de Visual Basic se basan en la plataforma .NET, que se desligan de las
anteriores versiones.
Ventajas
Ventajas
� Es un lenguaje RAD.
� Posee una curva de aprendizaje muy rápida.
� Integra el diseño e implementación de formularios de Windows.
� Permite usar con suma facilidad la plataforma de los sistemas Windows.
� El código en Visual Basic es fácilmente migrable a otros lenguajes.
Inconvenientes
Inconvenientes
� Sin soporte de Microsoft desde el 4 de abril de 2008 (Pero el MSDN es muy completo).
� No es multiplataforma (Sin embargo se pueden usar emuladores e interpretes para correrlos
en otras plataformas).
� Por defecto permite la programación sin declaración de variables. (que puede ser
sencillamente corregida escribiendo la frase Option Explicit en el encabezado de cada
formulario, en cuyo caso será menester declarar todas las variables a utilizar, lo que a la postre
genera código más puro).
� No permite programación a bajo nivel ni incrustrar secciones de código en ASM.
� Sólo permite el uso de funciones de librerías dinámicas (DLL) stdcall.
� Algunas funciones están indocumentadas (Sin embargo esto ocurre en muchos lenguajes).
� Es un lenguaje basado en objetos y no orientado a objetos.
� No maneja muy bien los apuntadores de memoria.
� No soporta tratamiento de procesos como parte del lenguaje.
� No incluye operadores de desplazamiento de bits como parte del lenguaje.
� No permite el manejo de memoria dinámica, punteros, etc. como parte del lenguaje.
� No avisa de ciertos errores o advertencias (se puede configurar el compilador para generar
ejecutables sin los controladores de desbordamiento de enteros o las comprobaciones de límites
en matrices entre otros, dejando así más de la mano del programador la tarea de controlar dichos
errores)
� No tiene instrucciones de preprocesamiento.
� El tratamiento de mensajes de Windows es básico e indirecto.
� La gran gama de controles incorporados son, sin embargo en algunos casos, muy generales,
lo que lleva a tener que reprogramar nuevos controles para una necesidad concreta de la
aplicación. Esto cambia radicalmente en Visual Basic .NET donde es posible reprogramar y
mejorar o reutilizar los controles existentes.
� Los controles personalizados no mejoran la potencia de la API de Windows, y en
determinados casos acudir a ésta será el único modo de conseguir el control personalizado
deseado.
Entornos de desarrollo
Existe un único entorno de desarrollo para Visual Basic, desarrollado por Microsoft:
� Microsoft Visual Basic x.0 para versiones desde la 1.0 hasta la 8.0, (con las diferencias entre
las versiones desde la 1.0 (MS-DOS/Windows 3.1) hasta la 3.0 (16 bits, Windows 3.1) y las de
la 4.0 (16/32 bits, Windows 3.1/95/NT) hasta la 6.0 (32 bits, Windows
9x/Me/NT/2000/XP/Vista)
Gambas es un proyecto libre para GNU/Linux que hereda en gran medida de Visual Basic su
lenguaje y su entorno de desarrollo.
Delphi
Delphi es un entorno de desarrollo de software diseñado para la programación de propósito
general con énfasis en la programación visual. En Delphi se utiliza como lenguaje de
programación una versión moderna de Pascal llamada Object Pascal. Es producido
comercialmente por la empresa estadounidense CodeGear, adquirida en Mayo de 2008 por
Embarcadero Technologies, una empresa del grupo Thoma Cressey Bravo, en una suma que
ronda los 30 millones de dólares. En sus diferentes variantes, permite producir
archivosejecutables para Windows, Linux y la plataforma .NET.
CodeGear ha sido escindida de la empresa Borland, donde Delphi se creó originalmente, tras un
proceso que pretendía en principio la venta del departamento de herramientas para desarrollo.
Uso y variantes
Un uso habitual de Delphi (aunque no el único) es el desarrollo de aplicaciones visuales y
de bases de datos cliente-servidor y multicapas. Debido a que es una herramienta de propósito
múltiple, se usa también para proyectos de casi cualquier tipo, incluyendo aplicaciones de
consola, aplicaciones de web (por ejemplo servicios web, CGI, ISAPI, NSAPI, módulos para
Apache), servicios COM y DCOM, y servicios del sistema operativo. Entre las aplicaciones
más populares actualmente destaca Skype, un programa de telefonía por IP.
Delphi inicialmente sólo producía ejecutables binarios para Windows: Delphi 1 para Win16 y
con Delphi 2 se introdujo Win32. En la actualidad da más posibilidades:
� En la última versión RAD Studio 2009 incluye en el mismo entorno de desarrollo los
lenguajes:
� Delphi para Win32
� Delphi para .NET
� C# para .NET
� C++
� Existe una versión de Delphi para sistemas Unix y Linux, denominada Kylix (de la cual
existe un versión gratuita, aunque limitada). Sin embargo Kylix fue congelado por Borland en
su versión 3.00.
El lenguaje de programación
Delphi está basado en una versión moderna de Pascal, denominada Object Pascal. Borland en
los últimos años defendía que el nombre correcto del lenguaje es también Delphi, posiblemente
debido a pretensiones de marca, aunque en sus mismos manuales el nombre del lenguaje
aparecía como Object Pascal, por lo que la comunidad de programadores no ha adoptado
mayoritariamente este cambio (supuesta aclaración, según Borland). Object Pascal expande las
funcionalidades del Pascal estándar:
� Soporte para la programación orientada a objetos (habitualmente llamada POO) también
existente desde Turbo Pascal 5.5, pero más evolucionada en cuanto a:
� Encapsulación: declarando partes privadas, protegidas, públicas y publicadas de las
clases
� Propiedades: concepto nuevo que luego han adaptado muchos otros lenguajes. Las
propiedades permiten usar la sintaxis de asignación para setters y getters.
� Simplificación de la sintaxis de referencias a clases y punteros.
� Soporte para manejo estructurado de excepciones, mejorando sensiblemente el control de
errores de usuario y del sistema.
� Programación activada por eventos (event-driven), posible gracias a la técnica de delegación
de eventos. Esta técnica permite asignar el método de un objeto para responder a un evento
lanzado sobre otro objeto. Fue adoptada por Niklaus Wirth, autor del Pascal Original, e
incorporada a otros de sus lenguajes como Component Pascal.
Componentes
Delphi dio una implementación muy buena a la idea del uso de componentes, que son piezas
reutilizables de código (clases) que pueden interactuar con el EID en tiempo de diseño y
desempeñar una función específica en tiempo de ejecución. Desde un enfoque más específico
de la herramienta, se catalogan como componentes todos aquellos objetos que heredan de la
clase TComponent, donde se implementa la funcionalidad necesaria para interactuar con el
entorno de desarrollo, la carga dinámica desde streams y la liberación de memoria mediante una
jerarquía. Una gran parte de los componentes disponibles para Delphi son controles (derivados
de TControl), que encapsulan los elementos de interacción con el usuario como botones, menus,
barras de desplazamiento, etcétera.
Delphi incluye una biblioteca de clases bien diseñada denominada VCL (Visual Component
Library, Biblioteca de Componentes Visuales) y, en sus versiones 6 y 7, una jerarquía
multiplataforma paralela denominada CLX. Ésta también se incluye en Kylix. Estas jerarquías
de objetos incluyen componentes visuales y no visuales, tales como los pertenecientes a la
categoría de acceso a datos, con los que puede establecerse conexiones de forma nativa o
mediante capas intermedias (como ADO, BDE u ODBC) a la mayoría de las bases de datos
relacionales existentes en el mercado. La VCL también está disponible para el desarrollo en
.NET.
Además de poder utilizar en un programa estos componentes estándar (botones, grillas,
conjuntos de datos, etc.), es posible crear nuevos componentes o mejorar los ya existentes,
extendiendo la funcionalidad de la herramienta. En Internet existe un gran número de
componentes, tanto gratuitos como comerciales, disponibles para los proyectos a los que no les
basten los que vienen ya con la herramienta.
Eventos
Delphi permite de manera sencilla ejecutar trozos de código en respuesta a acciones
o eventos (sucesos) que ocurren durante el tiempo que un programa se ejecuta. Por ejemplo,
cuando se presiona un botón, la VCL captura la notificación estándar de windows, y detecta si
hay algún método asociado al evento OnClick del botón. Si lo hay, manda ejecutar dicho
método.
Los eventos pueden generarse debido a la recepción de señales desde elementos de hardware
como el ratón o el teclado, o pueden producirse al realizar alguna operación sobre un elemento
de la propia aplicación (como abrir un conjunto de datos, que genera los
eventos BeforeOpen/AfterOpen). La VCL ha demostrado estar bien diseñada y el control que se
tiene a través de los eventos de la misma es suficiente para la gran mayoría de aplicaciones.
Base de Datos
Una de las principales características y ventajas de Delphi es su capacidad para desarrollar
aplicaciones con conectividad a bases de datos de diferentes fabricantes. El programador de
Delphi cuenta con una gran cantidad de componentes para realizar la conexión, manipulación,
presentación y captura de los datos, algunos de ellos liberados bajo licencias de código abierto o
gratuitos. Estos componentes de acceso a datos pueden enlazarse a una gran variedad de
controles visuales, aprovechando las características del lenguaje orientado a objetos, gracias al
polimorfismo.
En la paleta de componentes pueden encontrarse varias pestañas para realizar una conexión a
bases de datos usando diferentes capas o motores de conexión.
Hay motores que permiten conectarse a bases de datos de diferentes fabricantes tales
como BDE, DBExpress o ADO, que cuentan con manejadores para los formatos más
extendidos.
También hay componentes de conexión directa para un buen número de bases de datos
específicas: Firebird, Interbase, Oracle, etcétera.
A continuación un breve resumen (aún recopilándose) de las capas de conexión disponibles para
las bases de datos más populares:
� Interbase/Firebird: IBX (InterBase eXpress), IBO (IB Objects), MDO (Mercury Data
Objects), *DBExpress, BDE, FibPlus, Zeos
� Oracle: DOA (Direct Oracle Access), NCOci8
� dBase: BDE
� FoxPro: BDE
� Paradox: BDE
� Microsoft SQL Server: BDE, ADO, *DBExpress
� mySQL: Zeos (nativo), *DBExpress, BDE y ADO (usando ODBC)
� Postgres: BDE, ADO
Borland Database Engine (BDE)
Es un motor de conexión a bases de datos de uso bastante amplio y que permite manejar bases
de datos de escritorio como dBase, Foxpro y Paradox, además de ofrecer la capacidad para
conectarse a servidores SQL locales y remotos. Su uso, va siendo cada vez menor, debido a la
pobre gestión de memoria que realiza, sustituyéndolo por componentes más actualizados y
especializados como DOAC (Direct Oracle Access Components) o DBExpress, esto sumado a
la fiabilidad que están presentando los nuevos gestores de Datos en especial tecnologías como
RDO y ADO; los cuales son mantenidos por sus fabricantes, forzando la compatibilidad con las
versiones preliminares; liberando al programador de actualizaciones en cuanto a gestión de
datos. Actualmente ya no es desarrollado por Codegear.
Desarrollo visual
Como entorno visual, la programación en Delphi consiste en diseñar los formularios que
componen al programa colocando todos sus controles (botones, etiquetas, campos de texto, etc.)
en las posiciones deseadas, normalmente usando un ratón. Luego se asocia código a
los eventos de dichos controles y también se pueden crear módulos de datos, que regularmente
contienen los componentes de acceso a datos y las reglas de negocio de una aplicación.
Entorno Integrado de Desarrollo (EID)
O IDE en inglés (Integrated Development Environment), es el ambiente de desarrollo de
programas de Delphi. Se trata de un editor de formularios (que permite el desarrollo visual), un
potente editor de textos que resalta la sintaxis del código fuente, la paleta de componentes y
el depurador integrado, además de una barra de botones y un menú que nos permite la
configuración de la herramienta y la gestión de proyectos. En las
ediciones Client/Server y Enterprise el EID también ofrece integración con una herramienta
de control de versiones(PVCS).
Perl
Perl
Paradigma: multiparadigma
Apareció en: 1987
Diseñado por: Larry Wall
Desarrollador: Rafael Garcia-Suarez y Nicolas Clarck
Última versión: 5.10.0 (10 de diciembre de 2007) 5.8.9 (14 de diciembre de 2008)
Tipo de dato: dinámico
Implementaciones: Perl mod_perl
embperl
Dialectos: Perl 5 Perl 6
Influido por: AWK, BASIC, BASIC-PLUS,C, C++, Lisp, Pascal, sed,Unix shell
Ha influido: Python, PHP, Ruby,ECMAScript
Sistema operativo: muchos (más de 100)
Licencia de software:
GPL, Licencia Artística
Web: www.perl.org
Perl es un lenguaje de programación diseñado por Larry Wall creado en 1987. Perl toma
características del C, del lenguaje interpretado 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.
Descripción
Perl es un lenguaje de propósito general originalmente desarrollado para la manipulación
de texto y que ahora es utilizado para un amplio rango de tareas incluyendo administración de
sistemas, desarrollo web, programación en red, desarrollo de GUI y más.
Se previó que fuera práctico (facilidad de uso, eficiente, completo) en lugar de hermoso
(pequeño, elegante, mínimo). Sus principales características son que es fácil de usar, soporta
tanto la programación estructurada como la programación orientada a objetos y la programación
funcional, tiene incorporado un poderoso sistema de procesamiento de texto y una enorme
colección de módulos disponibles.
Características
La estructura completa de Perl deriva ampliamente del lenguaje C. Perl es un lenguaje
imperativo, con variables, expresiones, asignaciones, bloques de código delimitados
por llaves,estructuras de control y subrutinas.
Perl también toma características de la programación shell. Todas las variables son marcadas
con un signo precedente (sigil). Los sigil identifican inequívocamente los nombres de las
variables, permitiendo a Perl tener una rica sintaxis. Notablemente, los sigil permiten interpolar
variables directamente dentro de las cadenas de caracteres (strings). Como en los shell, Perl
tiene muchas funciones integradas para tareas comunes y para acceder a los recursos del
sistema.
Perl toma las listas del Lisp, hash (memoria asociativa) del AWK y expresiones
regulares del sed. Todo esto simplifica y facilita todas las formas del análisis sintáctico, manejo
de texto y tareas de gestión de datos.
En Perl 5, se añadieron características para soportar estructuras de datos complejas, funciones
de primer orden (p. e. clausuras como valores) y un modelo de programación orientada a
objetos. Éstos incluyen referencias, paquetes y una ejecución de métodos basada en clases y la
introducción de variables de ámbito léxico, que hizo más fácil escribir código robusto (junto
con el pragma strict). Una característica principal introducida en Perl 5 fue la habilidad de
empaquetar código reutilizable como módulos. Larry Wall indicó más adelante que "la
intención del sistema de módulos de Perl 5 era apoyar el crecimiento de la cultura Perl en vez
del núcleo de Perl".2
Todas las versiones de Perl hacen el tipificado automático de datos y la gestión de memoria. El
intérprete conoce el tipo y requerimientos de almacenamiento de cada objeto en el programa;
reserva y libera espacio para ellos según sea necesario. Las conversiones legales de tipo se
hacen de forma automática en tiempo de ejecución; las conversiones ilegales son consideradas
errores fatales.
Diseño
El diseño de Perl puede ser entendido como una respuesta a tres amplias tendencias de la
industria informática: rebaja de los costes en el hardware, aumento de los costes laborales y las
mejoras en la tecnología de compiladores. Anteriormente, muchos lenguajes de ordenador como
el Fortran y C, fueron diseñados para hacer un uso eficiente de un hardware caro. En contraste,
Perl es diseñado para hacer un uso eficiente de los costosos programadores de ordenador.
Perl tiene muchas características que facilitan la tarea del programador a costa de unos
requerimientos de CPU y memoria mayores. Éstas incluyen gestión de memoria
automática; tipo de dato dinámico; strings, listas y hashes; expresiones regulares; introspección
y una función eval().
Larry Wall fue adiestrado como lingüista y el diseño de Perl ha sido muy aleccionado con
principios lingüísticos. Ejemplos incluyen la Codificación Huffman (las construcciones más
comunes deben ser las más cortas), buena distribución (la información importante debe ir
primero) y una larga colección de primitivas del lenguaje. Perl favorece las construcciones del
lenguaje, tan naturales, como para los humanos son la lectura y la escritura, incluso si eso hace
más complicado al intérprete Perl.
La sintaxis de Perl refleja la idea de que "cosas que son diferentes deben parecer diferentes".
Por ejemplo, escalares, arrays y hashes tienen diferente sigil. Índices de array y
claves hashusan diferentes clases de paréntesis. Strings y expresiones regulares tienen
diferentes delimitadores estándar. Esta aproximación puede contrastarse con lenguajes
como Lisp, donde la misma construcción S-expresión y sintaxis básica se usa para muchos y
variados propósitos.
Perl tiene características que soportan una variedad de paradigmas de programación, como
la imperativa, funcional y la orientada a objetos. Al mismo tiempo, Perl no obliga a seguir
ningún paradigma en particular, ni obliga al programador a elegir alguna de ellas.
Hay un amplio sentido de lo práctico, tanto en el lenguaje Perl como en la comunidad y la
cultura que lo rodean. El prefacio de Programming Perl comienza con, "Perl es un lenguaje
para tener tu trabajo terminado". Una consecuencia de esto es que Perl no es un lenguaje
ordenado. Incluye características si la gente las usa, tolera excepciones a las reglas y emplea
laheurística para resolver ambigüedades sintácticas. Debido a la naturaleza indulgente del
compilador, a veces los errores pueden ser difíciles de encontrar. Hablando del variado
comportamiento de las funciones internas en los contextos de lista y escalar, la página de
manual de perlfunc(1) dice "En general, hacen lo que tu quieras, siempre que quieras la
coherencia."
Perl tiene varios lemas que transmiten aspectos de su diseño y uso. Uno es There's more than
one way to do it (Hay más de una forma de hacerlo) (TMTOWTDI, usualmente pronunciado
'Tim Toady'). Otros son "Perl: la motosierra del ejército Suizo de los lenguajes de
programación" y "Límites imprecisos". Una meta prefijada de Perl es hacer las cosas fáciles de
forma fácil y las tareas difíciles, posibles. A Perl también se le ha llamado "El esparadrapo de
Internet".
Aplicaciones
Perl tiene muchas y variadas aplicaciones, gracias a la disponibilidad de muchos módulos
estándares y de terceras partes.
Se ha usado desde los primeros días del Web para escribir guiones (scripts) CGI. Es una de las
"tres Pes" (Perl, Python y PHP), que son los lenguajes más populares para la creación de
aplicaciones Web, y es un componente integral de la popular solución LAMP para el desarrollo
web. Grandes proyectos escritos en Perl son Slash, IMDb[2] y UseModWiki, un motor deWiki.
Muchos sitios web con alto tráfico, como Amazon.com y Ticketmaster.com usan Perl
extensamente.
Perl se usa a menudo como un "lenguaje pegamento", ligando sistemas e interfaces que no
fueron diseñados específicamente para interoperar; y para el "escarbado de datos", convirtiendo
o procesando grandes cantidades de datos para tareas como por ejemplo crear informes. De
hecho, estas fortalezas están íntimamente unidas. Su combinación hace a Perl una popular
herramienta de propósito general para los administradores de sistemas, especialmente en
programas pequeños que pueden ser escritos y ejecutados en una sola línea de comandos.
Perl es también ampliamente usado en finanzas y bioinformática, donde es apreciado por
su desarrollo rápido, tanto de aplicaciones como de despliegue, así como la habilidad de
manejar grandes volúmenes de datos.
Implementación
Perl está implementado como un intérprete, escrito en C, junto con una gran colección de
módulos, escritos en Perl y C. La distribución fuente tiene, en 2005, 12 MB cuando se
empaqueta y comprime en un fichero tar. El intérprete tiene 150.000 líneas de código C y
se compila en un ejecutable de 1 MB en las arquitecturas de hardware más típicas. De forma
alternativa, el intérprete puede ser compilado como una biblioteca y ser embebida en otros
programas. Hay cerca de 500 módulos en la distribución, sumando 200.000 líneas de Perl y
unas 350.000 líneas adicionales de código C. Mucho del código C en los módulos consiste en
tablas de codificación de caracteres.
El intérprete tiene una arquitectura orientada a objetos. Todos los elementos del lenguaje Perl
—escalares, listas, hashes, referencias a código, manejadores de archivo— están representados
en el intérprete como estructuras C. Las operaciones sobre estas estructuras están definidas
como una numerosa colección de macros, typedef y funciones; esto constituye la API C de Perl.
La API Perl puede ser desconcertante para el no iniciado, pero sus puntos de entrada siguen un
esquema de nombres coherente, que ayuda a los que quieran utilizarla.
La ejecución de un programa Perl se puede dividir, generosamente, en dos fases: tiempo de
compilación y tiempo de ejecución.3 En tiempo de compilación el intérprete parsea el texto del
programa en un árbol sintáctico. En tiempo de ejecución, ejecuta el programa siguiendo el
árbol. El texto es parseado sólo una vez y el árbol sintáctico es optimizado antes de ser
ejecutado, para que la fase de ejecución sea relativamente eficiente. Las optimizaciones del
árbol sintáctico en tiempo de compilación incluyen simplificación de expresiones constantes,
propagación del contexto y optimización en trozos sueltos de código. Sin embargo, las fases de
compilación y ejecución pueden anidarse: un bloque BEGIN se ejecuta en tiempo de
compilación, mientras que una función eval inicia una compilación durante una ejecución.
Ambas operaciones están implícitas en otras -de forma notable, la cláusula use que carga
bibliotecas, conocidas en Perl como módulos, implica un bloque BEGIN.
Perl es un lenguaje dinámico y tiene una gramática sensible al contexto que puede quedar
afectada por el código ejecutado durante una fase de ejecución intermedia (Ver ejemplos. ). Por
eso Perl no puede ser parseado mediante una aplicación directa de analizadores
léxicos/parseador Lex/Yacc. En cambio, el intérprete implementa su propio analizador léxico,
que coordinado con un parseador modificado GNU bison resuelve las ambigüedades del
lenguaje. Se ha dicho que "sólo perl puede parsear Perl", queriendo decir que sólo el intérprete
Perl(perl) puede parsear el lenguaje Perl (Perl). La razón de esto se atestigua por las
persistentes imperfecciones de otros programas que emprenden la tarea de parsear Perl, como
los analizadores de código y los auto-indentadores, que tienen que vérselas no sólo con las
muchas formas de expresar inequívocamente construcciones sintácticas, sino también con el
hecho de que también Perl no puede, en general, ser parseado sin antes ser ejecutado.
El mantenimiento del intérprete Perl, a lo largo de los años, se ha vuelto cada vez más difícil. El
núcleo ha estado en continuo desarrollo desde 1994. El código ha sido optimizado
enrendimiento a expensas de la simplicidad, claridad y unas interfaces internas más fuertes.
Nuevas características han sido añadidas, manteniendo todavía, compatibilidad virtualmente
completa hacia atrás con las primeras versiones. El tamaño y la complejidad del intérprete son
una barrera para los desarrolladores que desean trabajar en él.
Perl es distribuido con unos 120.000 test funcionales. Éstos se ejecutan como parte del proceso
normal de construcción y comprueban extensamente al intérprete y a sus módulos principales.
Los desarrolladores Perl confían en los test funcionales para asegurarse que los cambios en el
intérprete no introducen errores; recíprocamente, los usuarios Perl que vean al intérprete pasar
los test funcionales en su sistema pueden tener un alto grado de confianza de que está
funcionando adecuadamente.
No hay una especificación o estándar escrito para el lenguaje Perl y no hay planes de crear uno
para la versión actual de Perl. Siempre ha existido sólo una implementación del intérprete. Este
intérprete, junto con los test funcionales, forman la especificación de facto del lenguaje.
Disponibilidad
Perl es software libre y está licenciado bajo la Licencia Artística y la GNU General Public
License. Existen distribuciones disponibles para la mayoría de sistemas operativos. Está
especialmente extendido en Unix y en sistemas similares, pero ha sido portado a las plataformas
más modernas (y otras más obsoletas). Con sólo seis excepciones confirmadas, puede ser
compilado desde el código fuente en todos los Unix, compatibles POSIX o cualquier otra
plataforma Unix compatible. Sin embargo, esto no es normalmente necesario, porque Perl está
incluido por defecto en la instalación de los sistemas operativos más populares.4
Debido a los cambios especiales necesarios para soportar al Mac OS Classic, existe una
adaptación especial llamada MacPerl.
GNU/Linux
Perl está instalado por defecto en las distribuciones más populares
de GNU/Linux incluyendo Gentoo, Mandriva, Debian, RedHat y SUSE.
Windows
Los usuarios de Microsoft Windows normalmente instalan una distribución binaria de
Perl.6 Compilar Perl desde el fuente bajo Windows es posible, pero la mayoría de las
instalaciones no disponen del necesario compilador de C.
La capa de emulación Cygwin proporciona otra forma de correr Perl bajo Windows. Cygwin
proporciona en entorno parecido al Unix en Windows que incluye gcc, por lo que compilar Perl
desde el código es una opción accesible para los usuarios que prefieren esta opción.
En Junio de 2006, win32.perl.org fue lanzado por Adam Kennedy en nombre de la Fundación
Perl. Es una comunidad web "para todo lo relacionado con Windows y Perl"