[ATARI] Re: Atari digest, Vol 1 #189 - 2 msgs

Jesus Cea jcea at argo.es
Sat Dec 28 01:29:16 CET 2002


Respondo otro mensaje con un año de antigüedad:

Atari Emulación España (Gabriel Huertas) wrote:

[...]
> El uso de librerias te lleva a la ineficacia en la programación, como
> todos sabemos. mientras más librerias prefabricadas, menos control
> sobre el pograma, más desperdicio de recursos , etc. Decimos que C es
> un magnífico lenguaje, o incluso más, decimos que C es "el lenguaje",
> y que inventos como BASIC son depravantes porque te alejan todavía más
> del hardware, y te quitan control con sus funciones prefabricadas, y
> sin embargo, utilizar librerias dinámcas, que es compartir ni más ni
> menos que "pedazos" enteros de programas, es un lujo. Pués yo que
> quieres que te diga, cuando escribo un "hello World" y resulta que el
> programa resultante junto con las 6 o siete librerias que necesita
> para ejecutarse ocupa cerca de dos megas, me harto de reir. Y no me
> digas que es que el programa está mal hecho y no utiliza bien
> las librerias, porque el programa solo contine una instrucción:
> 
> en C:
> 
> #include <stdio.h>
> main()
> {
> fprint("hello world");
> }
> 
> En Basic:
> 
> print "hello world"

Partimos de las siguientes premisas:

a) La máquina en cuestión es "multitarea", y probablemente tenga
bastantes procesos funcionando simultaneamente.

b) Esa máquina trabaja con memoria virtual.

Si no estamos de acuerdo en esto, apaga y vámonos. Pero consideremos que
lo anterior es razonable.

Entonces:

1. Esos 2 megas de librerías dinámicas están siendo compartidos por
TODOS los procesos en memoria, que las utilicen. Es decir, si tienes 27
programas "hola mundo" funcionando a la vez, solo chupan 2 megas de
librerías, no 2*27 megas. Las librerías se mapean como "solo lectura", y
se comparten entre todos los procesos que las usan.

2. Si la máquina gestiona la memoria virtual como dios manda, de esos
dos megas que ocupan las librerías, sólo se cargan en RAM las partes que
están siendo utilizadas de forma efectiva. Los sectores de funciones no
usadas, ni siquiera se piden al disco duro. Esto es tecnología de los 60
y se llama "paginación bajo demanda" :-).

Independientemente de que las implementaciones actuales sean más o menos
chapuceras (léase, DLL's de Windows), el uso de las librerías
compartidas tiene varias ventajas:

1. Dividiendo el programa en librerías hace posible que otros programas
reutilicen funcionalidades sin tener que inventar la rueda de nuevo.
Osea, tu programa no necesita saber leer y escribir GIF's si puede
encontrar una librería en el sistema operativo que le proporcione dicho
servicio.

2. Las librerías se pueden actualizar independientemente del programa
que las utilice. Si mañana sale un nuevo MP4 en vez del MP3, puedes leer
y escribir en ese nuevo formato desde tu editor de música de hace 10
años, cuyo programador no lo va a actualizar porque la empresa cerró
hace años o, simpleemnte se ha muerto o ha abandonado el proyecto.

3. Puedes reemplazar una librería dinámica por otra "fantasma" que
amplíe las capacidades de un programa "inmodificable" (la mayoría). Por
ejemplo, si las rutinas "malloc()", "free()", etc residen en una
librería dinámica, puedes reemplazarla por otra que te indique, por
ejemplo, qué bloques de memoria no se han liberado al terminar el
programa, para detectar "leaks". O si las rutinas matemáticas que emplea
un programa residen en una librería externa, puedes sustituirla por una
nueva que llame directamente al FPU que acabas de estrenar. Y eso sin
que el programador original del soft supiese que existía siquiera algo
llamado "FPU" porque, a lo menor, cuando escribió ese programa, que
tiene 20 años, ni siquiera existía realmente.

-- 
Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
jcea at argo.es http://www.argo.es/~jcea/ _/_/    _/_/  _/_/    _/_/  _/_/
                                      _/_/    _/_/          _/_/_/_/_/
PGP Key Available at KeyServ   _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz





More information about the Atari mailing list