Articulo de referencia

Pascal (lenguaje de programación)

{{cite web| url=http://java.sun.com/docs/white/delegates.html |title=About Microsoft's \"Delegates\" |archive-url=https://web.archive.org/web/20120627043929/http://java.sun.com/...

Pascal es un lenguaje de programación imperativo y procedimental , diseñado por Niklaus Wirth como un lenguaje pequeño y eficiente destinado a fomentar buenas prácticas de programación mediante la programación estructurada y la estructuración de datos . Recibe su nombre del matemático, filósofo y físico francés Blaise Pascal . [ a ]

Pascal se desarrolló siguiendo el patrón del lenguaje ALGOL 60. Wirth participó en el proceso de mejora del lenguaje como parte de los esfuerzos de ALGOL X y propuso una versión llamada ALGOL W. Esta no fue aceptada y el proceso de ALGOL X se estancó. En 1968, Wirth decidió abandonar el proceso de ALGOL X y seguir mejorando ALGOL W, lanzándolo como Pascal en 1970.

Además de los escalares y arreglos de ALGOL , Pascal permite definir tipos de datos complejos y construir estructuras de datos dinámicas y recursivas, como listas , árboles y grafos . Pascal tiene tipado fuerte en todos los objetos, lo que significa que un tipo de dato no se puede convertir ni interpretar como otro sin conversiones explícitas. A diferencia de C (y también de la mayoría de los demás lenguajes de la familia C ), Pascal permite definiciones de procedimientos anidados a cualquier profundidad y admite la mayoría de los tipos de definiciones y declaraciones dentro de subrutinas (procedimientos y funciones). Por lo tanto, un programa es sintácticamente similar a un único procedimiento o función. Esto es similar a la estructura de bloques de ALGOL 60, pero restringida de sentencias de bloque arbitrarias a solo procedimientos y funciones.

Pascal tuvo un gran éxito en la década de 1970, especialmente en el floreciente mercado de las minicomputadoras . También se desarrollaron compiladores para muchas microcomputadoras a finales de la década de 1970. Se utilizó ampliamente como lenguaje de enseñanza en cursos de programación a nivel universitario en la década de 1980, y también en entornos de producción para el desarrollo de software comercial durante el mismo período. Fue reemplazado por el lenguaje de programación C a finales de la década de 1980 y principios de la de 1990 con la popularización de los sistemas basados ​​en UNIX , y especialmente con el lanzamiento de C++ .

En 1985 se desarrolló un derivado llamado Object Pascal , diseñado para la programación orientada a objetos. Este lenguaje fue utilizado por Apple Computer (para las máquinas Lisa y Macintosh ) y Borland a finales de la década de 1980, y posteriormente se desarrolló en Delphi para la plataforma Microsoft Windows . Las extensiones de los conceptos de Pascal dieron lugar a los lenguajes Modula-2 y Oberon , ambos desarrollados por Wirth.

Historia

Esfuerzos anteriores

Gran parte de la historia del diseño de lenguajes informáticos durante la década de 1960 se remonta al lenguaje ALGOL 60. ALGOL se desarrolló durante la década de 1950 con el objetivo explícito de poder describir algoritmos con claridad . Incluía una serie de características para la programación estructurada que siguen siendo comunes en los lenguajes actuales.

Poco después de su introducción, en 1962, Wirth comenzó a trabajar en su tesis doctoral con Helmut Weber sobre el lenguaje de programación Euler . Euler se basaba en la sintaxis y muchos conceptos de ALGOL, pero no era una derivación. Su objetivo principal era añadir listas y tipos dinámicos, lo que permitía utilizarlo en funciones similares a las de Lisp . El lenguaje se publicó en 1965.

Para entonces, ya se habían identificado varios problemas en ALGOL, en particular la falta de un sistema de cadenas estandarizado . El grupo encargado del mantenimiento del lenguaje había iniciado el proceso ALGOL X para identificar mejoras y solicitó propuestas. Wirth y Tony Hoare presentaron un conjunto de modificaciones conservadoras para añadir cadenas y simplificar la sintaxis. Estas modificaciones se consideraron demasiado menores como para considerarlas el nuevo estándar de ALGOL, por lo que Wirth escribió un compilador para el lenguaje, que pasó a llamarse ALGOL W.

Los esfuerzos en el desarrollo de ALGOL X culminaron en la elección de un lenguaje mucho más complejo: ALGOL 68. La complejidad de este lenguaje dificultó considerablemente la creación de compiladores de alto rendimiento y no tuvo una amplia difusión en la industria. Esto abrió la puerta a lenguajes más novedosos.

Pascal

Pascal se vio influenciado por los esfuerzos de ALGOL W, con los objetivos explícitos de enseñar programación de manera estructurada y para el desarrollo de software de sistemas. [ 5 ] Una generación de estudiantes utilizó Pascal como lenguaje introductorio en cursos de pregrado. Otros objetivos incluían proporcionar una herramienta confiable y eficiente para escribir programas grandes, [ 6 ] y salvar la brecha entre la programación científica y la comercial, representada por los lenguajes entonces muy extendidos Fortran y COBOL, con un lenguaje de propósito general. [ 7 ]

Uno de los primeros éxitos del lenguaje fue la introducción de UCSD Pascal de la Universidad de California en San Diego (UCSD) , una versión que se ejecutaba en un sistema operativo personalizado que podía portarse a diferentes plataformas. Una plataforma clave fue el Apple II , donde tuvo un uso generalizado como Apple Pascal . Esto llevó a que Pascal se convirtiera en el principal lenguaje de alto nivel utilizado para el desarrollo en el Apple Lisa y, posteriormente, en el Macintosh . Partes del sistema operativo original del Macintosh se tradujeron manualmente al lenguaje ensamblador Motorola 68000 a partir del código fuente de Pascal . [ 8 ]

El sistema de composición tipográfica TeX, creado por Donald Knuth, se escribió en WEB , el sistema de programación literaria original , basado en el PDP-10 Pascal de Digital Equipment Corporation (DEC) . Aplicaciones comerciales de éxito como Adobe Photoshop [ 9 ] se escribieron en Macintosh Programmer's Workshop Pascal, mientras que aplicaciones como Total Commander , Skype [ 10 ] y Macromedia Captivate se escribieron en Delphi ( Object Pascal ). Apollo Computer utilizó Pascal como lenguaje de programación de sistemas para sus sistemas operativos a partir de 1980.

También se han utilizado variantes de Pascal para todo tipo de proyectos, desde proyectos de investigación hasta juegos de PC y sistemas embebidos . Existen compiladores de Pascal más recientes que se utilizan ampliamente. [ 11 ]

Dialectos

El compilador de ejemplo de Wirth, el sistema Pascal-P, diseñado para propagar el lenguaje, utilizaba un subconjunto del mismo, concebido como el subconjunto mínimo capaz de autocompilarse. La idea era que esto permitiera el arranque del compilador, que posteriormente se extendería hasta alcanzar la funcionalidad completa del lenguaje Pascal. Este proceso se llevó a cabo con varios compiladores, pero una excepción notable fue UCSD Pascal, basado en Pascal-P2. Mantuvo el subconjunto del lenguaje con la idea de que funcionaría mejor en los nuevos microprocesadores (de la época) con memoria limitada. UCSD también convirtió el intérprete de Pascal-P2 en una "máquina de bytes", precisamente porque se adaptaba mejor a los microprocesadores orientados a bytes.

UCSD Pascal sirvió de base para muchos sistemas, incluido Apple Pascal. Borland Pascal no se basaba en el código fuente de UCSD, pero surgió durante el apogeo de UCSD e incorporó muchas de sus características. Esto dio inicio a la línea que culminó con Delphi Pascal y el compilador de código abierto compatible FPC/ Lazarus .

El estándar ISO para Pascal, ISO 7185, se publicó en 1983 y se implementó y utilizó ampliamente en mainframes, minicomputadoras, IBM-PC y compatibles de 16 a 32 bits . Los dos dialectos de Pascal más utilizados a finales del siglo XX y hasta la actualidad son la versión estándar ISO 7185 y las versiones Delphi/Turbo Pascal (de las cuales las dos versiones de Borland son en su mayoría compatibles entre sí).

La fuente de gran parte de la historia temprana de Pascal se puede encontrar en los boletines informativos del Grupo de Usuarios de Pascal en:

Boletines informativos del Grupo de Usuarios de Pascal .

Objeto Pascal

Durante el desarrollo de la Lisa, Larry Tesler comenzó a cartearse con Wirth sobre la idea de añadir extensiones orientadas a objetos al lenguaje, para convertir a Pascal en un lenguaje de programación multiparadigma . Esto dio lugar inicialmente a Clascal , presentado en 1983. Cuando el programa Lisa fue desapareciendo y fue reemplazado por la Macintosh, se creó una versión posterior llamada Object Pascal . Esta se introdujo en la Mac en 1985 como parte del entorno de aplicaciones MacApp y se convirtió en el principal lenguaje de desarrollo de Apple hasta principios de la década de 1990.

Las extensiones de Object Pascal se añadieron a Turbo Pascal con el lanzamiento de la versión 5.5 en 1989. [ 12 ] Con el paso de los años, Object Pascal se convirtió en la base del sistema Delphi para Microsoft Windows , que todavía se utiliza para desarrollar aplicaciones de Windows y puede compilar código de forma cruzada para otros sistemas. Free Pascal es una alternativa de código abierto y multiplataforma con su propio entorno de desarrollo integrado gráfico (IDE) llamado Lazarus .

Implementaciones

Compiladores antiguos

El primer compilador de Pascal fue diseñado en Zúrich para la familia de computadoras centrales de la serie CDC 6000. Niklaus Wirth informa que un primer intento de implementarlo en FORTRAN 66 en 1969 no tuvo éxito debido a la insuficiencia de FORTRAN 66 para expresar estructuras de datos complejas. El segundo intento se implementó en un lenguaje similar a C (Scallop por Max Engeli) y luego se tradujo manualmente (por R. Schild) al propio Pascal para el arranque . [ 13 ] Estuvo operativo a mediados de 1970. Muchos compiladores de Pascal desde entonces han sido de manera similar autoalojados , es decir, el compilador está escrito en Pascal y el compilador generalmente es capaz de recompilarse cuando se agregan nuevas características al lenguaje o cuando el compilador debe portarse a un nuevo entorno. El compilador GNU Pascal es una excepción notable, ya que está escrito en C.

La primera adaptación exitosa del compilador Pascal de CDC a otro ordenador central fue realizada por Welsh y Quinn en la Universidad Queen's de Belfast (QUB) en 1972. El objetivo era la serie 1900 de International Computers Limited (ICL) . Este compilador, a su vez, fue el precursor del compilador Pascal para el miniordenador Multum de Information Computer Systems (ICS) . La adaptación a Multum fue desarrollada —con el objetivo de utilizar Pascal como lenguaje de programación de sistemas— por Findlay, Cupples, Cavouras y Davis, quienes trabajaban en el Departamento de Informática de la Universidad de Glasgow . Se cree que Multum Pascal, que se completó en el verano de 1973, pudo haber sido la primera implementación de 16 bits .

En 1977, Welsh y otros investigadores de la Universidad Queen's de Belfast (QUB) completaron un compilador totalmente nuevo. Este ofrecía una función de diagnóstico del lenguaje fuente (que incluía análisis de rendimiento, rastreo y volcados de memoria post mortem formateados con reconocimiento de tipos), implementada por Findlay y Watt en la Universidad de Glasgow. En 1980, un equipo de la Universidad de Southampton y la Universidad de Glasgow adaptó esta implementación a la serie ICL 2900. La implementación del modelo estándar de Pascal también se basó en este compilador, habiendo sido adaptada por Welsh y Hay en la Universidad de Manchester en 1984 para verificar rigurosamente la conformidad con la norma BSI 6192/ISO 7185 y generar código para una máquina abstracta portátil.

El primer compilador de Pascal escrito en Norteamérica fue desarrollado en la Universidad de Illinois bajo la dirección de Donald B. Gillies para el PDP-11 y generaba código máquina nativo. Microsoft disponía de compiladores de Pascal para PC de IBM; véase Microsoft Pascal .

El sistema Pascal-P

Para propagar rápidamente el lenguaje, se creó en Zúrich un kit de portabilidad de compiladores que incluía un compilador que generaba el llamado código p para una máquina de pila virtual , es decir, código que se presta a una interpretación razonablemente eficiente, junto con un intérprete para ese código: el sistema Pascal-P . Los compiladores del sistema P se denominaron Pascal-P1, Pascal-P2, Pascal-P3 y Pascal-P4. Pascal-P1 fue la primera versión y Pascal-P4 la última que se desarrolló en Zúrich. La versión denominada Pascal-P1 se acuñó posteriormente debido a las numerosas fuentes diferentes de Pascal-P que existían. El compilador se rediseñó para mejorar la portabilidad y se publicó como Pascal-P2. Este código se mejoró posteriormente para convertirse en Pascal-P3, con un código intermedio compatible con versiones anteriores de Pascal-P2, y Pascal-P4, que no era compatible con versiones anteriores.

El compilador-intérprete Pascal-P4 aún puede ejecutarse y compilarse en sistemas compatibles con el Pascal original (al igual que Pascal-P2). Sin embargo, solo acepta un subconjunto del lenguaje Pascal.

Pascal-P5, creado fuera del grupo de Zúrich, acepta el lenguaje Pascal completo e incluye compatibilidad con la norma ISO 7185.

Pascal-P6 es una continuación de Pascal-P5 que, junto con otras características, pretende ser un compilador para CPU específicas, incluyendo AMD64.

UCSD Pascal se derivó de Pascal-P2, donde Kenneth Bowles lo utilizó para crear el sistema interpretativo UCSD p-System. Fue uno de los tres sistemas operativos disponibles en el lanzamiento de la computadora personal IBM original . [ 14 ] UCSD Pascal utilizaba un código intermedio basado en valores de bytes, y por lo tanto fue uno de los primeros compiladores de código de bytes . Apple Pascal se lanzó en 1979 para los sistemas informáticos Apple II y Apple III . Era una implementación de, o se basaba en gran medida en, UCSD Pascal. Pascal-P1 a Pascal-P4 no lo eran, sino que se basaban en la longitud de palabra de 60 bits del CDC 6600 .

La Comisión Australiana de Energía Atómica lanzó un compilador basado en el compilador Pascal-P4, que creaba archivos de objetos binarios nativos, para la computadora central IBM System/370 ; se denominó AAEC Pascal 8000 Compiler por la abreviatura del nombre de la comisión. [ 15 ]

Object Pascal y Turbo Pascal

Apple Computer creó su propia versión de Lisa Pascal para el Lisa Workshop en 1982, y adaptó el compilador al Apple Macintosh y al MPW en 1985. Ese mismo año, Larry Tesler , en colaboración con Niklaus Wirth, definió Object Pascal, y estas extensiones se incorporaron tanto al compilador Lisa Pascal como al Mac Pascal.

En la década de 1980, Anders Hejlsberg escribió el compilador Blue Label Pascal para el Nascom -2. Una reimplementación de este compilador para el IBM PC se comercializó con los nombres de Compas Pascal y PolyPascal antes de ser adquirida por Borland y renombrada como Turbo Pascal .

Turbo Pascal se hizo enormemente popular gracias a una agresiva estrategia de precios, a que fue uno de los primeros entornos de desarrollo integrados (IDE) a pantalla completa y a su rapidísimo tiempo de compilación (solo unos segundos para compilar, enlazar y ejecutar). Fue escrito y altamente optimizado completamente en lenguaje ensamblador , lo que lo hizo más pequeño y rápido que gran parte de la competencia.

En 1986, Anders portó Turbo Pascal a Macintosh e incorporó las extensiones Object Pascal de Apple en Turbo Pascal. Estas extensiones se volvieron a agregar a la versión de PC de Turbo Pascal para la versión 5.5. Al mismo tiempo, Microsoft también implementó el compilador Object Pascal. [ 16 ] [ 17 ] Turbo Pascal 5.5 tuvo una gran influencia en la comunidad Pascal, que comenzó a concentrarse principalmente en la IBM PC a finales de la década de 1980. Muchos aficionados a la PC que buscaban un reemplazo estructurado para BASIC usaron este producto. También comenzó a ser adoptado por desarrolladores profesionales. Casi al mismo tiempo, se importaron varios conceptos de C para permitir que los programadores de Pascal usaran la interfaz de programación de aplicaciones (API) basada en C de Microsoft Windows directamente. Estas extensiones incluían cadenas terminadas en nulo , aritmética de punteros , punteros a funciones , un operador de dirección de y conversiones de tipo inseguras .

Turbo Pascal y otros lenguajes derivados con estructuras de unidades o módulos son lenguajes de programación modulares . Sin embargo, no ofrecen el concepto de módulos anidados ni la importación y exportación cualificada de símbolos específicos.

Otras variantes

Super Pascal añade etiquetas no numéricas, una instrucción de retorno y expresiones como nombres de tipos.

TMT Pascal fue el primer compilador compatible con Borland para el modo protegido compatible con MS-DOS de 32 bits , OS/2 y Win32 . Extiende el lenguaje con sobrecarga de funciones y operadores .

Las universidades de Wisconsin-Madison , Zúrich , Karlsruhe y Wuppertal desarrollaron los compiladores Pascal-SC [ 18 ] [ 19 ] y Pascal-XSC [ 20 ] [ 21 ] [ 22 ] ( Extensions for Scientific Computation ), destinados a la programación de cálculos numéricos. El desarrollo de Pascal-SC comenzó en 1978 con soporte para ISO 7185 Pascal nivel 0, pero el soporte para nivel 2 se añadió posteriormente. [ 23 ] Pascal-SC originalmente estaba dirigido al procesador Z80 , pero más tarde se reescribió para DOS ( x86 ) y 68000. Pascal-XSC se ha portado en varias ocasiones a los sistemas operativos Unix (Linux, SunOS , HP-UX , AIX ) y Microsoft/IBM (DOS con EMX , OS/2 , Windows ). Funciona generando código fuente C intermedio que luego se compila a un ejecutable nativo. Algunas de las extensiones del lenguaje Pascal-SC han sido adoptadas por GNU Pascal .

Pascal Sol fue diseñado alrededor de 1983 por un equipo francés para implementar un sistema similar a Unix llamado Sol. Era Pascal estándar de nivel 1 (con límites de matriz parametrizados), pero la definición permitía palabras clave alternativas e identificadores predefinidos en francés, y el lenguaje incluía algunas extensiones para facilitar la programación del sistema (por ejemplo, un equivalente a lseek). [ 24 ] Posteriormente, el equipo de Sol se trasladó al proyecto ChorusOS para diseñar un sistema operativo distribuido . [ 25 ]

IP Pascal es una implementación del lenguaje de programación Pascal que utiliza Micropolis DOS, pero que rápidamente se migró a CP/M-80, que se ejecutaba en el Z80. En 1994, se migró a los microprocesadores 80386 y actualmente existen implementaciones para Windows XP y Linux. En 2008, el sistema se actualizó y el lenguaje resultante se denominó "Pascaline" (en honor a la calculadora de Pascal ). Incluye objetos, controles de espacio de nombres , matrices dinámicas y muchas otras extensiones, y generalmente presenta la misma funcionalidad y protección de tipos que C# . Es la única implementación de este tipo que también es compatible con la implementación original de Pascal, estandarizada como ISO 7185.

Construcciones del lenguaje

Pascal, en su forma original, es un lenguaje puramente procedimental e incluye el conjunto tradicional de estructuras de control tipo ALGOL con palabras reservadas como if, then, else, while, for, y case, que abarcan una sola instrucción o un bloque de instrucciones begin- end. Pascal también tiene construcciones de estructuración de datos no incluidas en los tipos originales de ALGOL 60 , como registros , variantes, punteros , enumeraciones y conjuntos y punteros a procedimientos. Dichas construcciones fueron en parte heredadas o inspiradas de Simula 67, ALGOL 68 , el propio ALGOL W de Niklaus Wirth y sugerencias de CAR Hoare .

Los programas Pascal comienzan con la programpalabra clave con una lista de descriptores de archivos externos como parámetros [ 26 ] (no requerido en Turbo Pascal, etc.); luego sigue el bloque principal entre paréntesis de las palabras clave beginy end. Los puntos y coma separan las instrucciones , y el punto finaliza todo el programa (o unidad ). Se ignora el uso de mayúsculas y minúsculas en el código fuente de Pascal.

Aquí tenéis un ejemplo del código fuente utilizado para un programa muy sencillo de "¡Hola, mundo!" :

programa HelloWorld ( salida ) ; inicio WriteLn ( '¡Hola, mundo!' ) {No se requiere ";" después de la última instrucción de un bloque;  agregar uno agrega una "instrucción nula" al programa, que es ignorada por el compilador.} fin .

Tipos de datos

En Pascal, una declaración de tipo se utiliza para definir un rango de valores que una variable de ese tipo puede almacenar. También define un conjunto de operaciones que se pueden realizar sobre variables de ese tipo. Los tipos predefinidos son:

El rango de valores permitidos para los tipos básicos (excepto Boolean) está definido por la implementación. Se proporcionan funciones para algunas conversiones de datos. Para la conversión de reala integer, están disponibles las siguientes funciones: round(usando redondeo a la mitad alejándose de cero ) y trunc(redondea hacia cero).

El programador tiene la libertad de definir otros tipos de datos de uso común (por ejemplo, byte, cadena, etc.) en términos de los tipos predefinidos utilizando la funcionalidad de declaración de tipos de Pascal, por ejemplo

tipo byte = 0 .. 255 ; signed_byte = - 128 .. 127 ; string = matriz empaquetada [ 1 .. 255 ] de char ;

Los tipos de datos de uso frecuente, como byte y string, ya están definidos en muchas implementaciones.

Normalmente, el sistema utiliza una palabra para almacenar los datos. Por ejemplo, el bytetipo puede almacenarse como un entero de máquina (de 32 bits, por ejemplo) en lugar de un valor de 8 bits . Pascal no incluye elementos de lenguaje que permitan definir los tipos de almacenamiento básicos con mayor precisión. Esta capacidad se incorporó en varias extensiones y lenguajes posteriores de Pascal, mientras que otros, como Modula-2 , ampliaron el conjunto integrado para abarcar la mayoría de los tipos de datos de máquina, como los enteros de 16 bits.

La packedpalabra clave indica al compilador que utilice el método de almacenamiento más eficiente para los tipos de datos estructurados: conjuntos, matrices y registros, en lugar de usar una palabra para cada elemento. El empaquetado puede ralentizar el acceso en máquinas que no ofrecen un acceso sencillo a partes de una palabra.

tipos de subrango

También se pueden crear subrangos de cualquier tipo de dato ordinal (cualquier tipo simple excepto real):

var x : 1 .. 10 ; y : 'a' .. 'z' ;

Tipos de conjuntos

A diferencia de otros lenguajes de programación de su época, Pascal admite un tipo de conjunto: [ 27 ]

var Set1 : conjunto de 1 .. 10 ; Set2 : conjunto de 'a' .. 'z' ;

Un conjunto es un concepto fundamental para las matemáticas modernas y puede utilizarse en muchos algoritmos. Esta característica es útil y puede ser más rápida que una construcción equivalente en un lenguaje que no admita conjuntos. Por ejemplo, para muchos compiladores de Pascal:

Si i está en [ 5 .. 10 ] entonces ...

Se ejecuta más rápido que:

Si ( i > 4 ) y ( i < 11 ) entonces ...

Los conjuntos de valores no contiguos pueden resultar especialmente útiles, tanto en términos de rendimiento como de legibilidad:

Si i está en [ 0 .. 3 , 7 , 9 , 12 .. 15 ] entonces ...

En estos ejemplos, que involucran conjuntos sobre dominios pequeños, el rendimiento mejorado generalmente se logra cuando el compilador representa las variables de conjunto como vectores de bits . Los operadores de conjunto se pueden implementar de manera eficiente como operaciones de código máquina bit a bit.

Tipos de registro

Un registro es una estructura que comprende cualquier número de elementos miembros llamados campos . Los campos se definen especificando un par identificador-tipo de datos delimitado por dos puntos; es posible anidar registros. La lista de campos finaliza con la endpalabra clave. Posteriormente, se puede acceder a los campos de una variable de registro insertando un punto ( .) entre el nombre del registro y los identificadores de campo. [ 28 ] Un ejemplo de un tipo de registro de Pascal:

tipo coche = registro Ancho : entero ; Largo : entero fin ;

Un registro también puede constar de variantes , que son constantes definidas por una lista entre paréntesis de declaraciones de campos. case ... ofSe utiliza una cláusula al final del registro para declarar la parte variable , que contiene el número de variantes del tipo especificado dentro de la cláusula. [ 29 ] Un ejemplo de un tipo de registro de variante:

tipo Forma = ( Círculo , Cuadrado , Triángulo ) ; Dimensiones = registro caso Figura : Forma de Círculo : ( Diámetro : real ) ; Cuadrado : ( Ancho : real ) ; Triángulo : ( Lado : real ; Ángulo1 , Ángulo2 : 0 .. 360 ) fin ;

Los registros variantes permiten que varios campos del registro se superpongan para ahorrar memoria.

Declaraciones de tipo

Los tipos se pueden definir a partir de otros tipos mediante declaraciones de tipo:

tipo x = entero ; y = x ; ...

Además, los tipos complejos se pueden construir a partir de tipos simples:

tipo a = matriz [ 1 .. 10 ] de entero ; b = registro x : entero ; y : carácter {punto y coma adicional no estrictamente necesario} fin ; c = archivo de a ;

Además, los tipos complejos se pueden construir a partir de otros tipos complejos de forma recursiva:

const Jack = 11 ; Queen = 12 ; King = 13 ; Ace = 14 ;tipo valorType = 2 .. As ; tipo traje = club , diamante , corazón , pica ;cardType = record suit : suitType ; value : valueType ; end ;deckType = array [ 1 .. 52 ] of cardType ;persona = registro apellido : matriz empaquetada [ 1..20 ] de caracteres ; edad : entero ; fin ;tabla = registrar manos : matriz [ 1 .. 3 ] de tipo de mazo ; jugadores : matriz [ 1 .. 4 ] de persona ; fin ;

Tipo de archivo

tipo a = archivo de entero ; b = registro x : entero ; y : carácter fin ; c = archivo de b ;

Como se muestra en el ejemplo anterior, los archivos Pascal son secuencias de componentes. Cada archivo tiene una variable de búfer que se denota por f^ . Los procedimientos get (para lectura) y put (para escritura) mueven la variable de búfer al siguiente elemento. Read se introduce de tal manera que read(f, x) es lo mismo que x  := f^; get(f); . Write se introduce de tal manera que write(f, x) es lo mismo que f^  := x; put(f); El tipo textestá predefinido como file of char. Si bien la variable de búfer podría usarse para inspeccionar el siguiente carácter que se va a usar (verificar si es un dígito antes de leer un entero), esto lleva a serios problemas con los programas interactivos en las primeras implementaciones, pero se resolvió más tarde con el concepto de "E/S perezosa", que espera hasta que se acceda realmente a la variable de búfer del archivo antes de realizar operaciones de archivo.

Tipos de puntero

Pascal admite punteros :

tipo pNode = ^ Nodo ; Nodo = registro a : entero ; b : carácter ; c : pNode fin ; var NodePtr : pNode ; IntPtr : ^ entero ;

Aquí, la variable NodePtr es un puntero al tipo de datos Node , un registro. Se pueden declarar punteros a tipos aún no definidos (en el ejemplo anterior, pNode es un puntero a un Node, pero Node aún no está definido cuando se define el tipo de puntero). Esta es una declaración anticipada , una excepción a la regla de que las cosas deben declararse antes de usarse.

Para crear un nuevo registro y asignar el valor 10 y el carácter A a los campos a y b del registro, e inicializar el puntero c al puntero nulo ("NIL" en Pascal), las instrucciones serían:

nuevo ( NodePtr ) ; ... NodePtr ^. a := 10 ; NodePtr ^. b := 'A' ; NodePtr ^. c := nil ; ...

Esto también podría hacerse utilizando la withsiguiente instrucción:

nuevo ( NodePtr ) ; ... con NodePtr ^ hacer inicio a := 10 ; b := 'A' ; c := nil fin ; ...

Dentro del ámbito de la instrucción with , a y b se refieren a los subcampos del puntero de registro NodePtr y no al nodo de registro ni al tipo de puntero pNode.

Las listas enlazadas , las pilas y las colas se pueden crear incluyendo un campo de tipo puntero (c) en el registro.

A diferencia de muchos lenguajes que incluyen punteros, Pascal solo permite que los punteros hagan referencia a variables creadas dinámicamente que son anónimas, y no permite que hagan referencia a variables estáticas o locales estándar. Los punteros también deben tener un tipo asociado, y un puntero a un tipo no es compatible con un puntero a otro tipo (por ejemplo, un puntero a un char no es compatible con un puntero a un integer). Esto ayuda a eliminar los problemas de seguridad de tipos inherentes con otras implementaciones de punteros, particularmente aquellas utilizadas para PL/I o C. También elimina algunos riesgos causados ​​por punteros colgantes , pero la capacidad de desasignar dinámicamente el espacio referenciado mediante la función dispose (que tiene el mismo efecto que la función de biblioteca free que se encuentra en C ) significa que el riesgo de punteros colgantes no se ha eliminado [ 30 ] como lo ha hecho en lenguajes como Java y C#, que proporcionan recolección de basura automática (pero que no eliminan el problema relacionado de fugas de memoria ).

Algunas de estas restricciones pueden eliminarse en dialectos más recientes.

Estructuras de control

Pascal es un lenguaje de programación estructurado , lo que significa que el flujo de control está estructurado en sentencias estándar , generalmente sin comandos " goto ".

mientras a <> b hacer WriteLn ( 'Esperando' ) ;if a > b then WriteLn ( 'Condición cumplida' ) {no se permite punto y coma antes de else} else WriteLn ( 'Condición no cumplida' ) ;para i := 1 a 10 hacer {sin punto y coma aquí ya que separaría la siguiente instrucción} WriteLn ( 'Iteración: ' , i ) ;repetir a := a + 1 hasta que a = 10 ;caso i de 0 : Escribir ( 'cero' ) ; 1 : Escribir ( 'uno' ) ; 2 : Escribir ( 'dos' ) ; 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 : Escribir ( '?' ) fin ;

Procedimientos y funciones

Pascal estructura los programas en procedimientos y funciones. Generalmente, un procedimiento se utiliza por sus efectos secundarios, mientras que una función se utiliza por su valor de retorno.

Programa Impresión ( salida ) ;var i : entero ;procedimiento ImprimirUnEntero ( j : entero ) ; inicio ... fin ;función triple ( x : entero ) : entero ; inicio triple := x * 3 fin ;inicio { programa principal } ... ImprimirUnEntero ( i ) ; ImprimirUnEntero ( triple ( i )) fin .

Los procedimientos y las funciones pueden anidarse a cualquier nivel de profundidad, y la estructura "programa" es el bloque lógico más externo.

Por defecto, los parámetros se pasan por valor. Si "var" precede al nombre de un parámetro, se pasa por referencia.

Cada procedimiento o función puede tener sus propias declaraciones de etiquetas goto, constantes, tipos, variables y otros procedimientos y funciones, las cuales deben estar en ese orden. Este requisito de ordenación se concibió originalmente para permitir una compilación eficiente en una sola pasada . Sin embargo, en algunos dialectos (como Delphi ) se ha flexibilizado el estricto requisito de ordenación de las secciones de declaración.

Punto y coma como separadores de oraciones

Pascal adoptó muchas características sintácticas del lenguaje ALGOL , incluyendo el uso del punto y coma como separador de sentencias. Esto contrasta con otros lenguajes, como PL/I y C , que utilizan el punto y coma como terminador de sentencia. No se necesita punto y coma antes de la endpalabra clave de una declaración de tipo de registro, un bloque o una sentencia case ; antes de la untilpalabra clave de una sentencia repeat; ni antes de la elsepalabra clave de una sentencia if .

La presencia de un punto y coma adicional no estaba permitida en las primeras versiones de Pascal. Sin embargo, la adición de sentencias vacías tipo ALGOL en el Informe Revisado de 1973 y los cambios posteriores al lenguaje en ISO 7185:1983 ahora permiten puntos y coma opcionales en la mayoría de estos casos. Un punto y coma todavía no está permitido inmediatamente antes de la elsepalabra clave en una sentencia ifelse , porque sigue a una sola sentencia, no a una secuencia de sentencias. En sentencias if anidadas, no se puede usar un punto y coma para evitar el problema del else colgante (donde el if interno no tiene un else, pero el if externo sí) terminando supuestamente el if anidado con un punto y coma; esto termina ambas cláusulas if. En su lugar, se debe usar un bloque begin... explícito. [ 31 ]end

Recursos

Compiladores e intérpretes

Existen varios compiladores e intérpretes de Pascal disponibles para uso general:

  • Delphi es el producto estrella de Embarcadero (anteriormente Borland/CodeGear) para el desarrollo rápido de aplicaciones (RAD). Utiliza el lenguaje Object Pascal (denominado "Delphi" por Borland), derivado de Pascal, para crear aplicaciones para Windows , macOS , iOS y Android . La compatibilidad con .NET , presente en las versiones D8, D2005, D2006 y D2007, se ha eliminado y sustituido por un nuevo lenguaje (Prism, ahora llamado Oxygene; véase más abajo) que no es totalmente retrocompatible. En los últimos años se ha añadido compatibilidad con Unicode y genéricos (D2009, D2010, Delphi XE).
  • Free Pascal es un compilador multiplataforma escrito en Object Pascal (y autoalojado ). Su objetivo es proporcionar un compilador potente y práctico, capaz tanto de compilar aplicaciones heredadas como de desarrollar otras nuevas. Se distribuye bajo la Licencia Pública General de GNU (GNU GPL), mientras que los paquetes y la biblioteca de tiempo de ejecución se distribuyen bajo una Licencia Pública General Reducida de GNU (GNU LGPL) modificada. Además de los modos de compatibilidad con Turbo Pascal , Delphi y Mac Pascal, cuenta con sus propios modos de sintaxis procedimental y orientada a objetos, con soporte para funciones extendidas como la sobrecarga de operadores . Es compatible con numerosas plataformas y sistemas operativos. Las versiones actuales también incluyen un modo ISO.
  • Turbo51 es un compilador Pascal gratuito para la familia de microcontroladores Intel 8051 , con sintaxis Turbo Pascal 7. 
  • Oxygene (anteriormente llamado Chrome ) es un compilador de Object Pascal para las plataformas .NET y Mono . Fue creado y es comercializado por RemObjects Software , y durante un tiempo fue vendido por Embarcadero como el compilador de back-end de Prism.
  • Kylix era descendiente de Delphi, con soporte para el sistema operativo Linux y una biblioteca de objetos mejorada. Ya no cuenta con soporte. El compilador y el IDE están disponibles para uso no comercial.
  • El compilador GNU Pascal (GPC) es el compilador de Pascal de la colección de compiladores GNU (GCC). El compilador está escrito en C, y la biblioteca de tiempo de ejecución, principalmente en Pascal. Se distribuye bajo la Licencia Pública General de GNU y funciona en numerosas plataformas y sistemas operativos. Admite los lenguajes estándar ANSI/ISO y ofrece soporte parcial para el dialecto Turbo Pascal. Una de las omisiones más notables es la ausencia de un tipo de cadena (corta) totalmente compatible con Turbo Pascal. El soporte para Borland Delphi y otras variantes del lenguaje es bastante limitado. Sin embargo, ofrece cierto soporte para Mac Pascal.
  • Virtual Pascal fue creado por Vitaly Miryanov en 1995 como un compilador nativo para OS/2 compatible con la sintaxis de Borland Pascal. Posteriormente, fPrint lo desarrolló comercialmente, añadiendo compatibilidad con Win32, y en el año 2000 se convirtió en software libre. Actualmente, compila para Win32, OS/2 y Linux, y es compatible principalmente con Borland Pascal y Delphi. Su desarrollo se canceló el 4 de abril de 2005.
  • El compilador Pascal-P4 es la base de muchos compiladores que implementan Pascal dentro de Pascal. Implementa un subconjunto de la versión completa de Pascal.
  • El compilador Pascal-P5 es una adaptación ISO 7185 (Pascal completo) de Pascal-P4.
  • El compilador Pascal-P6 es una versión extendida de la adaptación de Pascal-P5 según la especificación del lenguaje Pascaline.
  • Smart Mobile Studio es un compilador de Pascal a HTML5 / JavaScript .
  • Turbo Pascal fue el compilador dominante de Pascal para PC durante los años 80 y principios de los 90, popular por sus potentes extensiones y sus tiempos de compilación extremadamente cortos. Turbo Pascal estaba escrito de forma compacta y podía compilar, ejecutar y depurar directamente desde la memoria, sin necesidad de acceder al disco. Las unidades de disquete lentas eran comunes entre los programadores de la época, lo que acentuaba aún más la ventaja de velocidad de Turbo Pascal. Actualmente, las versiones anteriores de Turbo Pascal (hasta la 5.5) están disponibles para su descarga gratuita en el sitio web de Borland.
  • IP Pascal implementa el lenguaje "Pascaline" (llamado así por la calculadora de Pascal ), una versión altamente extendida de Pascal compatible con el Pascal original según la norma ISO 7185. Incluye módulos con control de espacios de nombres, como módulos de tareas paralelas con semáforos, objetos, matrices dinámicas de cualquier dimensión que se asignan en tiempo de ejecución, sobrecargas, anulaciones y muchas otras extensiones. IP Pascal cuenta con una biblioteca de portabilidad integrada, diseñada específicamente para el lenguaje Pascal. Por ejemplo, una aplicación estándar de salida de texto del Pascal original de la década de 1970 puede recompilarse para funcionar en una ventana e incluso incorporarle elementos gráficos.
  • Pascal-XT fue creado por Siemens para sus sistemas operativos de mainframe BS2000 y SINIX .
  • PocketStudio es un compilador de subconjuntos de Pascal y una herramienta de desarrollo rápido de aplicaciones (RAD) para Palm OS y procesadores MC68xxx, con algunas extensiones propias para facilitar la interfaz con la API de Palm OS . Se asemeja a Delphi y Lazarus, con un diseñador visual de formularios, un inspector de objetos y un editor de código fuente .
  • MIDletPascal: un compilador e IDE de Pascal que genera código bytecode Java pequeño y rápido, diseñado específicamente para crear software para dispositivos móviles.
  • Vector Pascal es un lenguaje para conjuntos de instrucciones SIMD como MMX y AMD 3D Now , compatible con todos los procesadores Intel y AMD, y con el Emotion Engine de PlayStation 2 de Sony .
  • Morfik Pascal permite el desarrollo de aplicaciones web escritas íntegramente en Object Pascal (tanto en el lado del servidor como en el del navegador).
  • WDSibyl: entorno de desarrollo visual y compilador Pascal para Win32 y OS/2.
  • PP Compiler, un compilador para Palm OS que se ejecuta directamente en el ordenador de mano.
  • El compilador Pascal CDC 6000 es el código fuente del primer compilador Pascal (CDC 6000).
  • Pascal-S [ 32 ]
  • AmigaPascal es un compilador Pascal gratuito para sistemas Amiga .
  • VSI Pascal para OpenVMS (anteriormente HP Pascal para OpenVMS, Compaq Pascal, DEC Pascal, VAX Pascal y originalmente VAX-11 Pascal [ 33 ] ) es un compilador de Pascal que se ejecuta en sistemas OpenVMS . [ 34 ] También era compatible con Tru64 . [ 35 ] [ 36 ] VSI Pascal para OpenVMS es compatible con ISO/IEC 7185:1990 Pascal, así como con algunas versiones de ISO/IEC 10206:1990 Extended Pascal, e incluye sus propias extensiones. [ 34 ] El front-end del compilador está implementado en BLISS . [ 37 ]
  • Stony Brook Pascal+ era un compilador optimizador de 16 bits (posteriormente de 32 bits) para DOS y OS/2, comercializado como un reemplazo directo de Turbo Pascal, pero que producía código que se ejecutaba al menos el doble de rápido.

Entornos de desarrollo integrados (IDE)

Bibliotecas

  • Librería WOL para crear aplicaciones con interfaz gráfica de usuario (GUI) utilizando el compilador Free Pascal.

Estándares

ISO/IEC 7185:1990 Pascal

En 1983, el lenguaje se estandarizó en la norma internacional IEC/ISO 7185 [ 38 ] y en varias normas locales específicas de cada país, incluidas la estadounidense ANSI/IEEE770X3.97-1983 e ISO 7185:1983. Estas dos normas se diferenciaban únicamente en que la norma ISO incluía una extensión de "nivel 1" para matrices conformes (una matriz cuyos límites no se conocen hasta el tiempo de ejecución), mientras que ANSI no permitía esta extensión al lenguaje original (versión de Wirth). En 1989, la ISO 7185 se revisó (ISO 7185:1990) para corregir varios errores y ambigüedades encontrados en el documento original.

La norma ISO 7185 se presentó como una aclaración del lenguaje de Wirth de 1974, tal como se detalla en el Manual de Usuario y el Informe [Jensen y Wirth], pero también destacó por añadir "Parámetros de Matriz Conformes" como nivel 1 al estándar, siendo el nivel 0 Pascal sin matrices conformes. Esta adición se realizó a petición de CAR Hoare y con la aprobación de Niklaus Wirth. La causa principal fue que Hoare quería crear una versión en Pascal de la Biblioteca de Algoritmos Numéricos (NAG) , que originalmente se había escrito en FORTRAN, y descubrió que no era posible hacerlo sin una extensión que permitiera parámetros de matriz de tamaño variable. Consideraciones similares motivaron la inclusión en la ISO 7185 de la funcionalidad para especificar los tipos de parámetros de los parámetros procedimentales y funcionales.

El propio Niklaus Wirth se refería al lenguaje de 1974 como "el estándar", por ejemplo, para diferenciarlo de las características específicas de la máquina del compilador CDC 6000. Este lenguaje fue documentado en The Pascal Report , [ 39 ] la segunda parte del "manual e informe de usuarios de Pascal".

En las grandes máquinas (mainframes y minicomputadoras) donde se originó Pascal, generalmente se seguían los estándares. En la IBM PC , no. En las IBM  PC, los estándares de Borland, Turbo Pascal y Delphi, son los que cuentan con mayor número de usuarios. Por lo tanto, suele ser importante comprender si una implementación particular corresponde al lenguaje Pascal original o a un dialecto de Borland.

Las  versiones del lenguaje para IBM PC comenzaron a diferir con la llegada de UCSD Pascal, una implementación interpretada que presentaba varias extensiones del lenguaje, además de algunas omisiones y cambios. Muchas características del lenguaje UCSD se conservan hasta hoy, incluso en el dialecto de Borland.

ISO/IEC 10206:1990 Pascal extendido

En 1990, se creó un estándar extendido de Pascal como ISO/IEC 10206, [ 40 ] que es idéntico en contenido técnico [ 41 ] a IEEE/ANSI 770X3.160-1989 [ 42 ] A partir de 2019, se planea el soporte de Pascal extendido en FreePascal Compiler. [ 43 ]

La característica clave de Extended Pascal es la modularidad y la compilación separada. Los archivos de código fuente de las aplicaciones de Extended Pascal se pueden separar en un "archivo de programa" y varios "archivos de módulo". Cada archivo de módulo tiene sus propias definiciones de tipo, constante, variable y procedimiento/función, y los programadores pueden cambiar el orden de estas áreas de "definición de entidades". Además, existen algunas áreas de definición específicas de módulo llamadas áreas de "inicialización" con la instrucción to begin do ...y áreas de "finalización" con la instrucción to end do ..., que pueden gestionar el estado inicial y la asignación de memoria de las entidades dentro del módulo. Al insertar import ...instrucciones entre las áreas de declaración y definición del módulo/programa, los módulos pueden compartir sus propias entidades con otros módulos (y programas).

Otras características importantes incluyen la vinculación de variables, colecciones de tipos similares (esquemas), funciones completas para cadenas de caracteres, compatibilidad con tipos de números complejos, otherwisepalabra clave para el flujo de bifurcación predeterminado en caselas instrucciones y evaluación booleana de cortocircuito.

Variaciones

La versión de Pascal de Niklaus Wirth, desarrollada en Zúrich, se publicó fuera de la ETH en dos formatos básicos: el código fuente del compilador CDC 6000 y un kit de adaptación llamado sistema Pascal-P. El compilador Pascal-P omitía varias características del lenguaje completo que no eran necesarias para su funcionamiento. Por ejemplo, se omitían los procedimientos y funciones utilizados como parámetros, los registros de variantes no discriminadas, el empaquetado, la liberación de memoria, las instrucciones goto interprocedimentales y otras características del compilador completo.

UCSD Pascal , bajo la dirección del profesor Kenneth Bowles , se basaba en el kit Pascal-P2 y, por consiguiente, compartía varias de las restricciones del lenguaje Pascal-P. Posteriormente, UCSD Pascal fue adoptado como Apple Pascal y se mantuvo vigente durante varias versiones. Si bien UCSD Pascal amplió el subconjunto Pascal del kit Pascal-P al reincorporar las construcciones estándar de Pascal, aún no constituía una instalación estándar completa de Pascal.

A principios de la década de 1990, Alan Burns y Geoff Davies desarrollaron Pascal-FC, una extensión de Pl/0 (del libro de Niklaus, Algorithms + Data Structures = Programs ). Se añadieron varias construcciones para utilizar Pascal-FC como herramienta didáctica para la programación concurrente (como semáforos, monitores, canales, invocación remota y recursos). Para demostrar la concurrencia, la salida del compilador (una especie de código P ) podía ejecutarse en una máquina virtual. Esta máquina virtual no solo simulaba un entorno normal y justo, sino que también podía simular condiciones extremas (modo injusto).

Compiladores Pascal tipo Borland

La versión Turbo Pascal de Borland , escrita por Anders Hejlsberg , se desarrolló en lenguaje ensamblador, independientemente de los compiladores UCSD y Zürich. Sin embargo, adoptó gran parte del mismo subconjunto y extensiones que el compilador UCSD. Esto probablemente se deba a que el sistema UCSD era el sistema Pascal más común y adecuado para desarrollar aplicaciones en los sistemas de microprocesadores con recursos limitados disponibles en aquel entonces.

La versión 3 de Turbo Pascal, empaquetada al vacío, y sus posteriores versiones, incluyendo Object Pascal de Borland , Delphi y lenguajes casi compatibles que no eran de Borland, se hicieron populares entre los programadores, incluidos los autores de software de prueba, por lo que la biblioteca SWAG de código Pascal incluye una gran cantidad de código escrito teniendo en cuenta versiones como Delphi.

Productos de software ( compiladores e IDE/ Desarrollo Rápido de Aplicaciones (RAD)) en esta categoría:

  • Turbo Pascal – "TURBO.EXE" hasta la versión 7, y Turbo Pascal para Windows ("TPW") y Turbo Pascal para Macintosh .
  • Pure Pascal y HiSPeed Pascal 2: Entorno de lenguaje Pascal para la gama de ordenadores Atari ST .
  • Borland Pascal 7 : una versión profesional de la línea Turbo Pascal, destinada tanto a DOS como a Windows.
  • Object Pascal : una extensión del lenguaje Pascal que fue desarrollada en Apple Computer por un equipo liderado por Larry Tesler en consulta con Niklaus Wirth , el inventor de Pascal; sus características se agregaron a Turbo Pascal de Borland para Macintosh y en 1989 a Turbo Pascal 5.5 para DOS.
  • Delphi – Object Pascal es esencialmente su lenguaje subyacente.
  • El compilador Free Pascal (FPC) adoptó el dialecto estándar de los programadores de Borland Pascal, Borland Turbo Pascal y, posteriormente, Delphi.
  • PascalABC.NET : un lenguaje de programación Pascal de nueva generación que incluye compilador e IDE.
  • Borland Kylix es un compilador e IDE que Borland vendía anteriormente, pero que posteriormente se descontinuó. Es una versión para Linux del entorno de desarrollo de software Borland Delphi y C++Builder .
  • Lazarus , similar a Kylix en su funcionamiento, es un IDE visual multiplataforma gratuito para RAD que utiliza el compilador Free Pascal, el cual admite dialectos de Object Pascal en distintos grados.
  • Virtual Pascal – VP2/1 es un compilador Pascal de 32 bits totalmente compatible con Borland Pascal y Borland Delphi para OS/2 y Windows 32 (con una versión para Linux "en desarrollo"). [ 44 ]
  • Sybil es un IDE y compilador de código abierto similar a Delphi; sus implementaciones incluyen:
    • WDSibyl [ 45 ] para Microsoft Windows y OS/2 , un entorno comercial compatible con Borland Pascal lanzado por una empresa llamada Speedsoft que más tarde se desarrolló en un entorno de desarrollo rápido de aplicaciones (RAD) similar a Delphi llamado Sybil y luego se liberó como código abierto bajo la GPL cuando esa empresa cerró;
    • Open Sybil, que es un proyecto en curso, una herramienta de código abierto para OS/2 y eCS que originalmente se basaba en las fuentes WDsybl Sibyl Portable Component Classes (SPCC) y Sibyl Visual Development Tool (SVDE) de Speedsoft, pero ahora su núcleo es IBM System Object Model (SOM), WPS y OpenDoc . [ 46 ]
  • ISO 8651-2:1988 Sistemas de procesamiento de información – Gráficos por computadora – Enlaces de lenguaje del sistema gráfico central (GKS) – Parte 2: Pascal

Recepción

Pascal generó una amplia variedad de reacciones en la comunidad informática, tanto críticas como elogiosas.

Críticas tempranas

La definición inicial del lenguaje de Wirth fue ampliamente criticada. En particular, Nico Habermann comentó en su "Comentarios críticos sobre el lenguaje de programación Pascal" (1973) que muchas de sus construcciones estaban mal definidas, especialmente para tipos de datos , rangos , estructuras y goto . [ 47 ] Más tarde, Brian Kernighan , quien popularizó el lenguaje C , expuso sus críticas a Pascal en 1981 en su artículo "Por qué Pascal no es mi lenguaje de programación favorito". [ 48 ] El problema más grave que describió Kernighan fue que los tamaños de los arreglos y las longitudes de las cadenas eran parte del tipo, por lo que no era posible escribir una función que aceptara arreglos de longitud variable o incluso cadenas como parámetros. Esto hacía inviable escribir, por ejemplo, una biblioteca de ordenación. Kernighan también criticó el orden impredecible de evaluación de las expresiones booleanas, el escaso soporte de la biblioteca y la falta de variables estáticas , y planteó una serie de problemas menores. Además, afirmó que el lenguaje no proporcionaba construcciones simples para "escapar" (ignorar conscientemente y a la fuerza) las restricciones y limitaciones. Quejas más generales de otras fuentes [ 30 ] [ 49 ] señalaron que el alcance de las declaraciones no estaba claramente definido en la definición original del lenguaje, lo que a veces tenía graves consecuencias al usar declaraciones anticipadas para definir tipos de puntero, o cuando las declaraciones de registro llevaban a la recursión mutua , o cuando un identificador podía o no haberse usado en una lista de enumeración. Otra dificultad era que, al igual que ALGOL 60 , el lenguaje no permitía que los procedimientos o funciones pasados ​​como parámetros predefinieran el tipo esperado de sus parámetros.

Su popularidad creció en las décadas de 1970 y 1980.

En las dos décadas posteriores a 1975, Pascal ganó cada vez más atención y se convirtió en un lenguaje de programación importante para plataformas importantes (incluidas Apple II, Apple III, Apple Lisa, sistemas Commodore, máquinas basadas en Z-80 e IBM PC) debido a la disponibilidad de UCSD Pascal y Turbo Pascal. [ 50 ]

A pesar de las críticas iniciales, Pascal continuó evolucionando, y la mayoría de los puntos de Kernighan no se aplican a las versiones del lenguaje que se mejoraron para ser adecuadas para el desarrollo de productos comerciales, como Turbo Pascal de Borland . Como predijo Kernighan en su artículo, la mayoría de las extensiones para solucionar estos problemas eran incompatibles entre compiladores. Sin embargo, desde principios de la década de 1990, la mayoría de las variantes parecen haberse condensado en dos categorías: ISO y tipo Borland. Extended Pascal aborda muchas de estas críticas iniciales. Admite cadenas de longitud variable, inicialización de variables, compilación separada, operadores booleanos de cortocircuito y otherwisecláusulas default ( ) para sentencias case. [ 51 ]

Algunos de los problemas derivados de las diferencias en las implementaciones de Pascal fueron resueltos parcialmente más tarde con la llegada de Free Pascal, que admite varios dialectos con directivas de modo. [ 52 ]

Notas

  1. En un número de Electronics de 1978, Wirth explicó por qué nombró el lenguaje en honor a Blaise Pascal: «En realidad, no soy capaz de comprender plenamente su filosofía ni de apreciar sus exaltaciones religiosas. Sin embargo, Pascal fue (quizás uno de) los primeros en inventar y construir un dispositivo que ahora clasificamos como una computadora digital». [ 4 ]

Véase también

Referencias

  1. "Acerca de los "Delegados" de Microsoft"" . Archivado del original el 27/06/2012. Analizamos detenidamente Delphi Object Pascal y creamos un prototipo funcional de referencias a métodos enlazados para comprender su interacción con el lenguaje de programación Java y sus API... Nuestra conclusión fue que las referencias a métodos enlazados son innecesarias y perjudiciales para el lenguaje. Esta decisión se tomó en consulta con Borland International, que tenía experiencia previa con referencias a métodos enlazados en Delphi Object Pascal .
  2. TechMetrix Research (1999). "Historia de Java" (PDF) . Informe de servidores de aplicaciones Java . Archivado del original (PDF) el 29/12/2010 . Consultado el 16/10/2009 . El proyecto siguió adelante bajo el nombre de "green" y el lenguaje se basó en un antiguo modelo de UCSD Pascal , lo que permite generar código interpretado.
  3. "Una conversación con James Gosling – ACM Queue" . Archivado del original el 16 de julio de 2015. Consultado el 11 de agosto de 2015 .
  4. Wirth, Niklaus (1978-12-21). Anderson, Kemp (ed.). "Obeisance to Pascal, inventor" (PDF) . Comentarios de los lectores. Electronics . Dan McMillan. pág. 6. ISSN 0013-5070 . Archivado (PDF) del original el 2024-05-20 . Recuperado el 2024-08-13 .  
  5. Wirth, Niklaus (2000). "El desarrollo de los lenguajes de programación procedimentales: contribuciones personales y perspectivas" . Lenguajes de programación modulares . Notas de clase en informática. Vol. 1897. págs. 1–10 . doi : 10.1007/10722581_1 . ISBN   978-3-540-67958-5.
  6. Wirth, N. (1971). "El lenguaje de programación Pascal". Acta Informatica . 1 (1): 35– 63. doi : 10.1007/BF00264291 . hdl : 20.500.11850/68712 .
  7. Wirth, N. (enero de 1996). «Recuerdos sobre el desarrollo de Pascal». Historia de los lenguajes de programación—II . págs. 97–120 . doi : 10.1145/234286.1057812 . ISBN  0-201-89502-1.
  8. Hertzfeld, Andy. " Folclore húngaro.org Archivado el 18-11-2015 en Wayback Machine : Macintosh Stories. Recuperado el 06-03-2012.
  9. https://www.computerhistory.org/atchm/adobe-photoshop-source-code/ Archivado el 7 de mayo de 2014 en Wayback Machine , Código fuente de Adobe Photoshop
  10. "Presentación de aplicaciones de RAD Studio" . 29/10/2021.
  11. tiobe.com Archivado el 15 de marzo de 2012 en Wayback Machine , Índice de la comunidad de programación de enero de 2011.
  12. "Software antiguo: Turbo Pascal v5.5" . Archivado del original el 24/11/2010 . Consultado el 17/05/2018 .
  13. Computadoras e informática. Una perspectiva personal. Archivado el 10 de mayo de 2017 en Wayback Machine por Niklaus Wirth.
  14. cbi.umn.edu , "Entrevista con John Brackett y Doug Ross", pág. 15, Instituto Charles Babbage, 2004
  15. Centro de Investigación de la Comisión Australiana de Energía Atómica, Lucas Heights, Informe de la División de Ciencia y Tecnología Nuclear, Investigación Divisional (PDF) . Organismo Internacional de Energía Atómica (OIEA) (Informe). 1977. pág. 22. 
  16. Jon Udell, El colapso de los Pascal orientados a objetos, BYTE, julio de 1989.
  17. M. I. Trofimov, ¿El fin de Pascal?, BYTE, marzo de 1990, pág. 36.
  18. Rall, LB (1987). "Una introducción al lenguaje de computación científica Pascal-SC". Computers . 14 : 53–69 . doi : 10.1016/0898-1221(87)90181-7 .
  19. ^ PI (29 de agosto de 1986). "Cadmus jetzt mit Kulisch-Arithmetik - Uni Karlsruhe gibt Pascal-Compiler nach München" [ Cadmus ahora viene con aritmética de Kulisch - La Universidad de Karlsruhe entrega el compilador Pascal a Munich ] . Computerwoche (en alemán). Múnich – Karlsruhe, Alemania: IDG Business Media GmbH . Archivado desde el original el 30 de mayo de 2016 . Consultado el 30 de mayo de 2016 .
  20. "Pascal-XSC: Pascal para computación científica extendida" . Archivado del original el 5 de enero de 2014.
  21. "XSC Software" . Archivado del original el 1 de noviembre de 2015. Consultado el 11 de agosto de 2015 .
  22. "Universitaet Wuppertal: Wissenschaftliches Rechnen / Softwaretechnologie" . Archivado desde el original el 6 de noviembre de 2015 . Consultado el 11 de agosto de 2015 .
  23. Bamberger, Lothar; Davenport, James H.; Fischer, Hans-Christoph; Kok, enero; Schumacher, Gunter; Ullrich, cristiano; Wallis, Peter JL; Invierno, Dik T.; Wolff von Gudenberg, Jürgen (1990). Wallis, Peter JL (ed.). Mejora de la programación en punto flotante (1ª ed.). Bath, Reino Unido: John Wiley & Sons Ltd. ISBN  0-471-92437-7.
  24. Michel Gien, "El sistema operativo SOL", en la Conferencia Usenix de verano de 1983, Toronto, ON, (julio de 1983), págs. 75-78
  25. "Descripción general de los sistemas operativos distribuidos CHORUS" (PDF) . Sistemas Chorus . 1991. Archivado del original (PDF) el 7 de febrero de 2015 vía cs.berkeley.edu.
  26. Pascal ISO 7185:1990 Archivado el 17/06/2012 en Wayback Machine 6.10
  27. Mandell, Steven L. (1987). Pascal Programming Today . West Publishing Company. ISBN 978-0-314-33935-5.
  28. Jensen y Wirth 1991 , págs. 65–69.
  29. Jensen y Wirth 1991 , págs. 69–73.
  30. 1 2 J. Welsh, WJ Sneeringer y CAR Hoare, "Ambigüedades e inseguridades en Pascal", Software: Practice and Experience 7 , págs. 685–696 (1977)
  31. Pascal , Nell Dale y Chip Weems, "Dangling Else", págs. 160-161. Archivado el 18 de marzo de 2017 en Wayback Machine.
  32. "Pascal-S: Un subconjunto y su implementación", N. Wirth en Pascal – El lenguaje y su implementación, por DW Barron, Wiley 1979.
  33. "Guía del usuario de VAX-11 Pascal V1.0" (PDF) .
  34. 1 2 "Descripción del producto de software VSI Pascal para OpenVMS" (PDF) . VSI. 2017. Archivado del original (PDF) el 18 de abril de 2021. Recuperado el 7 de febrero de 2022 .
  35. "Entrevista con un arquitecto de Pascal - Compaq Pascal" . Archivado del original el 19 de octubre de 2021. Consultado el 28 de mayo de 2022 .
  36. "Compaq Pascal Versión 5.8 para Tru64 UNIX Software Product Description" . Archivado del original el 25/07/2020 . Consultado el 28/05/2022 .
  37. "Entrevista a John Reagan de VSI sobre GEM vs. LLVM para X86/64" . eCube Systems . 12 de marzo de 2019. Archivado del original el 12 de agosto de 2020. Consultado el 7 de febrero de 2022 .
  38. ISO/IEC 7185:1990 Pascal (PDF) . Archivado del original (PDF) el 27 de enero de 2016. Consultado el 16 de septiembre de 2014 .
  39. Wirth, Niklaus (julio de 1973). El lenguaje de programación Pascal (Informe revisado) . ETH Zúrich. doi : 10.3929/ethz-a-000814158 .
  40. Pascal extendido: ISO/IEC 10206:1990 . Archivado del original el 27 de marzo de 2016. Consultado el 16 de septiembre de 2014 .
  41. "Estándares de lenguaje: Pascal, Pascal extendido, Fuerten" . Archivado del original el 14 de julio de 2014. Consultado el 16 de septiembre de 2014 .
  42. Estándar IEEE/ANSI para el lenguaje de programación Extended Pascal . 1990. doi : 10.1109/IEEESTD.1990.101061 . ISBN 978-0-7381-4247-0.
  43. "Pascal extendido - Wiki de Free Pascal" . wiki.freepascal.org .
  44. "Virtual Pascal para OS/2" . Archivado del original el 30 de agosto de 2011. Consultado el 3 de abril de 2016 .
  45. Wolfgang (15 de octubre de 2020). "WDSibyl: Entorno de desarrollo visual" . WDSibyl.org . Archivado del original el 12 de febrero de 2020. Consultado el 20 de abril de 2020 .
  46. "netlabs.org – Proyecto: Open Sibyl" . Archivado del original el 4 de marzo de 2016. Consultado el 3 de abril de 2016 .
  47. Habermann, AN (1973). "Comentarios críticos sobre el lenguaje de programación Pascal" . Acta Informatica . 3 (1): 47– 57. doi : 10.1007/bf00288652 . ISSN 0001-5903 . ( Texto completo del informe técnico )
  48. Brian W. Kernighan (1981). "Por qué Pascal no es mi lenguaje de programación favorito" . Archivado el 28 de abril de 2009 en Wayback Machine.
  49. Lecarme, O.; Desjardins, P. (1975). "Más comentarios sobre el lenguaje de programación Pascal". Acta Informatica . 4 (3): 231– 243. doi : 10.1007/BF00288728 .
  50. Crespo, Diego. "Pascal: El idioma que casi conquistó el mundo, parte 1" . www.deusinmachina.net . Consultado el 4 de enero de 2025 .
  51. "Pascal extendido" . Archivado del original el 18 de octubre de 2015. Consultado el 17 de octubre de 2015 .
  52. Crespo, Diego. "Pascal: El idioma que casi conquistó el mundo, parte 2" . www.deusinmachina.net . Consultado el 4 de enero de 2025 .

Lecturas adicionales

  • Wirth, Niklaus (1971). "El lenguaje de programación Pascal". Acta Informatica . 1 : 35–63 . doi : 10.1007/BF00264291 .
  • Dahl, Ole-Johan ; Dijkstra, Edsger W .; Hoare, CAR (1972). «Notas sobre la estructuración de datos». En Hoare, CAR (ed.). Programación estructurada . Academic Press . pp. 83–174 . ISBN  0-12-200550-3.
  • Hoare, CAR; Wirth, Niklaus (1973). "Una definición axiomática del lenguaje de programación Pascal". Acta Informatica . 2 : 335–355 . doi : 10.1007/BF00289504 . hdl : 20.500.11850/68663 .
  • Wirth, Niklaus (1975). Algoritmos + Estructuras de datos = Programas . Prentice-Hall . ISBN 0-13-022418-9.
  • Wirth, Niklaus (junio de 1975). "Una evaluación del lenguaje de programación Pascal" . ACM SIGPLAN Notices . 10 (6): 23– 30. doi : 10.1145/390016.808421 .
  • Grogono, Peter (1980). Programación en Pascal (  Edición revisada). Addison-Wesley . ISBN 0-201-02775-5.
  • Wasserman, Anthony I. (1980). Tutorial – Diseño de lenguajes de programación . IEEE Computer Society Press . ISBN 0-818-60312-7.
  • Barron, DW (1981). Pascal: El lenguaje y su implementación . John Wiley . ISBN 0-471-27835-1.
  • Forsyth, Richard S. (1982). Pascal en el trabajo y el ocio . Chapman and Hall . ISBN 0-412-23370-3.
  • Jensen, Kathleen; Wirth, Niklaus (1991). Pascal - Manual de usuario e informe (Cuarta  ed.). Springer-Verlag . ISBN 0-387-97649-3Archivado del original el 14 de marzo de 2005. Consultado el 1 de diciembre de 2017 .
  • Wirth, Niklaus (marzo de 1993). "Recuerdos sobre el desarrollo de Pascal" . ACM SIGPLAN Notices . 28 (3): 333– 342. doi : 10.1145/155360.155378 .
  • Broy, Manfred ; Denert, Ernst (2002). «Pascal y sus sucesores» . En Wirth, Niklaus (ed.). Pioneros del software: Contribuciones a la ingeniería de software . Springer-Verlag. ISBN 3-540-43081-4.