Programación en Pascal/Porqué Pascal

De Wikilibros, la colección de libros de texto de contenido libre.
Ir a la navegación Ir a la búsqueda

Aquellos programadores más viejos recordarán que en la década de los 80 y principio de los 90 el lenguaje de programación que más se usaba era Pascal, más que C y C++. Se usaba extensivamente en MS-DOS y en Apple.

Pero sucedió algo sorprendente. C y C++ sustituyeron a Pascal en un buen número de casos. C era un lenguaje usado extensivamente en Unix, y en la generación del núcleo de Windows. Las principales librerías de los sistemas operativos estaban escritas en C, y no es de extrañar, pues, que este terminara por imponerse.

Sin embargo, C y C++ no son lenguajes técnicamente superiores a Pascal, como la creencia popular dice. Simplemente, están en la cúspide debido a razones históricas. Concretamente, todo lo que es posible hacer con C se puede hacer en Pascal (y de manera general, más limpiamente), y el Object Pascal, aún no siendo tan complejo como C++ (le faltan los templates), no solo es más que suficiente, sino que es elegante, eficiente, e incluso fácil.

A lo largo de este tutorial, el lector comprobará como el Pascal es un lenguaje de programación muy completo, y, esperemos, pueda apreciar las formidables características que han hecho de él uno de los lenguajes más usados, y, todavía hoy, de los más seguros, rápidos, y legibles.

Qué se gana con respecto a C[editar]

  1. Limpieza
  2. Rapidez de compilación (FreePascal es 9 veces más rápido que GCC compilando).
  3. Facilidad
  4. Mejor gestión de librerías y sus dependencias
  5. Un entorno de programación gráfica (Lazarus y Delphi) sencillo y efectivo
  6. Mejor mantenibilidad del código
  7. Mejor gestión de los ficheros de código (no es necesario usar make incluso para proyectos grandes)
  8. Mejor portabilidad
  9. mejor uso de codigos

Puedes ver una opinión personal (no del autor de este wiki) por ejemplo aquí

¿Y qué se pierde con respecto a C?[editar]

Realmente poca cosa, excepto quizá:

  1. Código generado ligeramente más lento, en torno al 10%. Fuente. Esto no es debido a las capacidades de Pascal de ser rápido, sino a que GCC es un proyecto que gracias a su fama está mantenido por más gente. Aun así, y teniendo en cuenta la diferencia de presupuestos, es sorprendente que C genere código solo un 10% más rápido. Nota: en la prueba se ha puesto la optimización al máximo en ambos compiladores, no es normal usar opciones tan agresivas en ambos compiladores, por lo que al final la diferencia en la velocidad de proceso es casi descartable.
  2. Acceso más directo a las librerías del sistema. En FreePascal es fácil usar librerías del sistema, pero hay que declarar las funciones previamente.
  3. Aritmética de punteros (no es lo mismo que uso de punteros). Algo que todo programador debería evitar. Pascal tiene punteros, y es posible la aritmética en los mismos con algunos trucos, pero no se recomienda.

Qué se gana con respecto a C++[editar]

Además de todo lo que se gana con C:

  1. Sistema de objetos mucho más claro
  2. Properties

¿Y qué se pierde con respecto a C++?[editar]

  1. Templates. No son necesarios, incluso para aplicaciones complejas, y son difíciles de entender, además de tener una sintaxis poco elegante.
  2. Herencia múltiple. Sin embargo, es posible usar interfaces, al estilo Java.
  3. Herencia de TObject. No estas obligado a que tus "Clases" siempre tengan que heredar de alguna otra "Clase". Si no especificas el ancestro de tu "Clase" en Object Pascal se te asigna TObject al igual que en Java. Y existen ocasiones en las cuales no es necesario heredar de nadie.

Qué se gana con respecto a Java[editar]

  1. Mayor velocidad (FreePascal genera código entre un 10 y un 200% más rápido que Java). Fuente
  2. Muchísimo ahorro en memoria, aproximadamente entre 4 y 80 veces.
  3. Mayor legibilidad
  4. Mayor flexibilidad, al ser posible acceder a funciones del sistema directamente.
  5. Ejecutables nativos
  6. Código compilado cuando el programa arranca. En Java, tiene que actuar el JIT (Just in Time compiler), lo cual da la sensación al usuario de lentitud.

