lunes, 1 de junio de 2009

Portabilidad

La portabilidad en lenguaje C se refiere a la posibilidad de transportar programas de uno a otro ordenador y ponerlos en funcionamiento con sòlo volver a compilarlos. La portabilidad se refiere sòlo a los programas fuente; no tiene sentido alguno intentar transportar programas compilados de uno a otro ordenador, pues han sido compilados haciendo uso de las facilidades suministradas por un determinado hardware, que no tiene porqué estar presente sobre otro, salvo que expresamente nos estemos refiriendo <» ordenadores compatibles y funcionando bajo un mismo sistema operativo.

Posibles causas de pérdida de portabilidad son la utilización de "números mágicos" o constantes dependientes del ordenadorconsiderado, como pueden ser el tamaño en bytes de los buffers del sistema, la utilización de secuencias de escape y control particulares para determinados periféricos y el empleo de funciones específicas de un sistema operativo que no tienen por qué estar presentes o funcionar igual en otros sistemas.

Para evitar el empleo indiscriminado de "números mágicos" es conveniente el empleo de las instrucciones #define e #ifdef del preprocesador de lenguaje C, de manera que permita la modificación de determinadas constantes antes de proceder a la compilación del programa.

De este modo podríamos emplear parámetros y funciones propios de cada sistema operativo con la seguridad de que los programas serían independientes del sistema considerado.
Una causa posible (y peligrosa) de pèrdida de portabilidad es la redefiniciòn de nombres de funciones, como los contenidos en la librería de C estándar. Si redefinimos funciones como printf, strepy, strlen, etc., por otras funciones propias que teniendo el mismo nombre manejen distintos argumentos de llamada y retorno, tendríamos problemas de funcionamiento obvios.

Otra causa de pérdida de portabilidad es la utilización de secuencias de escape y control específicas para determinados periféricos, como pantallas e impresoras de una determinada marca. Si nuestro programa ha de funcionar algún día con atros periféricos tendremos serios problemas de ftmeionamiento. La adopción de las secuencias de escape y control apropiadas para cada periférico ha de efectuarse en tiempo de ejecución del programa, en lugar de en tiempo de compilación. Lo más normal es proceder a la lectura de un fichero de parámetros conteniendo las características de cada periférico considerado. Otra posibilidad (mejor) es la utilización de funciones de librería que hagan uso de esta posibilidad (lectura de un fichero de parámetros) y además utilicen algún tipo de optimización, como el empleo de determinadas funciones que no están presentes en todos los terminales (borrado e inserción de líneas, por ejemplo), o manejen por software otras posibilidades, como ventanas de texto. Estas posibilidades y otras son manejadas por un paquete estándar como es el curses de la Universidad de Berkeley, existente en la mayoría de las instalaciones que trabajan con lenguaje C.

No hay comentarios:

Publicar un comentario