domingo, 16 de agosto de 2009

Lenguajes de programación en Linux

Si por algo se ha caracterizado siempre los entornos UNIX es por su diseño orientado a la programación. Mientras otros sistemas operativos como Windows o Mac OS están orientados a la ejecución de programas, todos los sabores de UNIX permiten acceder a los compiladores, las librerías, el control de procesos con gran naturalidad.

Cuando queremos programar en Windows o Mac OS necesitamos lo que se llama un IDE (Integrated Development Environment). Son herramientas tan populares como el Microsoft Visual Studio (con soporte para la mayoría de los lenguajes de programación), los entornos de Borland, el X Code en Mac OS. Cuando nos preguntamos por los IDEs en Linux nos viene a la cabeza un gran vacío.

Los hay, sin duda. Son poco conocidos. Kdevelop, Anjuta, Eclipse. Y son poco conocidos porque un sistema operativo tipo UNIX es en sí un entorno de programación.

A continuación, describiremos los lenguajes más populares en la plataforma Linux y las herramientas disponibles para cada uno de ellos.


C / C++

¿Cuál es el lenguaje más popular en Linux? Probablemente sea C. UNIX se basa en ese lenguaje. El mismo núcleo Linux está escrito enteramente en C, así como la mayoría de las aplicaciones. También cabe destacar C++, que ha sido siempre considerado como una extensión natural de C. La mayoría de las aplicaciones modernas, se escribe en C++. Este es un lenguaje orientado a objeto y es la base de la bibliotecas gráficas estándar (QT, GTK).

Podemos decir que C++ es un lenguaje fuertemente tipado y que debe compilarse a un binario nativo, lo cual no favorece su portabilidad. Además, al quedar todo estáticamente enlazado, no nos permite hacer uso de algunas técnicas modernas como reflection.

Al tener tanto tiempo de vida, este lenguaje esta muy difundido y existen toneladas de libros, tutoriales e información en el mundo como para sentirnos satisfechos.

Algo importante para destacar es que, en cualquier distribución de Linux, siempre están disponibles el compilador C. Si por una cosa se caracteriza el sistema GNU es por estar, en la mayoría de los casos, compilado con la colección de compiladores gcc. Gcc, the GNU Compiler Collection. Como su nombre indica, gcc es la colección de compiladores libre y gratuita del sistema GNU.

Uno de los motivos por los que Linux es software libre hoy en día fue porque Linus decidió usar el compilador de C del GCC (por aquel entonces el único lenguaje soportado) para crear los ejecutables de su kernel.

Hoy en día es el compilador de referencia en cualquier sistema operativo. No es de ningún modo el mejor compilador. No es el más rápido ni el que mejor optimiza, pero te asegura una máxima portabilidad entre plataformas y sistemas operativos, algo muy importante a tener en cuenta.

Además todas las distribuciones traen herramientas básicas que nos facilitan el desarrollo (makefile, editores, etc.)

Si optamos por programar en C/C++, obtendremos otra pequeña ventaja: si consideramos que las bibliotecas más “pesadas” parten de código C/C++, no necesitamos intermediarios para usarlas, sino que se integran directamente.

Uno de los entornos más completos es Kdevelop (www.kdevelop.org). Este proyecto, que suele venir con la mayoría de las distribuciones, es un entorno que reúne todas las necesidades del desarrollador.

El Proyecto KDevelop surgió en 1998 con el fin de desarrollar un IDE (Entorno de desarrollo integrado) fácil de usar para KDE. Desde entonces, el IDE KDevelop está públicamente disponible bajo la GPL y soporta muchos lenguajes de programación.

El mismo nombre alude a su perfil: KDevelop - KDE Development Environment (Entorno de Desarrollo para KDE).

KDevelop 3.0 ha sido reconstruido completamente desde los cimientos, se dio a conocer junto con KDE 3.2 en diciembre de 2003.

A diferencia de muchas otras interfaces de desarrollo, KDevelop no cuenta con un compilador propio, por lo que depende de gcc para producir código binario.

Su última versión se encuentra actualmente bajo desarrollo y funciona con distintos lenguajes de programación como C, C++, Java, Ada, SQL, Python, Perl y Pascal, así como guiones para el intérprete de comandos Bash.

Para GNOME existe un proyecto similar, Anjuta. Anjuta (actualmente Anjuta DevStudio) es un entorno integrado de desarrollo (IDE) para programar en los lenguajes C, C++, Java y Python, en sistemas GNU/Linux. Su principal objetivo es trabajar con GTK y en el escritorio GNOME, además ofrece un gran número de características avanzadas de programación. Anjuta es software libre, liberado bajo la licencia GPL.

Incluye un administrador de proyectos, asistentes, plantillas, depurador interactivo y un poderoso editor que verifica y resalta la sintaxis escrita.

Java.

Uno de los lenguajes más populares del momento es sin duda, java. Es portable por lo que no es de sorprender que se encuentre en Linux.

Java debe su fortaleza a que es un lenguaje interpretado y compilado. Compilado por que se compila a bytecode que es solo entendible por la maquina virtual (que no es igual al binario entendido por el procesador) Luego la maquina virtual interpreta el bytecode y transforma a código entendible para la maquina. De hay que java sea multiplataforma. El bytecode necesita la maquina virtual para se ejecutado, de esta forma el bytecode es independiente del sistema operativo. La maquina virtual si es dependiente del sistema operativo pero existe al menos una para sistema operativo.

Con esta arquitectura, Java nos provee nos provee una buena solución para aplicaciones que tengan GUI y corran en cualquier sistema operativo sin modificaciones. Si bien existe framework para desarrollar estas aplicaciones es necesario conocer a fondo estas bibliotecas (swing, AWT, SWT...). Por lo tanto estas aplicaciones no son del todo simples.

Otro punto fuerte de java son las aplicaciones son las aplicaciones Web. En este caso nos plantea una vuelta distinta a todas las otras alternativas en la programación web, ya que permite nuestros objetos vivos mientras el servidos este levantando. Además cuenta con un sin fin de herramientas y frameworks (JSF, struts, wicket, tapestry, GWT, etc) que nos abstraen de los inconvenientes de dichas aplicaciones.

El lenguaje de programación java es totalmente orientado a objetos y nos fuerza a trabajar de esta forma. La cantidad de herramientas que existen para él es muy grande y variada.

Es imprescindible para trabajar en java tener fuertes conocimientos del paradigma orientado a objeto.

La IDE que cobro con más fuerza con el correr de los años es Eclipse. Eclipse es un entorno de desarrollo integrado de código abierto multiplataforma para desarrollar lo que el proyecto llama "Aplicaciones de Cliente Enriquecido", opuesto a las aplicaciones "Cliente-liviano" basadas en navegadores. Esta plataforma, típicamente ha sido usada para desarrollar entornos de desarrollo integrados (del inglés IDE), como el IDE de Java llamado Java Development Toolkit (JDT) y el compilador (ECJ) que se entrega como parte de Eclipse (y que son usados también para desarrollar el mismo Eclipse). Sin embargo, también se puede usar para otros tipos de aplicaciones cliente, como BitTorrent Azureus.

Eclipse es también una comunidad de usuarios, extendiendo constantemente las áreas de aplicación cubiertas. Un ejemplo es el recientemente creado Eclipse Modeling Project, cubriendo casi todas las áreas de Model Driven Engineering.

Eclipse fue desarrollado originalmente por IBM como el sucesor de su familia de herramientas para VisualAge. Eclipse es ahora desarrollado por la Fundación Eclipse, una organización independiente sin ánimo de lucro que fomenta una comunidad de código abierto y un conjunto de productos complementarios, capacidades y servicios.

Eclipse hoy es un entorno de desarrollo multilenguje, basado en plugins, se puede desarrollar en los lenguajes más populares PHP, C/C++, Ruby, etc.

Netbeans es la IDE oficial de java, proveeida por sun, netbeans a crecido enormemente estos últimos años.

Netbeans es un proyecto de código abierto de gran éxito con una gran base de usuarios, una comunidad en constante crecimiento, y con cerca de 100 socios en todo el mundo. Sun MicroSystems fundó el proyecto de código abierto Netbeans en junio 2000 y continúa siendo el patrocinador principal de los proyectos.

Un proyecto de código abierto no es nada más ni nada menos que un proceso. Toma tiempo encontrar el equilibrio. El primer año, fue crucial como inicio. Los dos años siguientes, se orientó hacia código abierto. Como muestra de lo abierto que era, en los primeros dos años había más debate que implementación.

Con Netbeans 3.5 se mejoró enormemente en desempeño, y con la llegada de Netbeans 3.6, se reimplementó el sistema de ventanas y la hoja de propiedades, y se limpió enormemente la interfaz. Netbeans 4.0 fue un gran cambio en cuanto a la forma de funcionar del IDE, con nuevos sistemas de proyectos, con el cambio no solo de la experiencia de usuario, sino del reemplazo de muchas piezas de la infraestructura que había tenido Netbeans anteriormente. Netbeans IDE 5.0 introdujo un soporte mucho mejor para el desarrollo de nuevos módulos, el nuevo constructor intuitivo de interfaces Matisse, un nuevo y rediseñado soporte de CVS, soporte a Sun ApplicationServer 8.2, Weblogic9 y JBoss 4.

En Netbeans 6 se puede programar en C++, PHP, y Ruby. Netbeans esta en constante crecimiento.

PHP

Este lenguaje nació como una mejora para la programación web estática de hace unos años. En un principio, su idea fue meter código dentro de paginas html para hacerlas más dinámicas.

