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 las buenas prácticas de programación utilizando programación estructurada y estructuración de datos . Recibe su nombre en honor al matemático, filósofo y físico francés Blaise Pascal .
Paradigma | |
---|---|
Familia | Wirth Pascal |
Diseñada por | Niklaus Wirth |
Apareció por primera vez | 1970 |
Disciplina de mecanografía | |
Alcance | Léxico |
Extensiones de nombre de archivo | .pp , .pas ,.inc |
Implementaciones importantes | |
Dialectos | |
Influenciado por | |
Influenciado | |
|
Basado en el libro de Wirth, Algoritmos + Estructuras de datos = Programas , Pascal se desarrolló siguiendo el patrón del lenguaje ALGOL 60 . Wirth estaba involucrado en el proceso de mejorar el idioma como parte de los ALGOL X esfuerzos y propuso una versión llamada ALGOL W . Esto no fue aceptado y el proceso de ALGOL X se empantanó. En 1968, Wirth decidió abandonar el proceso ALGOL X y mejorar aún más ALGOL W, lanzándolo como Pascal en 1970.
Además de los escalares y matrices de ALGOL , Pascal permitió definir tipos de datos complejos y construir estructuras de datos dinámicas y recursivas como listas , árboles y gráficos . Pascal tiene un tipo fuerte en todos los objetos, lo que significa que un tipo de datos no se puede convertir o interpretar como otro sin conversiones explícitas. A diferencia de C (y la mayoría de los lenguajes de la familia C ), Pascal permite definiciones de procedimientos anidados a cualquier nivel de profundidad, y también permite la mayoría de los tipos de definiciones y declaraciones dentro de subrutinas (procedimientos y funciones). Por tanto, un programa es sintácticamente similar a un solo 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 mucho éxito en la década de 1970, sobre todo en el floreciente mercado de las minicomputadoras . Los compiladores también estuvieron disponibles para muchas microcomputadoras cuando el campo surgió a fines de la década de 1970. Se usó ampliamente como lenguaje de enseñanza en cursos de programación de nivel universitario en la década de 1980, y también se usó en entornos de producción para escribir software comercial durante el mismo período. Fue reemplazado por el lenguaje de programación C a fines de la década de 1980 y principios de la de 1990 cuando los sistemas basados en UNIX se hicieron populares, 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 fue utilizado por Apple Computer y Borland a fines de la década de 1980 y luego se convirtió en Delphi en la plataforma Microsoft Windows . Las extensiones a los conceptos de Pascal llevaron a los lenguajes Modula-2 y Oberon .
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 funciones para la programación estructurada que siguen siendo comunes en los lenguajes hasta el día de hoy.
Poco después de su introducción, en 1962 Wirth comenzó a trabajar en su disertación con Helmut Weber sobre el lenguaje de programación Euler . Euler se basó en la sintaxis de ALGOL y en muchos conceptos, pero no fue un derivado. Su objetivo principal era agregar listas y tipos dinámicos, lo que le permitía usarlo en roles similares a Lisp . El idioma se publicó en 1965.
Para entonces, se habían identificado varios problemas en ALGOL, en particular la falta de un sistema de cuerdas estandarizado . El grupo encargado de mantener el lenguaje había comenzado el proceso de ALGOL X para identificar mejoras, solicitando presentaciones. Wirth y Tony Hoare presentaron un conjunto conservador de modificaciones para agregar cadenas y limpiar parte de la sintaxis. Estos fueron considerados demasiado poco importante para el uso de la pena como el nuevo ALGOL estándar, por lo Wirth escribió un compilador para el lenguaje, que llegó a ser nombrado ALGOL W .
Los esfuerzos de ALGOL X continuarían para elegir un lenguaje mucho más complejo, ALGOL 68 . La complejidad de este lenguaje condujo a una dificultad considerable para producir compiladores de alto rendimiento y no se usó ampliamente en la industria. Esto dejó una oportunidad para nuevos idiomas.
Pascal
Pascal fue influenciado por los esfuerzos de ALGOL W, con los objetivos explícitos de producir un lenguaje que fuera eficiente tanto en el compilador como en el tiempo de ejecución, permitiendo el desarrollo de programas bien estructurados y siendo útil para enseñar a los estudiantes programación estructurada . [4] Una generación de estudiantes utilizó Pascal como lenguaje introductorio en los cursos de pregrado.
Uno de los primeros éxitos del lenguaje fue la introducción de UCSD Pascal , una versión que se ejecutaba en un sistema operativo personalizado que podía trasladarse a diferentes plataformas. Una plataforma clave fue Apple II , donde tuvo un uso generalizado. Esto llevó a Pascal a convertirse en el principal lenguaje de alto nivel utilizado para el desarrollo en Apple Lisa y, más tarde, en Macintosh . Partes del sistema operativo original de Macintosh se tradujeron a mano al lenguaje ensamblador Motorola 68000 a partir del código fuente de Pascal . [5]
El sistema de composición tipográfica TeX de Donald E. Knuth fue escrito en WEB , el sistema original de programación alfabetizada , basado en DEC PDP-10 Pascal. Las aplicaciones comerciales exitosas como Adobe Photoshop [6] se escribieron en el Workshop Pascal del programador de Macintosh , mientras que las aplicaciones como Total Commander , Skype [ cita requerida ] 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.
Las variantes de Pascal también se han utilizado para todo, desde proyectos de investigación hasta juegos de PC y sistemas integrados . Existen compiladores de Pascal más nuevos que se utilizan ampliamente. [7]
Objeto Pascal
Durante el trabajo en Lisa, Larry Tesler comenzó a mantener correspondencia con Wirth sobre la idea de agregar extensiones orientadas a objetos al lenguaje. Esto llevó inicialmente a Clascal , introducido en 1983. A medida que el programa Lisa se desvaneció y fue reemplazado por Macintosh, se creó una versión adicional con el nombre de Object Pascal . Esto se introdujo en Mac en 1985 como parte del marco de la aplicación MacApp y se convirtió en el principal lenguaje de desarrollo de Apple a principios de la década de 1990.
Las extensiones Object Pascal se agregaron a Turbo Pascal con el lanzamiento de la versión 5.5 en 1989. [8] A lo largo de los años, Object Pascal se convirtió en la base del sistema Delphi para Microsoft Windows , que todavía se usa para desarrollar aplicaciones de Windows y puede cruzar -compilar código en otros sistemas. Free Pascal es una alternativa multiplataforma de código abierto con su propio IDE gráfico llamado Lazarus .
Implementaciones
Primeros compiladores de Pascal
El primer compilador de Pascal se diseñó en Zúrich para la familia de ordenadores 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 de Max Engeli) y luego se tradujo a mano (por R. Schild) al propio Pascal para el arranque. [9] Estaba operativo a mediados de 1970. Desde entonces, muchos compiladores de Pascal han sido autohospedados de manera similar , es decir, el compilador está escrito en Pascal, y el compilador generalmente es capaz de recompilarse a sí mismo cuando se agregan nuevas características al lenguaje, o cuando el compilador se va a portar a un nuevo ambiente. El compilador GNU Pascal es una excepción notable, ya que está escrito en C.
El primer puerto exitoso del compilador CDC Pascal a otro mainframe fue completado por Welsh y Quinn en la Queen's University of Belfast (QUB) en 1972. El objetivo era la serie International Computers Limited (ICL) 1900 . Este compilador, a su vez, fue el padre del compilador Pascal para la minicomputadora Multum Information Computer Systems (ICS) . El puerto Multum fue desarrollado, con miras a utilizar Pascal como lenguaje de programación de sistemas, por Findlay, Cupples, Cavouras y Davis, que trabajan en el Departamento de Ciencias de la Computación de la Universidad de Glasgow . Se cree que Multum Pascal, que se completó en el verano de 1973, puede haber sido la primera implementación de 16 bits.
Welsh et al. Completaron un compilador completamente nuevo. en QUB en 1977. Ofreció una función de diagnóstico del lenguaje fuente (que incorpora perfiles, rastreo y volcados post mortem formateados con reconocimiento de tipos) que fue implementada por Findlay y Watt en la Universidad de Glasgow. Esta implementación fue trasladada en 1980 a la serie ICL 2900 por un equipo con base en la Universidad de Southampton y la Universidad de Glasgow. La implementación del modelo estándar Pascal también se basó en este compilador, que fue adaptado por Welsh y Hay en la Universidad de Manchester en 1984, para verificar rigurosamente la conformidad con el estándar BSI 6192 / ISO 7185 y generar código para una máquina abstracta portátil.
El primer compilador de Pascal escrito en Norteamérica se construyó en la Universidad de Illinois bajo la dirección de Donald B. Gillies para el PDP-11 y generó código de máquina nativo.
El sistema Pascal-P
Para propagar el lenguaje rápidamente, se creó un kit de adaptación del compilador en Zúrich 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 fue el último en llegar desde Zürich. La versión denominada Pascal-P1 se acuñó después del hecho de las muchas 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ó más tarde para convertirse en Pascal-P3, con un código intermedio compatible con Pascal-P2 y Pascal-P4, que no era compatible con versiones anteriores.
El compilador-intérprete de Pascal-P4 aún se puede ejecutar y compilar en sistemas compatibles con Pascal original. 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 ISO 7185.
UCSD Pascal derivó de Pascal-P2, donde Kenneth Bowles lo usó para crear el UCSD p-System interpretativo . Fue uno de los tres sistemas operativos disponibles en el lanzamiento de la computadora personal IBM original . [10] UCSD Pascal utiliza un código intermedio basado en valores de byte, y por lo tanto fue uno de los primeros bytecode compiladores . Pascal-P1 a Pascal-P4 no lo fue, sino que se basó en la longitud de palabra de 60 bits de CDC 6600.
Un compilador basado en el compilador de Pascal-P5, que creó binarios nativos archivos objeto , fue lanzado para el IBM System / 370 computadora central por la Comisión de Energía Atómica de Australia ; fue nombrado Compilador AAEC Pascal 8000 por la abreviatura del nombre de la comisión. [11]
Object Pascal y Turbo Pascal
Apple Computer creó su propia Lisa Pascal para Lisa Workshop en 1982, y portó el compilador a Apple Macintosh y MPW en 1985. En 1985, Larry Tesler , en consulta con Niklaus Wirth, definió Object Pascal y estas extensiones se incorporaron tanto en Lisa. Compiladores Pascal y Mac Pascal.
En la década de 1980, Anders Hejlsberg escribió el compilador Blue Label Pascal para Nascom -2. Una reimplementación de este compilador para IBM PC se comercializó con los nombres Compas Pascal y PolyPascal antes de que Borland lo adquiriera y lo rebautizara como Turbo Pascal .
Turbo Pascal se hizo muy popular gracias a una estrategia de precios agresiva, al tener uno de los primeros IDE de pantalla completa y un tiempo de respuesta muy rápido (solo unos segundos para compilar, vincular y ejecutar). Fue escrito y altamente optimizado completamente en lenguaje ensamblador , haciéndolo más pequeño y más 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 para PC de Turbo Pascal para la versión 5.5. Al mismo tiempo, Microsoft también implementó el compilador Object Pascal. [12] [13] Turbo Pascal 5.5 tuvo una gran influencia en la comunidad de Pascal, que comenzó a concentrarse principalmente en IBM PC a fines de la década de 1980. Muchos aficionados a la PC en busca de un reemplazo estructurado para BASIC utilizaron 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 incluyen terminadas en cero, cuerdas , la aritmética de punteros , punteros de función , un operador de dirección, y no seguros typecasts .
Turbo Pascal y otros derivados con estructuras de unidades o módulos son lenguajes de programación modulares . Sin embargo, no proporciona un concepto de módulo anidado o una importación y exportación calificada de símbolos específicos.
Otras variantes
Super Pascal es una variante que agregó etiquetas no numéricas, una declaración de retorno y expresiones como nombres de tipos.
TMT Pascal fue el primer compilador compatible con Borland para el modo protegido DOS de 32 bits , OS / 2 y sistemas operativos Win32 . El lenguaje TMT Pascal fue el primero en permitir la sobrecarga de funciones y operadores .
Las universidades de Wisconsin-Madison, Zürich , Karlsruhe y Wuppertal desarrollaron los compiladores Pascal-SC [14] [15] y Pascal-XSC [16] [17] [18] ( Extensions for Scientific Computation ), destinados a programar cálculos numéricos . El desarrollo de Pascal-SC comenzó en 1978 y admitió el nivel 0 de ISO 7185 Pascal, pero el soporte de nivel 2 se agregó en una etapa posterior. [19] Pascal-SC originalmente apuntó al procesador Z80 , pero luego fue reescrito 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 un código fuente C intermedio que luego se compila en 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 nivel-1 estándar (con límites de matriz parametrizados) pero la definición permitía palabras clave alternativas e identificadores predefinidos en francés y el idioma incluía algunas extensiones para facilitar la programación del sistema (por ejemplo, un equivalente a lseek). [20] El equipo de Sol más tarde pasó al proyecto ChorusOS para diseñar un sistema operativo distribuido. [21]
IP Pascal fue una implementación del lenguaje de programación Pascal usando Micropolis DOS, pero se movió rápidamente a CP / M-80 ejecutándose en el Z80. Se trasladó a los tipos de máquina 80386 en 1994 y existe hoy como implementaciones de Windows / XP y Linux. En 2008, el sistema se llevó a un nuevo nivel y el lenguaje resultante se denominó "Pascaline" (después de 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 tipo que C # . Es la única implementación de este tipo que también es compatible con la implementación original de Pascal, que está estandarizada como ISO 7185.
Construcciones del lenguaje
Pascal, en su forma original, es un puro lenguaje de procedimientos e incluye la matriz tradicional de ALGOL estructuras de control -como con palabras reservadas, tales como if
, then
, else
, while
, for
, y case
, que van en una sola declaración o un begin
- end
bloque de declaraciones. 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 de procedimiento. Tales construcciones se en parte heredadas o inspirados de Simula 67, ALGOL 68 , Niklaus Wirth propio 's ALGOL W y sugerencias por CAR Hoare .
Los programas Pascal comienzan con la program
palabra clave con una lista de descriptores de archivos externos como parámetros [22] (no es necesario en Turbo Pascal, etc.); luego sigue el bloque principal entre corchetes begin
y end
palabras clave. Los puntos y comas separan las declaraciones y el punto final (es decir, un punto) finaliza todo el programa (o unidad ). Las mayúsculas y minúsculas se ignoran en la fuente Pascal.
Aquí hay un ejemplo del código fuente en uso para un muy simple "¡Hola, mundo!" programa :
programa HelloWorld ( salida ) ; begin Write ( '¡Hola, mundo!' ) {No ";" se requiere después de la última declaración de un bloque - agregar una agrega una "declaración nula" al programa, que es ignorada por el compilador.} end .
Tipos de datos
Un tipo en Pascal, y en varios otros lenguajes de programación populares, define una variable de tal manera que define un rango de valores que la variable es capaz de almacenar, y también define un conjunto de operaciones que se pueden realizar en variables de ese tipo. Los tipos predefinidos son:
Tipo de datos | Tipo de valores que la variable es capaz de almacenar |
---|---|
entero | números enteros (enteros) |
verdadero | Números de punto flotante |
booleano | los valores Verdadero o Falso |
carbonizarse | un solo carácter de un juego de caracteres ordenado |
colocar | equivalente a una matriz empaquetada de valores booleanos |
formación | un grupo contable de cualquiera de los tipos de datos anteriores |
cuerda | una secuencia o "cadena" de caracteres (las cadenas no formaban parte del idioma original; se podía crear una "matriz de caracteres" y acceder a los caracteres individuales como una matriz, pero hacer referencia a ella directamente como una cadena no era posible hasta dialectos posteriores de Pascal agregó esta funcionalidad). |
El rango de valores permitido para cada uno (excepto booleanos) está definido por la implementación. Se proporcionan funciones para algunas conversiones de datos. Para la conversión de real
a integer
, están disponibles las siguientes funciones: round
(que se redondea a un número entero utilizando el redondeo bancario ) y trunc
(se redondea hacia cero).
El programador tiene la libertad de definir otros tipos de datos de uso común (por ejemplo, bytes, cadenas, etc.) en términos de los tipos predefinidos utilizando la función de declaración de tipos de Pascal, por ejemplo
tipo byte = 0 .. 255 ; byte_firmado = - 128 .. 127 ; cadena = embalado array [ 1 .. 255 ] de carbón ;
(Los tipos de uso frecuente como byte y string ya están definidos en muchas implementaciones).
Tipos de subrango
También se pueden hacer subrangos de cualquier tipo de datos ordinal (cualquier tipo simple excepto real):
var x : 1 .. 10 ; y : 'a' .. 'z' ;
Establecer tipos
A diferencia de otros lenguajes de programación de su época, Pascal admite un tipo de conjunto: [23]
var Set1 : conjunto de 1 .. 10 ; Conjunto2 : conjunto de 'a' .. 'z' ;
Un conjunto es un concepto fundamental para las matemáticas modernas y pueden usarse 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 admite conjuntos. Por ejemplo, para muchos compiladores de Pascal:
si yo 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 ser particularmente útiles, tanto en términos de rendimiento como de legibilidad:
si yo en [ 0 .. 3 , 7 , 9 , 12 .. 15 ] entonces ...
Para estos ejemplos, que involucran conjuntos en dominios pequeños, el rendimiento mejorado generalmente se logra mediante el compilador que representa las variables de conjunto como vectores de bits . Los operadores establecidos se pueden implementar de manera eficiente como operaciones de código de máquina bit a bit.
Tipos de unión
En Pascal, hay dos formas de crear sindicatos. Una es la forma estándar a través de un registro variante. El segundo es un medio no estándar de declarar una variable como absoluta, lo que significa que se coloca en la misma ubicación de memoria que otra variable o en una dirección absoluta. Si bien todos los compiladores de Pascal admiten registros variantes, solo algunos admiten variables absolutas.
Para los propósitos de este ejemplo, los siguientes son todos los tipos de números enteros: un byte es de 8 bits, una palabra es de 16 bits y un número entero es de 32 bits.
El siguiente ejemplo muestra la forma absoluta no estándar:
VAR A : Entero ; B : Matriz [ 1 .. 4 ] de Byte absoluto A ; C : entero absoluto 0 ;
En el primer ejemplo, cada uno de los elementos de la matriz B se asigna a uno de los bytes específicos de la variable A. En el segundo ejemplo, la variable C se asigna a la dirección exacta de la máquina 0.
En el siguiente ejemplo, un registro tiene variantes, algunas de las cuales comparten la misma ubicación que otras:
TYPE TSystemTime = año de registro , mes , día de la semana , día : palabra ; Hora , minuto , segundo , milisegundo : palabra ; terminar ; TGender = ( Masculino , Femenino , TransFemale , TransMale , Otro ) ; TPerson = REGISTRO Nombre , Apellido : Cadena ; Fecha de nacimiento : TSystemTime ; Dependientes : Entero ; HourlyRate : Moneda ; Género del caso : TGender of Female , TransMale : ( isPregnant : Boolean ; DateDue : TSystemTime ) ; Masculino , TransFemale : ( HasPartner , isPartnerExpecting : Boolean ; PartnerDate : TSystemTime ) ; FIN ;
Declaraciones de tipo
Los tipos se pueden definir a partir de otros tipos mediante declaraciones de tipos:
tipo x = entero ; y = x ; ...
Además, los tipos complejos se pueden construir a partir de tipos simples:
escriba a = matriz [ 1 .. 10 ] de entero ; b = registro x : número entero ; y : char {punto y coma adicional no estrictamente necesario} end ; c = archivo de a ;
Tipo de archivo
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 con f ^ . Los procedimientos get (para leer) y put (para escribir) mueven la variable de búfer al siguiente elemento. Read se introduce de manera que read (f, x) es lo mismo que x: = f ^; obtener (f); . La escritura se introduce de manera que write (f, x) es lo mismo que f ^: = x; poner (f); El tipo text
está predefinido como archivo de char. Si bien la variable de búfer podría usarse para inspeccionar el siguiente carácter que se usará (verifique un dígito antes de leer un número entero), esto conduce a serios problemas con los programas interactivos en implementaciones tempranas, pero se resolvió más tarde con la "E / S perezosa" concepto.
En Jensen & Wirth Pascal, las cadenas se representan como matrices empaquetadas de caracteres; por lo tanto, tienen una longitud fija y suelen estar acolchados con espacio.
Tipos de puntero
Pascal admite el uso de punteros :
escriba pNode = ^ Nodo ; Nodo = registro a : entero ; b : char ; c : pNode end ; var NodePtr : pNode ; IntPtr : ^ entero ;
Aquí la variable NodePtr es un puntero al tipo de datos Node , un registro. Los punteros se pueden utilizar antes de declararlos. Esta es una declaración hacia adelante , una excepción a la regla de que las cosas deben declararse antes de que se utilicen.
Para crear un nuevo registro y asignar el valor 10 y el carácter A para los campos una y b en el registro, y para inicializar el puntero c al puntero nulo ( "nulo" en Pascal), los estados pueden ser:
Nuevo ( NodePtr ) ; ... NodePtr ^. a : = 10 ; NodePtr ^. b : = 'A' ; NodePtr ^. c : = NULO ; ...
Esto también se puede hacer usando la with
declaración, de la siguiente manera:
Nuevo ( NodePtr ) ; ... con NodoPtr ^ hacer comenzar un : = 10 ; b : = 'A' ; c : = NIL final ; ...
Dentro del alcance de la instrucción with , ayb se refieren a los subcampos del puntero de registro NodePtr y no al nodo de registro o al tipo de puntero pNode.
Se pueden crear listas , pilas y colas vinculadas al incluir un campo de tipo de puntero (c) en el registro.
A diferencia de muchos lenguajes que cuentan con punteros, Pascal solo permite que los punteros hagan referencia a variables creadas dinámicamente que son anónimas y no les permite hacer referencia a variables estándar estáticas o locales. 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 carácter no es compatible con un puntero a un número entero). Esto ayuda a eliminar los problemas de seguridad inherentes tipo con otras implementaciones de puntero, especialmente los utilizados 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 el uso de la función de disposición (que tiene el mismo efecto que la función de biblioteca libre que se encuentra en C ) significa que el riesgo de punteros colgantes no se ha eliminado por completo [24] como lo ha hecho en lenguajes como Java y C #, que proporcionan recolección automática de basura (pero que no eliminan por completo el problema relacionado de pérdidas de memoria ).
Algunas de estas restricciones se pueden eliminar en dialectos más nuevos.
Estructuras de Control
Pascal es un lenguaje de programación estructurado , lo que significa que el flujo de control está estructurado en declaraciones estándar , generalmente sin comandos ' goto '.
mientras que a <> b hacer WriteLn ( 'Esperando' ) ;si a > b entonces WriteLn ( 'Condición cumplida' ) {no se permite el punto y coma antes de lo demás} si no WriteLn ( 'Condición no cumplida' ) ;para i : = 1 a 10 do {hay punto y coma aquí, ya que separaría la siguiente instrucción} WriteLn ( 'La iteración:' , i ) ;repita a : = a + 1 hasta que a = 10 ;caso i de 0 : Write ( 'cero' ) ; 1 : Escribe ( 'uno' ) ; 2 : Escriba ( 'dos' ) ; 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 : Escriba ( '?' ) Final ;
Procedimientos y funciones
Pascal estructura los programas en procedimientos y funciones. Generalmente, un procedimiento se usa por sus efectos secundarios, mientras que una función se usa para su valor de retorno.
Programa de impresión ;var i : número entero ;procedimiento PrintAnInteger ( j : integer ) ; comenzar ... terminar ;función triple ( const x : integer ) : integer ; comenzar triple : = x * 3 ; terminar ;comenzar {programa principal} ... PrintAnInteger ( i ) ; PrintAnInteger ( triple ( i )) ; fin .
Los procedimientos y funciones se pueden anidar a cualquier profundidad, y la construcción 'programa' es el bloque lógico más externo.
De forma predeterminada, 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, que deben estar todos en ese orden. Este requisito de ordenación estaba originalmente destinado a permitir una compilación eficiente de un solo paso . Sin embargo, en algunos dialectos (como Delphi ) se ha relajado el estricto requisito de ordenación de las secciones de declaración.
Punto y coma como separadores de instrucciones
Pascal adoptó muchas características de sintaxis del lenguaje ALGOL , incluido el uso de un punto y coma como separador de declaraciones. Esto contrasta con otros lenguajes, como PL / I y C , que utilizan el punto y coma como terminador de instrucciones. No se necesita un punto y coma antes de la end
palabra clave de una declaración de tipo de registro, un bloque o una declaración de caso ; antes de la until
palabra clave de una declaración de repetición; y antes de la else
palabra clave de una declaración if .
La presencia de un punto y coma adicional no estaba permitida en las primeras versiones de Pascal. Sin embargo, la adición de declaraciones vacías similares a ALGOL en el Informe revisado de 1973 y los cambios posteriores al lenguaje en ISO 7185: 1983 ahora permiten puntos y comas opcionales en la mayoría de estos casos. Aún no se permite un punto y coma inmediatamente antes de la else
palabra clave en una instrucción if , porque else
sigue a una sola instrucción, no a una secuencia de instrucciones. En el caso de ifs anidados, no se puede usar un punto y coma para evitar el problema de else colgante (donde el if interno no tiene un else, pero el if externo sí) al terminar supuestamente el if anidado con un punto y coma; esto en su lugar termina ambos if cláusulas. En su lugar, se debe utilizar un bloque begin
... explícito end
. [25]
Recursos
Compiladores e intérpretes
Hay varios compiladores e intérpretes de Pascal disponibles para uso general:
- Delphi es el producto insignia de desarrollo rápido de aplicaciones (RAD) de Embarcadero (anteriormente Borland / CodeGear) . Utiliza el lenguaje Object Pascal (denominado 'Delphi' por Borland), descendiente de Pascal, para crear aplicaciones para Windows , macOS , iOS y Android . La compatibilidad con .NET que existía desde D8 hasta D2005, D2006 y D2007 ha finalizado y se ha reemplazado por un nuevo lenguaje (Prism, cuyo nombre es Oxygene, ver más abajo) que no es totalmente compatible con versiones anteriores. En los últimos años se agregaron compatibilidad con Unicode y genéricos (D2009, D2010, Delphi XE).
- Free Pascal es un compilador multiplataforma escrito en Object Pascal (y es autohospedado ). Su objetivo es proporcionar un compilador conveniente y poderoso, capaz tanto de compilar aplicaciones heredadas como de ser el medio para desarrollar otras nuevas. Se distribuye bajo la Licencia Pública General GNU (GNU GPL), mientras que los paquetes y la biblioteca en tiempo de ejecución vienen bajo una Licencia Pública General Reducida GNU modificada (GNU LGPL). Además de los modos de compatibilidad para Turbo Pascal , Delphi y Mac Pascal, tiene sus propios modos de sintaxis de procedimiento y orientados a objetos con soporte para funciones extendidas como la sobrecarga de operadores . Es compatible con muchas plataformas y sistemas operativos. Las versiones actuales también cuentan con un modo ISO.
- Modern Pascal es un intérprete multiplataforma y un compilador de código p escrito en Free Pascal . Su objetivo es proporcionar soluciones alternativas para PHP y Node.js , utilizando un dialecto Pascal estándar ISO o un híbrido compatible con operadores JavaScript / C. Desde la CLI es útil como intérprete de Free Pascal.
- 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 Object Pascal para las plataformas .NET y Mono . Fue creado y vendido por RemObjects Software, y vendido durante un tiempo por Embarcadero como el compilador backend de Prism .
- Kylix era un descendiente de Delphi , con soporte para el sistema operativo Linux y una biblioteca de objetos mejorada. Ya no es compatible. El compilador y el IDE ya están disponibles para uso no comercial.
- GNU Pascal Compiler (GPC) es el compilador Pascal de GNU Compiler Collection (GCC). El compilador está escrito en C, la biblioteca en tiempo de ejecución principalmente en Pascal. Distribuido bajo la Licencia Pública General GNU , se ejecuta en muchas plataformas y sistemas operativos. Es compatible con los idiomas estándar ANSI / ISO y tiene compatibilidad parcial con el dialecto Turbo Pascal. Una de las omisiones más dolorosas es la ausencia de un tipo de cuerda (corta) 100% compatible con Turbo Pascal. El soporte para Borland Delphi y otras variantes de idioma es bastante limitado. Sin embargo, hay cierto soporte para Mac-pascal.
- Virtual Pascal fue creado por Vitaly Miryanov en 1995 como un compilador nativo de OS / 2 compatible con la sintaxis de Borland Pascal. Luego, fue desarrollado comercialmente por fPrint, agregando soporte para Win32, y en 2000 se convirtió en software gratuito. Hoy se puede compilar para Win32, OS / 2 y Linux, y es principalmente compatible con Borland Pascal y Delphi. El desarrollo se canceló el 4 de abril de 2005.
- Compilador P4, la base de muchos compiladores posteriores implementados en Pascal. Implementa un subconjunto de Pascal completo.
- El compilador P5 es una adaptación ISO 7185 (Pascal completo) de P4.
- Smart Mobile Studio es un compilador de Pascal a HTML5 / Javascript
- Turbo Pascal fue el compilador Pascal dominante para PC durante la década de 1980 y principios de la de 1990, popular tanto por sus poderosas extensiones como por sus tiempos de compilación extremadamente cortos. Turbo Pascal fue escrito de forma compacta y podía compilar, ejecutar y depurar todo desde la memoria sin acceder al disco. Las unidades de disquete lentas eran comunes para los programadores en ese momento, aumentando aún más la ventaja de velocidad de Turbo Pascal. Actualmente, las versiones anteriores de Turbo Pascal (hasta 5.5) están disponibles para su descarga gratuita desde el sitio de Borland.
- IP Pascal implementa el lenguaje "Pascaline" (llamado así por la calculadora de Pascal ), que es un Pascal altamente extendido compatible con Pascal original según ISO 7185. Cuenta con módulos con control de espacio de nombres, incluyendo módulos de tareas paralelas con semáforos, objetos, matrices dinámicas de cualquier dimensiones que se asignan en tiempo de ejecución, sobrecargas, anulaciones y muchas otras extensiones. IP Pascal tiene una biblioteca de portabilidad incorporada que se adapta a la medida del lenguaje Pascal. Por ejemplo, una aplicación de salida de texto estándar de Pascal original de 1970 se puede recompilar para trabajar en una ventana e incluso agregar construcciones gráficas.
- Pascal-XT fue creado por Siemens para sus sistemas operativos de mainframe BS2000 y SINIX .
- PocketStudio es un compilador de subconjuntos Pascal y una herramienta RAD para procesadores Palm OS y MC68xxx con algunas de sus propias extensiones para ayudar a interactuar con la API de Palm OS. Se parece a Delphi y Lazarus con un diseñador de formularios visual, un inspector de objetos y un editor de código fuente .
- MIDletPascal : un compilador e IDE de Pascal que genera un código de bytes pequeño y rápido de Java diseñado específicamente para crear software para móviles.
- Vector Pascal es un lenguaje para conjuntos de instrucciones SIMD como MMX y AMD 3d Now, que admite todos los procesadores Intel y AMD, y PlayStation 2 Emotion Engine de Sony.
- Morfik Pascal permite el desarrollo de aplicaciones Web escritas íntegramente en Object Pascal (tanto en el servidor como en el 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 la computadora de mano.
- El compilador CDC 6000 Pascal es el código fuente del primer compilador Pascal (CDC 6000).
- Pascal-S [26]
- AmigaPascal es un compilador Pascal gratuito para la computadora Amiga.
- VSI Pascal (originalmente VAX Pascal) es un compilador compatible con el estándar ISO Pascal para el sistema operativo OpenVMS .
- Stony Brook Pascal + era un compilador de optimización de 16 bits (más tarde de 32 bits) para DOS y OS / 2, comercializado como un reemplazo directo de Turbo Pascal, pero produciendo código que se ejecutaba al menos dos veces más rápido.
IDE
- Dev-Pascal es un IDE de Pascal que fue diseñado en Borland Delphi y que soporta Free Pascal y GNU Pascal como backends.
- Lazarus es un IDE multiplataforma visual similar a Delphi gratuito para el desarrollo rápido de aplicaciones (RAD). Basado en Free Pascal , Lazarus está disponible para numerosas plataformas, incluidas Linux , FreeBSD , macOS y Microsoft Windows .
- Fire (macOS) y Water (Windows) para el compilador Oxygene y Elements
Bibliotecas
- Biblioteca WOL para crear aplicaciones GUI con Free Pascal Compiler.
Estándares
ISO / IEC 7185: 1990 Pascal
En 1983, el lenguaje se estandarizó en la norma internacional IEC / ISO 7185 [27] y en varias normas locales específicas de cada país, incluidas las normas estadounidenses ANSI / IEEE770X3.97-1983 e ISO 7185: 1983. Estos dos estándares diferían solo en que el estándar ISO incluía una extensión de "nivel 1" para matrices conformes (una matriz donde los límites de la matriz no se conocen hasta el tiempo de ejecución), donde ANSI no permitió esta extensión al original (Wirth versión) idioma. En 1989, se revisó la norma ISO 7185 (ISO 7185: 1990) para corregir varios errores y ambigüedades que se encuentran en el documento original.
Se afirmó que la ISO 7185 era una aclaración del lenguaje de Wirth de 1974 como se detalla en el Manual del usuario y el Informe [Jensen y Wirth], pero también se destacó por agregar "Parámetros de matriz de conformidad" como nivel 1 del estándar, siendo el nivel 0 Pascal. sin matrices conformes. Esta adición se realizó a pedido de CAR Hoare y con la aprobación de Niklaus Wirth. La causa precipitante fue que Hoare quería crear una versión 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 ISO 7185 de la instalación para especificar los tipos de parámetros de procedimientos y parámetros funcionales.
El propio Niklaus Wirth se refirió 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 se documentó en The Pascal Report , [28] la segunda parte del "Manual e informe del usuario de Pascal".
En las máquinas grandes (mainframes y miniordenadores) en las que se originó Pascal, en general se siguieron los estándares. En la PC de IBM , no lo fueron. En las PC de IBM, los estándares de Borland Turbo Pascal y Delphi tienen el mayor número de usuarios. Por lo tanto, generalmente es importante comprender si una implementación particular corresponde al idioma Pascal original o un dialecto de Borland del mismo.
Las versiones de IBM PC del lenguaje comenzaron a diferir con la llegada de UCSD Pascal, una implementación interpretada que presentaba varias extensiones del lenguaje, junto con varias omisiones y cambios. Muchas características del lenguaje UCSD sobreviven hoy, incluso en el dialecto de Borland.
ISO / IEC 10206: 1990 Pascal extendido
En 1990, se creó un estándar Pascal extendido como ISO / IEC 10206, [29] que es idéntico en contenido técnico [30] a IEEE / ANSI 770X3.160-1989 [31] A partir de 2019, soporte de Pascal extendido en el compilador FreePascal esta planeado. [32]
Variaciones
La versión Zürich de Niklaus Wirth de Pascal se emitió fuera de ETH en dos formas básicas: la fuente del compilador CDC 6000 y un kit de adaptación llamado sistema Pascal-P. El compilador Pascal-P omitió varias características del lenguaje completo que no eran necesarias para iniciar el compilador. Por ejemplo, se omitieron los procedimientos y funciones utilizados como parámetros, registros de variantes no discriminados, empaquetado, eliminación, gotos entre procedimientos y otras características del compilador completo.
UCSD Pascal , bajo la dirección del profesor Kenneth Bowles , se basó en el kit Pascal-P2 y, en consecuencia, compartió varias de las restricciones de idioma de Pascal-P. UCSD Pascal se adoptó más tarde como Apple Pascal y continuó a través de varias versiones allí. Aunque UCSD Pascal en realidad expandió el subconjunto Pascal en el kit Pascal-P al volver a agregar construcciones estándar de Pascal, todavía no era 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 agregaron varias construcciones para usar Pascal-FC como una herramienta de enseñanza para la programación concurrente (como semáforos, monitores, canales, invocación remota y recursos). Para poder demostrar la simultaneidad, la salida del compilador (una especie de código P ) podría ejecutarse en una máquina virtual. Esta máquina virtual no solo simulaba un entorno normal (justo), sino que también podía simular condiciones extremas (modo injusto).
Compiladores Pascal similares a Borland
Borland 's Turbo Pascal , escrito por Anders Hejlsberg , fue escrito en lenguaje ensamblador independiente de la UCSD y los compiladores de 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 adecuado para desarrollar aplicaciones en los sistemas de microprocesadores con recursos limitados disponibles en ese momento.
La versión 3 de Turbo Pascal empaquetado y versiones posteriores, incluidos Object Pascal y Delphi de Borland y los casi compatibles no Borland se hicieron populares entre los programadores, incluidos los autores de shareware, por lo que la biblioteca SWAG de código Pascal presenta una gran cantidad de código escrito con tales versiones como Delphi en mente.
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 .
- Borland Pascal 7 : una versión profesional de la línea Turbo Pascal dirigida tanto a DOS como a Windows.
- Object Pascal : una extensión del lenguaje Pascal que fue desarrollada en Apple Computer por un equipo dirigido 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 para Turbo Pascal 5.5 para DOS.
- Delphi - Object Pascal es esencialmente su lenguaje subyacente.
- Compilador Free Pascal (FPC): Free Pascal adoptó el dialecto estándar de facto de los programadores de Pascal, Borland Pascal y, más tarde, Delphi. Freepascal también es compatible con ambas normas ISO.
- PascalABC.NET : un lenguaje de programación Pascal de nueva generación que incluye compilador e IDE.
- Borland Kylix es un compilador e IDE vendido anteriormente por Borland, pero luego descontinuado. Es una versión para Linux del entorno de desarrollo de software Borland Delphi y C ++ Builder .
- Lazarus , similar a Kylix en función, es un IDE visual multiplataforma gratuito para RAD que utiliza el compilador Free Pascal, que admite dialectos de Object Pascal en diversos 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 de Linux "en camino"). [33]
- Sybil es un IDE y compilador de código abierto similar a Delphi; las implementaciones incluyen:
- WDSibyl [34] para Microsoft Windows y OS / 2 , un entorno comercial compatible con Borland Pascal lanzado por una empresa llamada Speedsoft que luego se desarrolló en un entorno de desarrollo rápido de aplicaciones (RAD) similar a Delphi llamado Sybil y luego de 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 se basó originalmente 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 Modelo de objetos (SOM), WPS y OpenDoc . [35]
- ISO 8651-2: 1988 Sistemas de procesamiento de información - Gráficos por computadora - Vinculaciones de lenguaje del sistema de kernel gráfico (GKS) - Parte 2: Pascal
Recepción
Pascal generó una amplia variedad de respuestas en la comunidad informática, tanto críticas como complementarias.
Crítica temprana
Si bien fue muy popular en la década de 1980 y principios de la de 1990, las implementaciones de Pascal que siguieron de cerca la definición inicial del idioma de Wirth fueron ampliamente criticadas por no ser adecuadas para su uso fuera de la enseñanza. Brian Kernighan , quien popularizó el lenguaje C , describió sus críticas más notables a Pascal ya en 1981 en su artículo "Por qué Pascal no es mi lenguaje de programación favorito". [36] El problema más serio que describió fue que los tamaños de las matrices y las longitudes de las cadenas eran parte del tipo, por lo que no era posible escribir una función que aceptara matrices de longitud variable o incluso cadenas como parámetros. Esto hizo inviable escribir, por ejemplo, una biblioteca de clasificación. Kernighan también criticó el orden impredecible de evaluación de las expresiones booleanas, el soporte deficiente de la biblioteca y la falta de variables estáticas , y planteó una serie de problemas menores. Además, afirmó que el lenguaje no proporciona ningún concepto simple para "escapar" (ignorar a sabiendas y por la fuerza) restricciones y limitaciones. Las quejas más generales de otras fuentes [24] [37] señalaron que el alcance de las declaraciones no estaba claramente definido en la definición del idioma original, lo que a veces tenía graves consecuencias cuando se usaban declaraciones hacia adelante para definir tipos de punteros o cuando las declaraciones de registros conducían a la recursividad mutua , o cuando un identificador puede o no haber sido usado en una lista de enumeración. Otra dificultad fue que, como ALGOL 60 , el lenguaje no permitía que los procedimientos o funciones pasados como parámetros predefinieran el tipo esperado de sus parámetros.
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 fueron mejoradas para ser adecuadas para el desarrollo de productos comerciales, como Turbo Pascal de Borland . Como Kernighan predijo en su artículo, la mayoría de las extensiones para solucionar estos problemas eran incompatibles de un compilador a otro. Sin embargo, desde principios de la década de 1990, la mayoría de las variedades parecen condensadas en dos categorías: ISO y similares a Borland. Extended Pascal aborda muchas de estas primeras críticas. Admite cadenas de longitud variable, inicialización variable, compilación separada, operadores booleanos de cortocircuito y otherwise
cláusulas predeterminadas ( ) para declaraciones de casos. [38]
Ver también
- Pascal concurrente
- Comparación de Pascal y Borland Delphi
- Comparación de Pascal y C
- Modula-2
- Oberon (lenguaje de programación)
- Objeto Pascal
- PascalCase
Referencias
- ^ "Observamos con mucho cuidado a Delphi Object Pascal y construimos un prototipo funcional de referencias de métodos vinculados para comprender su interacción con el lenguaje de programación Java y sus API ... Nuestra conclusión fue que las referencias de métodos vinculados son innecesarias y perjudiciales para el lenguaje . Esta decisión se tomó en consulta con Borland International, que tenía experiencia previa con referencias de métodos enlazados en Delphi Object Pascal ". (de Acerca de los "delegados" de Microsoft, archivado el 27 de junio de 2012 en Wayback Machine en java.sun.com.
- ^ Investigación de TechMetrix (1999). "Historia de Java" (PDF) . Informe de servidores de aplicaciones Java . Archivado desde el original (PDF) el 2010-12-29.
El proyecto siguió adelante bajo el nombre "verde" y el lenguaje se basó en un modelo antiguo de UCSD Pascal , que permite generar código interpretativo
- ^ "Una conversación con James Gosling - ACM Queue" . Archivado desde el original el 16 de julio de 2015 . Consultado el 11 de agosto de 2015 .
- ^ Essential Pascal Archivado el 18 de abril de 2017 en la Wayback Machine por Marco Cantù
- ^ Hertzfeld, Andy. " Hungarian folklore.org Archivado el 18 de noviembre de 2015 en Wayback Machine : Macintosh Stories. Consultado el 6 demarzo de 2012.
- ^ 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
- ^ tiobe.com Archivado el 15 de marzo de 2012 en Wayback Machine , Programming Community Index para enero de 2011.
- ^ "Software antiguo: Turbo Pascal v5.5" .
- ^ Informática y Computación. Una perspectiva personal. Archivado el 10 de mayo de 2017 en la Wayback Machine por Niklaus Wirth
- ^ cbi.umn.edu , "Una entrevista con John Brackett y Doug Ross" [ enlace muerto permanente ] , p15, Instituto Charles Babbage, 2004
- ^ Establecimiento de Investigación de la Comisión Australiana de Energía Atómica, Lucas Heights, Informe de la Rama de Ciencia y Tecnología Nuclear, Investigación Divisional (PDF) . Organismo Internacional de Energía Atómica (IEAE) (Informe). 1977. p. 22.
- ^ Jon Udell, Crash of the Object-Oriented Pascals, BYTE, julio de 1989.
- ^ M. I. Trofimov, ¿El fin de Pascal ?, BYTE, marzo de 1990, p. 36.
- ^ Rall, LB (1987). "Una introducción al lenguaje informático científico Pascal-SC". Computadoras . 14 : 53–69. doi : 10.1016 / 0898-1221 (87) 90181-7 .
- ^ 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 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 .
- ^ "Pascal-XSC: Pascal para la informática científica ampliada" . Archivado desde el original el 5 de enero de 2014.
- ^ "Software XSC" . Archivado desde el original el 1 de noviembre de 2015 . Consultado el 11 de agosto de 2015 .
- ^ "Universitaet Wuppertal: Wissenschaftliches Rechnen / Softwaretechnologie" . Archivado desde el original el 6 de noviembre de 2015 . Consultado el 11 de agosto de 2015 .
- ^ Bamberger, Lothar; Davenport, James H .; Fischer, Hans-Christoph; Kok, Jan; Schumacher, Günter; Ullrich, Christian; Wallis, Peter JL; Invierno, Dik T .; Wolff von Gudenberg, Jürgen (1990). Wallis, Peter JL (ed.). Mejora de la programación de coma flotante (1ª ed.). Bath, Reino Unido: John Wiley & Sons Ltd. ISBN 0-471-92437-7.
- ^ Michel Gien, "El sistema operativo SOL", en Usenix Summer '83 Conference, Toronto, ON, (julio de 1983), págs. 75-78
- ^ cs.berkeley.edu Archivado el 7 de febrero de 2015 en la Wayback Machine.
- ^ Pascal ISO 7185: 1990 Archivado el 17 de junio de 2012 en la Wayback Machine 6.10
- ^ Mandell, Steven L. (1987). Programación Pascal hoy . West Publishing Company. ISBN 978-0-314-33935-5.
- ^ a b J. Welsh, WJ Sneeringer y CAR Hoare, "Ambigüedades e inseguridades en Pascal", Práctica y experiencia de software 7 , págs. 685–696 (1977)
- ^ Pascal, Nell Dale y Chip Weems, "Colgando más", p. 160–161 Archivado el 18 de marzo de 2017 en la Wayback Machine.
- ^ "Pascal-S: un subconjunto y su implementación", N. Wirth en Pascal - El lenguaje y su implementación, por DW Barron, Wiley 1979.
- ^ ISO / IEC 7185: 1990 Pascal (PDF) . Archivado desde el original (PDF) el 27 de enero de 2016 . Consultado el 16 de septiembre de 2014 .
- ^ Wirth, Niklaus (julio de 1973). El lenguaje de programación Pascal (Informe revisado) . ETH Zürich. doi : 10.3929 / ethz-a-000814158 .
- ^ Pascal extendido: ISO / IEC 10206: 1990 . Archivado desde el original el 27 de marzo de 2016 . Consultado el 16 de septiembre de 2014 .
- ^ "Estándares del lenguaje: Pascal, Extended Pascal, Fortan" . Archivado desde el original el 14 de julio de 2014 . Consultado el 16 de septiembre de 2014 .
- ^ 770X3.160-1989 - 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.
- ^ http://wiki.freepascal.org/Extended_Pascal
- ^ "Virtual Pascal para OS / 2" . Archivado desde el original el 30 de agosto de 2011 . Consultado el 3 de abril de 2016 .
- ^ Wolfgang (15 de octubre de 2020). "WDSibyl: entorno de desarrollo visual" . WDSibyl.org . Archivado desde el original el 12 de febrero de 2020 . Consultado el 20 de abril de 2020 .
- ^ "netlabs.org - Proyecto: Open Sibyl" . Archivado desde el original el 4 de marzo de 2016 . Consultado el 3 de abril de 2016 .
- ^ Brian W. Kernighan (1981). "Por qué Pascal no es mi lenguaje de programación favorito" . Archivado el 28 de abril de 2009 en la Wayback Machine.
- ^ O. Lecarme, P. Desjardins, "Más comentarios sobre el lenguaje de programación Pascal", Acta Informatica 4 , págs. 231-243 (1975).
- ^ "Pascal extendido" . Archivado desde el original el 18 de octubre de 2015.
Otras lecturas
- Niklaus Wirth: El lenguaje de programación Pascal . 35–63, Acta Informatica, Volumen 1, 1971.
- CAR Hoare: "Notas sobre la estructuración de datos". En O.-J. Dahl, EW Dijkstra y CAR Hoare, editores, Programación estructurada , páginas 83–174. Prensa académica, 1972.
- CAR Hoare, Niklaus Wirth: Una definición axiomática del lenguaje de programación Pascal . 335–355, Acta Informatica, Volumen 2, 1973.
- Kathleen Jensen y Niklaus Wirth: Pascal - Manual de usuario e informe . Springer-Verlag, 1974, 1985, 1991, ISBN 0-387-97649-3 y ISBN 3-540-97649-3 .
- Niklaus Wirth: Algoritmos + Estructuras de datos = Programas . Prentice-Hall, 1975, ISBN 0-13-022418-9 .
- Niklaus Wirth: Una evaluación del lenguaje de programación Pascal . 23–30 ACM SIGPLAN Notices Volumen 10, Número 6, junio de 1975.
- N. Wirth y AI Wasserman, ed: Programming Language Design . IEEE Computer Society Press, 1980
- DW Barron (Ed.): Pascal - El lenguaje y su implementación . John Wiley 1981, ISBN 0-471-27835-1
- Peter Grogono: Programación en Pascal , Edición revisada, Addison-Wesley, 1980
- Richard S. Forsyth: Pascal en el trabajo y el juego , Chapman y Hall, 1982
- N. Wirth, M. Broy, ed, y E. Denert, ed: Pascal y sus sucesores en Software Pioneers: Contributions to Software Engineering. Springer-Verlag, 2002, ISBN 3-540-43081-4
- N. Wirth: Recuerdos sobre el desarrollo de Pascal . Avisos ACM SIGPLAN, Volumen 28, No 3, marzo de 1993.