Una comparación de lenguajes de programación usados en bioinformática

bannerinfo1

Los análisis bioinformáticos involucran una amplia gama de de tareas y procesos. Se han escrito diversos programas para varias aplicaciones bioinformáticas usando cada lenguaje disponible. A causa del tamaño de los conjuntos de datos en bioinformática, el tiempo computacional no es trivial y es deseable la eficiencia en la velocidad computacional. Se han publicado comparaciones de la precisión del algoritmo de diferentes programas que se encargan de tareas similares [1-7], permitiendo la evaluación de los mejores algoritmos para usar en tareas específicas. Sin embargo, es posible que el mismo programa, escrito en diferentes lenguajes, o ejecutándose bajo diferentes sistemas operativos, pueda exhibir diferencias significativas en velocidad y eficiencia. Hay, en este momento, pocos datos directos sobre la velocidad y la eficiencia subyacente de algoritmos equivalentes escritos en diferentes lenguajes. Mientras que los lenguajes mismos han sido comparados, tales comparaciones no se han realizado usando algoritmos que son relevantes para la bioinformática [8].
Un típico programa de bioinformática lee archivos FASTA, mantiene las secuencias de ADN en memoria, realiza diferentes tareas computacionales sobre las secuencias y finalmente escribe el resultado en otro archivo. Otra tarea común en bioinformática es la minería de textos o parseo de textos. Pueden generarse grandes cantidades de datos en diferentes formatos. Como los formatos de archivo pueden ser diferentes, unir los programas en un solo trámite es difícil, por lo tanto se escriben scripts para que actúen como interfaces entre los programas realiando las partes secuenciales del análisis. Los scripts son también usados para extraer información de grandes archivos de datos, mejorando así la presentación de los resultados. Estos scripts rápidos son usualmente implementados en Perl o Python. Por consiguiente, cualquier procedimiento bioinformático tiene un cierto número de áreas donde la programación puede ser mejorada, estas son: el espacio requerido temporalmente para almacenar datos, la velocidad de computado, la vinculación entre programas y la presentación de análisis.
En este artículo examinamos tres tareas usadas comúnmente en biología, el algoritmo Sellers [9], el algoritmo Neighbor-Joining NJ [10] y un programa de parseo de las salidas de BLAST [11]. En cada caso probamos los programas usando diferentes lenguajes. Esta comparativa (benchmark) fue realizada en Linux y Windows, ya que las computadoras utilizadas tenían un doble booteo. Hay varias razones para realizar este ejercicio de comparativa. Específicamente queremos determinar si C puede ser más rápido que Java para realizar detección de recombinación, que es un ejercicio computacional inherentemente difícil.
También queremos examinar los requerimientos de memoria de cada combinación de programa y lenguaje, ya que si bien la capacidad de la memoria se incrementa constantemente y el hardware se vuelve más barato, los grandes conjuntos de datos en el análisis bioinformático pueden ser un problema para las computadoras de escritorio. También queremos comparar un lenguaje de script, como Perl, con lenguajes compilados como Java y C. Para completar la comparación también se incluyeron lenguajes “rivales”. Esto incluye a C++, C# y Python. Los lenguajes seleccionados para este estudio fueron elegidos sobre la base de que estos eran los más populares y frecuentemente usados para aplicaciones biológicas.
Perl y Python son a menudo llamados lenguajes de script y cuando son ejecutados, son compilados en una presentación intermedia sin crear un archivo intermedio (árbol de sintaxis en Perl y código de byte en Python) y luego interpretados. Ambos lenguajes usan un sistema de gestión automática de la memoria y tienen grandes bibliotecas libres. Son apropiados para web scripting (por ejemplo, CGI), análisis e implementación de trámites como Inter-ProScan [12].
C y C++ son lenguajes completamente compilados, adecuados para tareas intensivas de sistema.
Java y C# son lenguajes semi compilados que usan un sistema de gestión automática de memoria. Un programa Java es compilado en un código de nivel intermedio o código de byte (bytecode) que luego es ejecutado por un interprete o por un compilador en tiempo de ejecución, en este caso, la Máquina Virtual Java (JVM). En C# el código de nivel intermedio se llama Microsoft Intermediate Language ye es ejecutado en el entorno .NET Common Language Runtime.
Proyectos voluntarios han producido bibliotecas o módulos para biólogos. Las proyectos de código abierto más comunes, los cuales están incorporados en la Fundación Open Bioinformatics, son BioPerl, BioPython y BioJava [13].

Para leer la publicación obtenga el documento en su versión completa en formato PDF

Por Mathieu Fourment y Michael R Gillings. Traducido por Germán González

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: