Lenguajes y herramientas asociadas en Software libre

De wiki EOI de documentación docente
Revisión del 00:48 28 feb 2012 de Jesús G Barahona (Discusión | contribuciones) (Página creada con «{{Sección |Título=Lenguajes y herramientas asociadas |Libro=Software libre |Capítulo=Entornos y tecnologías de desarrollo |Número sección=2 |Introducción=La mayoría...»)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar


Estado de desarrollo de la sección: esbozo esbozo

Wikilibro: Software libre > Capítulo 7: Entornos y tecnologías de desarrollo

Sección 2

Lenguajes y herramientas asociadas
La mayoría del software libre está realizado en lenguaje C, no sólo porque C es el lenguaje natural de toda variante de Unix (plataforma habitual del software libre) sino también su amplia difusión, tanto en las mentes como en las máquinas (gcc es un compilador estándar instalado por defecto en casi todas las distribuciones). Precisamente por estas razones y por su eficiencia lo recomienda Stallman en los proyectos de GNU[gnustyle]. Otros lenguajes que se le acercan bastante son C++, también soportado por gcc por defecto, y Java, con cierta semejanza y popular por permitir desarrollar para máquinas virtuales disponibles en gran variedad de plataformas. Generalmente no se tienen en cuenta razones de ingeniería software: en SourceForge (ver “SourceForge”), en el año 2004, por cada 160 proyectos en C había uno en Ada, lenguaje supuestamente más apropiado para desarrollar programas de calidad. Del mismo modo el inglés es la lingua franca entre los desarrolladores de software libre, a pesar de que el esperanto es un idioma mucho más fácil de aprender y con una estructura más lógica. También son populares lenguajes interpretados diseñados para prototipado rápido de aplicaciones normales y servicios Web, como Perl, Python y PHP.

Así como C es el lenguaje estándar, make es la herramienta estándar de construcción de programas, dados sus fuentes. El programador libre usará normalmente la versión de GNU[gmake] mucho más que la incompatible de BSD[pmake]. Con ellas puede especificar árboles de dependencias entre ficheros y reglas para generar los ficheros dependientes a partir de aquellos de los que dependen. Así, se puede especificar que un fichero objeto x.o depende de los ficheros fuente x.c y x.h y que para construirlo hay que ejecutar gcc -c x.c. O que el ejecutable de nuestro programa depende de una colección de objetos y se monta de una determinada manera. Cuando se modifica un fuente y luego se ejecuta make, se recompilarán solamente los módulos afectados y se volverá a montar el objeto final. Es una herramienta de muy bajo nivel, ya que, por ejemplo, es incapaz de averiguar por sí mismo cuando se debe recompilar un módulo en C, a pesar de que podría averiguarlo examinando las cadenas de includes. También es muy potente, porque puede combinar todas las herramientas disponibles de transformación de ficheros para construir objetivos muy complejos de un proyecto multilenguaje. Pero es muy complicado y muy dependiente de entornos tipo Unix. Otras alternativas supuestamente mejores, como jam[jam], aap[aap] o ant [ant] son poco usadas (esta última está ganado popularidad, sobretodo en el mundo Java).

Dada la heterogeneidad de sistemas existentes incluso en el mundo Unix, también se usan herramientas dedicadas a ayudarnos a que nuestros programas sean portátiles. Las herramientas de GNU autoconf [autoconf], automake [automake] y libtool [libtool] facilitan estas tareas en entornos C y Unix. Dada la heterogeneidad de idiomas, juegos de caracteres y entornos culturales, el programador de C (y de muchos otros lenguajes), recurre a gettext [gettext] y a las facilidades de internacionalización de la biblioteca estándar de C [glibc] para realizar programas que se pueden localizar para un entorno cultural fácilmente y en tiempo de ejecución.

Así, cuando recibimos un paquete fuente, lo más probable es que esté escrito en C, empaquetado con tar, comprimido con gzip, hecho portátil con autoconf y herramientas asociadas, y construible e instalable con make.

< Sección anterior
Caracterización de entornos, herramientas y sistemas

Sección siguiente >
Entornos integrados de desarrollo