Desde entonces el lenguaje evoluciono enormemente. Hoy en día es un lenguaje muy completo que permite programar en forma estructurada o orientada a objetos.

PHP se distribuye con licencia Open Source, tuvo un espacio muy grande dentro del mundo linux. Allí es donde cobro mucha fuerza ya que se acopla muy bien con el servidor web de apache. La combinación LAMP (Linux + Apache + MySql + PHP) es un paquete comúnmente muy pedido en el mercado actual.

PHP es un lenguaje de programación interpretado, diseñado originalmente para la creación de páginas web dinámicas. Es usado principalmente en 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+.

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.

PHP es un lenguaje interpretado de propósito general ampliamente usado y que está diseñado especialmente para desarrollo web y puede ser embebido dentro de código HTML. Generalmente se ejecuta en un servidor web, tomando el código en PHP como su entrada y creando páginas web como salida. Puede ser desplegado en la mayoría de los servidores web y en casi todos los sistemas operativos y plataformas sin costo alguno. PHP se encuentra instalado en más de 20 millones de sitios web y en un millón de servidores, aunque el número de sitios en PHP ha compartido algo de su preponderante sitio con otros nuevos lenguajes no tan poderosos desde agosto de 2005. Es también el módulo Apache más popular entre las computadoras que utilizan Apache como servidor web.

Son muchos los desarrolladores que trabajan con Zend Studio, es posiblemente uno de los mejores IDE del momento. Se trata de un programa de la casa Zend, uno de los mayores impulsores de PHP, orientada a desarrollar aplicaciones web, como no, en PHP. Zend Studio es un editor de texto para páginas PHP que proporciona un buen número de ayudas desde la creación y gestión de proyectos hasta la depuración del código. Uno de los puntos en contra de este entorno es el hecho de no ser libre y no poder contar con el código fuente.

Open Komodo Project:Es un proyecto bastante singular porque se basa en la creación de aplicaciones Web que corran bajo Firefox, además de estar construidas con el Komodo IDE.

Así, la compañía creadora del proyecto se asegura estar presente en la lucha contra la Web cerrada, al igual que otros, como es el caso del conocido Mozilla.

El Open Komodo Project responde a las exigencias de las herramientas para el desarrollo de la tecnología de web libre, promoviendo la innovación en web y la libertad de elección para los desarrolladores y usuarios finales.

Con la creación del Open Komodo Project, ActiveState se une a otros defensores como Mozilla en la promoción de la web abierta. La filosofía de web abierta pretende mantener la integridad de la web como un espacio público neutral en cuanto a plataforma, idioma y navegador.

Quanta Plus (Quanta+) es una herramienta libre de desarrollo de páginas web diseñado para el proyecto KDE. Su versión actual es la 3.5. Forma parte del paquete kdewebdev.

PEAR, el repositorio oficial de PHP. aquí hay muchos add-ons para PHP que pueden ser instalados convenientemente desde la utilidad que viene junto con el paquete de PHP. Esta utilidad es de lines de comandos, muy similar a apt-get para instalar paquetes en debian. Por lo tanto, PEAR tiene gran ventaja de que instalar paquetes extras en una tarea muy simple y no propensa a errores.

Mono

Mono es la respuesta del mundo Open Source a la plataforma .Net de Microsoft. La documentación del proyecto mono está empezando a aparecer en muchas partes de la web. Mono permite desarrollar en el lenguaje C# para la plataforma Windows y Linux, con un valor agregado; es Libre.

Mono es el nombre de un proyecto de código abierto iniciado por Ximian y actualmente impulsado por Novell (tras la adquisición de Ximian) para crear un grupo de herramientas libres, basadas en GNU/Linux y compatibles con .NET según lo especificado por el ECMA.

Mono posee importantes componentes útiles para desarrollar software:

  • Una máquina virtual de lenguaje común de infraestructura (CLI) que contiene un cargador de clases, un compilador en tiempo de ejecución (JIT), y unas rutinas de recolección de memoria.

  • Una biblioteca de clases que puede funcionar en cualquier lenguaje que funcione en el CLR (Common Language Runtime).

  • Un compilador para el lenguaje C#, MonoBasic (la versión para mono de Visual Basic), Java y Python.

  • El CLR y el Sistema de tipos común (CTS) permite que la aplicación y las bibliotecas sean escritas en una amplia variedad de lenguajes diferentes que compilen para byte code

  • Esto significa que si, por ejemplo, se define una clase que realice una manipulación algebraica en C#, ésta pueda ser reutilizada en cualquier lenguaje compatible con CLI. Puede crear una clase en C#, una subclase en C++ e instanciar esa clase en un programa en Eiffel.

  • Un sistema de objetos único, sistema de hilos, bibliotecas de clases y sistema recolector de memoria pueden ser compartidos por todos estos lenguajes.

  • Es un proyecto independiente de la plataforma. Actualmente Mono funciona en GNU/Linux, FreeBSD, UNIX, Mac OS X, Solaris y plataformas Windows.

