¿Qué características contribuyeron a la evolución de Pascal?

17

Estoy compilando una historia detallada del lenguaje Pascal, y me faltan algunos detalles.

Hay tantas características hoy que damos por sentado. ¿Qué características contribuyeron significativamente a la evolución de Pascal y por qué fueron significativas?

Estoy buscando características de lenguaje, no características de plataforma o marco. Entonces, como la sobrecarga del operador o los parámetros predeterminados, pero no el soporte de Linux o el nuevo widget de texto enriquecido.

Sé que hay algunos sabores diferentes de Pascal (Delphi, Free Pascal, Oxygene, Quick Pascal, Apple Pascal, etc.) e introdujeron las mismas características en diferentes momentos y en paralelo. Es correcto. Estoy viendo el lenguaje Pascal como un todo, y cuándo ocurrieron los hitos significativos (fechas, versiones, etc.)

Jim McKeeth
fuente
@ Jim Su pregunta solicitó una lista de fechas, pero no solicitó información sobre por qué alguien las consideraría importantes. He reformulado su pregunta para capturar ese aspecto y la he vuelto a abrir.
2
¿Sabías que el producto Turbo Pascal revolucionó el mundo Pascal? ¿Y el mundo de PC de IBM también, en realidad? Especialmente desde que arregló cadenas.
44
¡No te olvides de UCSD Pascal! Introdujo bytecodes (códigos p), mucho antes de que Java fuera un brillo en los ojos de Sun.
Macneil
1
+1 @Macneil UCSD p-Code y Smalltalk VM son las cosas que siempre explico cuando hablo de código administrado moderno (Java, .NET). Es divertido tener un déjà vu al ver un montón de cosas 'modernas' (como Apps, que es solo un nuevo sabor de cliente-servidor).
Jeroen Wiert Pluimers
1
@Jeroen Pluimers: También me divierte esta charla de que DVCS es "nuevo". Usé SCCS / Teamware en Sun, Torvalds usó BitKeeper. Cuando vi CVS, supe que estaba roto (al igual que Torvalds). Cuando escuché por primera vez sobre SVN, pensé "oh, finalmente lo arreglaron". Pero no. El mundo de OSS (¡y Joel!) Fueron tan dañados por CVS que hizo todo mal, ¡deben creer que es algo nuevo!
Macneil

Respuestas:

10

Desde una perspectiva histórica del lenguaje, probablemente la mayor contribución de Pascal fue la seguridad de tipo fuerte. Esa batalla ya casi ha terminado, ganó el lado de Pascal, y el punto de inflexión industrial fue Java. Pero durante mucho tiempo, C fue favorecido antes que Pascal por personas que se consideraban codificadores adultos en gran parte debido a esto: la gente quería la libertad de manipular sus punteros como si fueran números enteros. Sin embargo, las implementaciones prácticas de Pascal tenían lagunas, como las uniones que no verificaban dinámicamente el campo discriminante, o que incluso tenían un encuadre completo de punteros hasta el punto de ser todos menos C (Turbo Pascal era uno de estos).

Esto, y una simplificación de la complicada especificación ALGOL 68 [1], podría ser un punto de partida.

[1] Intenta leer el informe ALGOL 68 en algún momento, ¡definitivamente es un producto de los años 60! Un sitio en la web menciona algunas de sus jergas extrañas: 'token de bus', 'árboles de producción invisibles', 'entornos primarios', 'uniones incestuosas', 'nociones', 'protonotions', 'metanotions', 'hypernotions', ' paranotaciones ', etc.

Barry Kelly
fuente
15

Diría que las dos fuerzas impulsoras más importantes a lo largo de la historia de Pascal han sido:

  1. Tipo de seguridad: Pascal fue fundamental para crear la creencia de que la seguridad de tipo es importante y crítica en un idioma.
  2. Eficiencia del compilador: Pascal siempre se ha diseñado como un lenguaje de un solo paso y mostró al mundo lo rápido que puede ser un compilador sin renunciar a la potencia. Las cosas que hacen que un compilador sea rápido también son las cosas que hacen un lenguaje bien diseñado y fácil de leer. La genuina de Borland fue proporcionar todo eso y rendimiento también.