¿Y qué se pierde con respecto a Java?[editar]

  1. Recolector de basura: Java gestiona la memoria por el usuario (aun a cambio de ser muchísimo menos eficiente)
  2. Se evita el uso de punteros. Aunque en Pascal es posible usar objetos y clases sin preocuparse, siendo transparente su uso.
  3. Un mismo ejecutable (archivo jar) funciona en todas las plataformas. Esto no es un gran inconveniente, pues FreePascal y Lazarus se portan con mucha facilidad (generalmente es solo una recompilación).

¿Qué se gana con respecto a Python, Ruby, Perl...?[editar]

  1. Mucha mayor velocidad de ejecución.
  2. Mayor seguridad en aplicaciones complejas, debido a su tipado estático.
  3. Acceso mucho más fácil a librerías externas.

¿Y qué se pierde con respecto a los lenguajes scripting?[editar]

  1. Recolector de basura.
  2. Velocidad de escritura del código, aunque hay que tener en cuenta que esto a veces tiene como consecuencia baja legibilidad (sobre todo en el caso de Perl).

¿Qué se gana con respecto a Lisp?[editar]

Lisp es un lenguaje de programación muy antiguo, muy completo, y también muy complejo. Lo único que tienen en común es que ambos son lenguajes de propósito general.

Un viejo dicho que compara Pascal con Lisp dice:

Pascal is for building pyramids -- imposing, breathtaking, static structures built by armies pushing heavy blocks into place. Lisp is for building organisms -- imposing, breathtaking, dynamic structures built by squads fitting fluctuating myriads of simpler organisms into place. — Alan Perlis

Y tiene cierta razón. Sin embargo, ello también demuestra que ambos lenguajes son tan diferentes que no deberían ser comparados tan a la ligera. Así, siguiendo con la analogía, Pascal es un lenguaje fuerte y seguro que está pensado para hacer aplicaciones que duran milenios (como las pirámides), mientras que Lisp es un lenguaje dinámico y flexible pero más vulnerable para hacer aplicaciones que tengan que estar constantemente actualizándose y cambiando (como los organismos).

Por supuesto, es una exageración. Ni Pascal es tan rígido como dice (solo hay que ver como evolucionan Lazarus, Delphi, y miles y miles de aplicaciones creadas con ellos), ni Lisp la última panacea como sus fanáticos pretenden convencer al mundo (y de ahí que a la hora de la verdad haya tan pocas aplicaciones disponibles realizadas en Lisp).

Lisp tiene macros, es dinámico, y también muy complejo, y realmente accesible solamente para mentes brillantes, o, al menos, para mentes con mucho tiempo y paciencia para aprender.

Aparte de estas cosas:

  1. Pascal es mucho más rápido, del orden de 2 a 3 veces más.
  2. Pascal necesita mucha menos memoria.
  3. Accede más fácilmente las librerías del sistema.
  4. Existen editores específicos (Lazarus y Delphi) con constructor de interfaces y otras facilidades, más fáciles de usar y más completas que las existentes en Lisp (Slime y LispWorks básicamente).
  5. Más seguro a la hora de manejar tipos de datos, menos posibilidades de fallos.
  6. Pascal está elaborado y mantenido por gente más preocupada en tener el trabajo hecho que en adorar su lenguaje.

¿Y qué se pierde con respecto a Lisp?[editar]

  1. El REPL o consola de comandos Lisp, donde se puede probar el programa mientras se hace. En FreePascal no es un gran problema pues la velocidad de compilación es altísima.
  2. Macros, que son básicamente formas de escribir programas que escriben programas. Sucede algo similar a los templates del C++, ni está demostrado que sean necesarios, ni queda claro que sus aparentes beneficios sean mejores que la complejidad y falta de uniformidad que suelen añadir al sistema.