MonoDevelop es un entorno de desarrollo integrado libre y gratuito, diseñado primordialmente para C# y otros lenguajes .NET como Nemerle, Boo, y Java (via IKVM.NET). MonoDevelop originalmente fue una adaptación de SharpDevelop para Gtk#, pero desde entonces se ha desarrollado para las necesidades de los desarrolladores de Mono. El IDE incluye manejo de clases, ayuda incorporada, completación de código, Stetic (diseñador de GUI), soporte para proyectos, y un depurador integrado.

Aunque MonoDevelop solo puede ejecutarse en Mac y distintas distribuciones de Linux.

Perl

Este lenguaje es el bueno, el feo y el malo, todo a la vez. Digamos que Perl nos permite hacer muchas cosas de muchas formas distintas, por lo que se gana todos los títulos.

Surgió como una herramienta para procesar texto y generar reportes, pero esto fue hace demasiado tiempo. Hoy en día, es un completo lenguaje de programación, que soporta características de un lenguaje estructurado, orientado objeto y algunas características de la programación funcional.

Perl se utiliza mucho crear scripts administrativos de servidor. Dado que posee muchas facilidades pare procesar texto (las expresiones regulares están completamente integradas dentro del mismo lenguaje) es muy apto para manejar configuraciones dentro del servidor. Además se integra muy bien con los comandos, de modo que es posible combinarlo con aplicaciones externas de forma muy simple.

En cuanto a los entornos para programar, no existe alguno en particular que se destaque, dado que, en general, se utiliza dentro de un servidor. La mayoría de las personas termina utilizando Emacs o vi, que son entornos muy completos y potentes, aunque poco visuales e intuitivos. Ambos, si bien son muy diferentes, resultan muy prácticos una vez que se han aprendido a dominarlos pero la curva de aprendizaje es grande al principio).

Ruby

Un lenguaje de programación dinámico y de código abierto enfocado en la simplicidad y productividad. Su elegante sintaxis se siente natural al leerla y fácil al escribirla.

Ruby es un lenguaje de programación interpretado, reflexivo y orientado a objetos, creado por el programador japonés Yukihiro "Matz" Matsumoto, quien comenzó a trabajar en Ruby en 1993, y lo presentó públicamente en 1995. Combina una sintaxis inspirada en Python, 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.

Rails es un framework hecho en ruby que ha cambiado la forma de hacer webs dinámicas. Este framework impulso a ruby y expendio su uso, nos permite hacer web dinámicas rápidamente basado en conceptos como andamiaje, convención antes que configuración, etc.

RadRails es un editor basado en eclipse muy completo que soporta muchas tareas de Ruby on Rails que normalmente se las haría por consola.

Vim+Cream es la conminación del editor Vim con la interfase gráfica provista por Cream. Esta conminación sumada con algunos plugins para el Vim con soporte para Ruby on Rails, dan como resultado un potente editor para RoR.

Jedit es un editor hecho en Java que con algunos plugins con soporte para Ruby lo hacen un editor bien práctico para programar en RoR.

Python

Python es apto para cualquier programa de propósito general, desde una aplicación web, hasta programas gráficos nativos, scriping o desarrollo de juegos.

Python es considerado como la "oposición leal" a Perl, lenguaje con el cual mantiene una rivalidad amistosa. Los usuarios de Python consideran a éste mucho más limpio y elegante para programar.

Python permite dividir el programa en módulos reutilizables desde otros programas Python. Viene con una gran colección de módulos estándar que se pueden utilizar como base de los programas (o como ejemplos para empezar a aprender Python). También hay módulos incluidos que proporcionan E/S de ficheros, llamadas al sistema, sockets y hasta interfaces a GUI (interfaz gráfica con el usuario) como Tk, GTK, Qt entre otros...

Python es un lenguaje de programación interpretado, lo que ahorra un tiempo considerable en el desarrollo del programa, pues no es necesario compilar ni enlazar. El intérprete se puede utilizar de modo interactivo, lo que facilita experimentar con características del lenguaje, escribir programas desechables o probar funciones durante el desarrollo del programa. También es una calculadora muy útil.

El principal objetivo que persigue este lenguaje es la facilidad, tanto de lectura, como de diseño.

En cuanto a Ides no hay ninguna que se destaque, muchos optan por usar Emacs o vi por los mismos motivos descriptos en Perl. Se puede utilizar eclipse con un plugin llamado PyDev que provee debugger, refactoring, análisis de sintaxis.

Eric podría ser otra solución, es una ide con interfaz sobre cargada, que nos brinda todas las ventajas de una ide moderna.