Nick Hodges
fuente
¿No fue PASCAL también el primer idioma donde el compilador fue escrito en PASCAL? Otra cosa notable en ese momento era el código P - código para una máquina pascal virtual. Todo lo que tenía que hacer para implementar PASCAL en una máquina diferente era escribir un intérprete o ensamblador para el código P.
Ingo
Agregaría que el tipo de seguridad también incluía los mecanismos conocidos como verificaciones de tiempo de ejecución en la mayoría de los compiladores pascales. (¿Casi?) Cada compilador los tiene, lo cual es fundamentalmente diferente del enfoque de LINT favorecido por los compiladores de C.
Marco van de Voort
11

Realmente necesitas volver a los orígenes: encuentra algo de la historia de Niklaus Wirth. Pascal comenzó su vida como un idioma de enseñanza. "Algoritmos + Estructuras de datos = Programas" es un buen punto de partida.

En ese momento, Pascal era mucho más simple que Algol 68 y PL / 1. Forzó la estructura y la declaración, y una seguridad de tipo fuerte, a diferencia de Fortran4 (Fortran 77 mejoró un poco las cosas allí, pero aún podía jugar terriblemente rápido y suelto). Y en comparación con COBOL, fue breve, simple y fácil de escribir. (Hola mundo en aproximadamente 6 líneas en lugar de 600).

Cuando se originó, había cosas como matrices de caracteres en Pascal, eso era para el manejo de cadenas. Las cosas mejoraron con los años.

Si realmente quiere profundizar en la historia de Pascal, algunos puntos que debe tener en cuenta:

  • Wirth's original (Pascal estándar)
  • extensiones de Digital Equipment Corp (DEC) en Vax
  • el sistema p UCSD (en muchas máquinas, pero especialmente en Apple-2)
  • Turbo Pascal
  • Apollo Domain Pascal (usado para escribir el sistema operativo Domain / OS, también llamado Aegis)
  • Turbo Pascal con objetos y unidades (ver 5.5 y posterior. Editar: acabo de encontrar el TP 5.5 OOP PDF )
  • Delphi

En la década de 1980 hubo una gran fiesta de babosas entre Pascal y C. Hubo una gran cantidad de desarrollo y actividad en ambos campamentos.

Como consecuencia, cosas extrañas y maravillosas como Bliss-32, Algol y PL / 1 han desaparecido prácticamente, pero las ideas de estos llegaron a Pascal.

EDITAR: las matrices de caracteres se pueden empaquetar, lo que le confiere algunas propiedades especiales, pero si quería lo que ahora conocemos como manejo de cadenas, debe crecer usted mismo.

rápidamente_ahora
fuente
IIRC hubo una pequeña cantidad de manejo especial para packed array[1..n] of char;, por ejemplo, en lectura (ln) y escritura (ln)
Gerry
Sí, readln, writeln eran un poco especiales porque podían manejar la entrada / salida de un número variable de caracteres. También hubo un poco de polvo a fines de la década de 1980 sobre que eran malvados y pecaminosos y rompieron el lenguaje porque aceptaron un número variable de parámetros. Los puristas odiaban esto. El resto de nosotros lo usamos sin preocuparnos demasiado por eso.
rapid_now
Tal vez sistemas de módulos / unidades del "otro" lenguaje Wirth Modula2. (Aunque tal vez sea indirecto a través de los esfuerzos resultantes para obtenerlo en las normas de Pascal, finalmente llegó al estándar Pascal Extendido, aunque con una sintaxis diferente)
Marco van de Voort
5

Extensiones orientadas a objetos! Object Pascal fue el mayor salto (no oficial) de estándares con el lanzamiento de Delphi (1) a mediados de los 90. Es difícil elegir solo uno, pero todo el núcleo del modelo de objetos en su conjunto ayudó a llevar el lenguaje al estado moderno. Desafortunadamente hasta el día de hoy, no se ha convertido en un estándar único unificado oficial que todos los compiladores cumplirían para codificar la simetría.

Afortunadamente, los desarrolladores del proyecto Free Pascal se han acomodado bastante a las características agregadas a Delphi tanto por Borland como por Embarcadero. RemObjects no tanto, pero al menos tienen vínculos con Embarcadero bajo Delphi Prism, por lo que cualquier desviación de un estándar (para hacer que el lenguaje sea más compatible con .NET) estaría altamente documentado.

Jason McMillen
fuente
8
Los objetos se introdujeron en Pascal con Turbo Pascal 5.5
mcottle
1
Los procedimientos y funciones eran por defecto estáticos. Tenías que usar la virtualpalabra clave para hacerlos reemplazables por subclases.
1
Virtual no es una palabra reservada en Delphi. La lista de palabras reservadas de Delphi y palabras clave de Prism se puede encontrar aquí y aquí .
David I
2
Los objetos fueron introducidos en Pascal por Apple. en.wikipedia.org/wiki/Object_Pascal#Early_history_at_Apple
Carl Manaster
2
@Carl: había olvidado que los Macs clásicos estaban programados en Pascal, y no sabía que era una versión OO de Pascal co-creada por Wirth.
mcottle
4

Solo una o dos cosas que recuerdo de haber usado Pascal hace mucho tiempo con MS-DOS:

Turbo Pascal introdujo más o menos un tipo de IDE en los años 80 (y el rendimiento de la compilación recibió un gran impulso en comparación con UCSD Pascal

De alguna manera, a mediados de los años 90, Borland cambió el nombre de Turbo a Borland Pascal. . Como primer paso, las Unidades introducidas, que permitieron dividir grandes proyectos en unidades de compilación separadas.

Más tarde también agregaron programación orientada a objetos.

Thorsten Müller
fuente
Turbo Pascal fue el producto simple. Borland Pascal tenía
2
Las unidades se introdujeron en Turbo Pascal (v4 IIRC). Estos compilados en archivos .tpu (unidad turbo pascal), que fueron los predecesores de los archivos dcu actuales. Creo que se basaron en conceptos del lenguaje Modula-2 de Wirth.
Gerry
1
ISTR, el sistema p UCSD también tenía unidades, pero no sé si eran anteriores a Turbo Pascal o no.
TMN
Curiosamente, el cartucho de "PROGRAMACIÓN BÁSICA" para el Atari 2600 proporcionó en 1980 una pantalla de programación que era sorprendentemente similar a una pantalla CodeView; se podría ver el programa (con el punto de ejecución actual resaltado) en un área de la pantalla, los valores de las variables en un segundo y cualquier salida de las declaraciones de "impresión" en un tercero. Desafortunadamente, la cantidad de RAM disponible para el programador estaba tan limitada que no se limitaba únicamente a las aplicaciones de "juguete", ni siquiera era un juguete. Sigue siendo un logro técnico interesante para una plataforma con ...
supercat
... la friolera de 128 bytes de RAM (incluidos 24 bytes necesarios para los punteros de la pantalla), y con todo el sistema de desarrollo en 4K de ROM (incluidas las formas de los caracteres). Dadas esas restricciones, permitir a los usuarios 64 bytes de RAM para mantener su programa, variables y salida fue un truco bastante bueno. Lástima que Atari lanzó la Programación Básica antes de desarrollar su chip "SARA" (que duplicó la RAM de 128 bytes a 256). Ser capaz de usar 128 bytes de RAM para el programa más 64 para variables y resultados hubiera sido mucho mejor que tener 64 bytes para todo.
supercat
4

Uno de los pasos evolutivos centrales en Pascal fue la noción adecuada de cuerdas. ISO 7185 ("Pascal estándar") no los tenía, lo cual es un poco vergonzoso. Sin embargo, todos los programadores reales los necesitaban, y las implementaciones de Pascal viables (como Borland / Turbo Pascal) los proporcionaron.

MSalters
fuente
4

Mirando hacia atrás en las innovaciones del lenguaje Pascal de Delphi, agregaría el modelo de Propiedad, Método, Evento (PME) y la sección "Publicada" para las clases. Eso hizo que el código nativo, fácil de usar y ampliara la construcción de componentes posible. Components cumplió la promesa de Brad Cox de circuitos integrados de software.

David I
fuente
3

La lucha entre muchos sabores de Pascal en los años 80 y principios de los 90.

Tenías Apple Pascal , Microsoft Pascal y QuickPascal y Turbo Pascal .

Todos introdujeron Object Pascal de una forma u otra (QuickPascal 1.0 y Turbo Pascal 5.5 alrededor del mismo período de tiempo). Apple porque lo necesitaban para su plataforma, Microsoft y Borland porque OO se estaba volviendo 'genial' (luego QuickPascal murió poco después, y Turbo Pascal 6.0 agregó un marco de OO razonable llamado Turbo Vision ).

Rudy Velthuis está bastante completo sobre esto en su publicación en el foro .

Puede descargar una imagen ISO con DOS 6.22 y algunos de los compiladores Pascal de DOS de esa época .

Jeroen Wiert Pluimers
fuente
2

Creo que la introducción de interfaces (en Delphi 3 IIRC) fue muy importante para convertirlo en un lenguaje moderno orientado a objetos.

François
fuente
Tenga en cuenta que la herencia de la interfaz no es OO en sí misma, pero se considera una de las formas más verdaderas de polimorfismo. Como compartía el mismo formato VMT que COM , hizo que la interoperabilidad con COM fuera mucho más fácil (las personas tienen opiniones amplias sobre que eso es bueno o malo <g>).
Jeroen Wiert Pluimers
2

Agregaré métodos anónimos y genéricos a la mezcla.

gabr
fuente
1
Para las versiones más recientes de Delphi, tal vez. Solía ​​usar Delphi 7, ¡así que por supuesto nunca usé métodos anónimos ni genéricos!
Frank Shearar
2

Para mí, las dos cosas más importantes (después de otros lenguajes como C ...) fueron la insensibilidad a las mayúsculas y la velocidad del compilador.

Y después de eso está el hecho de que es más fácil escribir con el teclado finlandés, porque no necesito constantemente las teclas {} u otras teclas que son difíciles de alcanzar ...

He estado a bordo desde Delphi2 pero usé D1 en el trabajo hace un par de años ...

Tommi Prami
fuente
1

Comience con "Programación estructurada" , de Dahl, Dijkstra y Hoare. La sección de Dijkstra es fundamental, incluso hoy. La sección de Tony Hoare sobre estructuración de datos sentó una gran parte del trabajo preliminar para PASCAL. (La sección de Dahl habló sobre lo que eventualmente se convirtió en programación orientada a objetos. Describió lo que se convirtió en clases en Simula 67).

Examine ALGOL-W, la implementación de Wirth de una variante de ALGOL-60.

También necesita saber sobre PL / I y el editor de enlaces IBM 360 (enlazador) en ese momento. Fue una maravilla de generalidad, con el pequeño problema de que corrió más lento que la melaza en enero en Juneau, Alaska. PASCAL fue diseñado específicamente para ser compilado y vinculado en una sola pasada, para mayor velocidad. (Ayudó que el lenguaje comenzara en una supercomputadora CDC 6400 junior, con mucha memoria, haciendo práctico un compilador de una pasada).

En realidad, había dos versiones principales de PASCAL de ETH Zurich. El idioma que todos conocen actualmente como PASCAL fue en realidad PASCAL2, la segunda versión.

John R. Strohm
fuente