[ Foro de Pascal ]

Parámetros "exteriores" de un programa.

24-Apr-2010 02:37
Antonio P.G.
2 Respuestas

Buenos días (o tardes, o noches) profesor Nacho.

Estaba yo pensando como resolver una práctica de TADs, montículos en concreto, cuando se me ocurrió pasar por la web (la verdad es que entro varias veces por semana :-D), y echar de nuevo un ojo a los últimos temas del curso, en concreto al tema 15.

Me lleva llamando ya bastante tiempo la atención ciertos aspectos de la programación con Turbo Pascal, sobretodo los inmanentes a las órdenes del DOS y de otras unidades. Voy a copiar aquí el trozo de código (del tema 15) que me da alguna que otra duda:


{$M 2000,0,0 }   { 2000 bytes pila, sin heap }
{ Habrá que suprimir la línea anterior si se usa Tmt Pascal }
program EjecutaOrden;
uses dos;
begin
  SwapVectors;
  Exec('C:\WP51\WP.EXE', 'MITEXTO.TXT');
  SwapVectors;
end.


Pues bien, he manejado con anterioridad otras directivas pero, ¿los parámetros de ésta indican memoria de éste programa, o del programa "WP.EXE"?

Otra duda que me ha surgido es si " 'MITEXTO.TXT' " es un parámetro del programa "WP.EXE", y si es así, ¿cómo se introducen parámetros desde el exterior a un programa? Es decir, ¿qué habría que escribir al comienzo del programa "WP.EXE" para que esto cobrase de sentido?

Por último me gustaría preguntar algo, no respecto al programa sino que estoy pensando en introducirme lentamente en otro lenguaje de programación. Desde Pascal, ¿cuál me recomienda de entre Java, C y Python? Ya he leído algo de Java y me da a mí que hay pocos lenguajes tan "amigables" como Pascal :-P.

Espero, aunque no impaciente sí atentamente su respuesta.

Muchas Gracias.


25-Apr-2010 23:50
Nacho Cabanes (+84)

Voy respondiendo por partes:

-----

Voy a copiar aquí el trozo de código (del tema 15) que me da alguna que otra duda:


{$M 2000,0,0 }  { 2000 bytes pila, sin heap }
{ Habrá que suprimir la línea anterior si se usa Tmt Pascal }
program EjecutaOrden;
uses dos;
begin
 SwapVectors;
 Exec('C:\WP51\WP.EXE', 'MITEXTO.TXT');
 SwapVectors;
end.


Pues bien, he manejado con anterioridad otras directivas pero, ¿los parámetros de ésta indican memoria de éste programa, o del programa "WP.EXE"?

--

Es una peculiaridad de MsDOS, reflejada en la forma de trabajar de Turbo Pascal. Cuando un programa llama a otro, tiene que dejarle memoria libre. En este ejemplo, de la zona llamada "heap" (montón), en la que se reservan las variables dinámicas, no necesitamos nada (0 mínimo y 0 máximo), de modo que dejamos toda para el programa que ejecutamos. La pila se usa "casi sin que nos demos cuenta" para guardar los datos de retorno de cada función. Como es un programa muy sencillo, dejamos poco (2000 bytes), e incluso podríamos apurar un poco más.


-----

Otra duda que me ha surgido es si " 'MITEXTO.TXT' " es un parámetro del programa "WP.EXE", y si es así, ¿cómo se introducen parámetros desde el exterior a un programa? Es decir, ¿qué habría que escribir al comienzo del programa "WP.EXE" para que esto cobrase de sentido?

--

Tienes razón, eso no está incluido en el curso. Era parte de uno de los ejercicios de ejemplo... que no he llegado a incluir. Me lo apunto mentalmente para hacerlo.

Las órdenes que se usan son "paramcount" para saber cuantos parámetros hay, y "paramstr(i)" para acceder a cada uno de ellos (0 es el nombredel ejecutable, y 1 es el primer parámetro "de verdad"). Un ejemplo de uso sería:

if paramcount > 0 then
    opcion := paramstr(1)

-----

Por último me gustaría preguntar algo, no respecto al programa sino que estoy pensando en introducirme lentamente en otro lenguaje de programación. Desde Pascal, ¿cuál me recomienda de entre Java, C y Python? Ya he leído algo de Java y me da a mí que hay pocos lenguajes tan "amigables" como Pascal :-P.


--

Difícil pregunta: te digo las características básicas de cada uno para que tú decidas...  ;-)

- C: difícil de dominar, lento para "crear" cosas que hoy en día son totalmente necesarias (por ejemplo, ni siquiera existe un tipo de datos "cadena de texto"), fácil cometer fallos, engorroso de depurar y descubrir esos fallos... pero es algo que todo "informático de verdad" debería conocer e intentar dominar, porque es el lenguaje de "alto nivel" (o casi) que más control te da sobre la máquina.

- Java: mucho más moderno, permite hacer de todo (por ejemplo, los gráficos o el acceso a una red son parte del lenguaje estándar), es muy productivo para el programador (las tareas habituales se hacen con rapidez). Como inconvenientes: los "ejecutables" son más lentos que el equivalente en C (*en teoría, luego te comentaré más sobre esto), y a veces es demasiado "verboso" (no sé si existe tradución razonable para el inglés "verbose"): órdenes exageradamente largas y un tanto rígidas en su estructura (para mi gusto). Por ejemplo, para un simple "ReadLine" es necesario incluir un bloque de comprobación de errores try...catch siempre.

- Python: se podría decir casi las mismas ventajas que de Java, pero es "menos verboso", a veces hasta demasiado breve. Está menos extendido que Java: es habitual en servidores web y suele estar preinstalado en sistemas Unix (como los Linux), pero se usa mucho menos que Java para hacer aplicaciones "de escritorio".


* Sobre la velocidad: en teoría Java mete una capa adicional entre tu programa y el sistema operativo (la "máquina virtual Java"), por lo que es más lento. En la práctica, en problemas grandes te da más cosas hechas, de modo que depende menos de tu pericia como programador, y en vez de eso, usas funciones que ya han sido creadas por los ingenieros de Sun, por lo que la diferencia de velocidad no es tan grande como cabría esperar.


26-Apr-2010 02:06
Antonio P.G.

Muchas gracias, de veras.

Como siempre, una respuesta impecable, que evapora las dudas al instante. Lo cierto es que además, con esto último, creo que me voy a decantar por Java. Python lo probé hace mucho tiempo (nada, un par de líneas) y me pareció eso, "breve". C me parece muy complicado (aunque terminaré manejándolo algún día). Y por último, con Java hice el otro día mi primer "HolaMundo", y lo de los objetos me "llama mucho la atención".

En fin, de nuevo, mil gracias profesor.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)