14 de febrer 2007

Comparativa de Llenguatges de Programació

Avui estava mirant tutorials d'xml [ja intentaré fer un post] i clar, recomanen agafar un programa que et miri si la sintaxi és o no correcte. I he trobat aquesta web. On fan la comparació de 6 programes que fan exactament el mateix (comprovar que la sintaxi d'un document és correcte, i.e. llegir tot el document d'entrada i mirar que no tingui errors sintàctics).

Dos d'aquests llenguatges estant escrits en C, dos més en Java, un en Perl i finalment un altre en Python.

A mode d'introducció, els programes escrits en C es compilen i es genera un arxiu binari capaç de ser executat directament pel Sistema Operatiu i arquitectura(~ordinador) sobre el que s'ha compilat. Un programa escrit en JAVA també es compila, però el resultat és un arxiu capaç de ser executat per la famosa màquina virtual de Java, la qual està disponible per diferents Sistemes Operatius (d'aquí la portabilitat del Java). I finalment, el Perl i el Python (al igual que el PHP i el Pike) són llenguatges de programació que no es compilen i que tenen un intèrpret, que comprova que la sintaxi sigui correcte i tradueix cada linia de codi a les corresponents biblioteques de Perl o de Python (segons correspongui).

Aquí els temps de cada programa per processar les mateixes dades:

Figura1: processant un arxiu normal


Figura2: processant un arxiu gran

Figura3: Processasnt diferents arxius:
Com veieu, en tots els casos, els dos programes escrits en C van molt més ràpids que la resta. També podem veure que els programes en escrits en Perl o Python van més ràpids que els escrits en JAVA, però tant sols quan els arxius d'entrada són petits, quan els arxius d'entrada són més grans la cosa es capgira i els programes escrits en JAVA van més ràpid que els escrits en Python o en Perl.

Òbviament, aquí podem tenir altres factors a tenir en compte, doncs com que aquests programes han estat desenvolupats per gent diferent, però dah! es tracta de comprovar la sintaxi d'un text, un programa la mar de senzill.