Pascal es un lenguaje de programación ideado por Niklaus Wirth a finales de los años 1960 y principios de los años 1970. Originalmente producido por Borland Software Corporation, Embarcadero Delphi se compone de un IDE, un conjunto de bibliotecas estándar y un lenguaje basado en Pascal comúnmente llamado Object Pascal , Delphi Pascal o simplemente "Delphi" (la documentación actual de Embarcadero se refiere a él como "el lenguaje Delphi (Object Pascal)" [1] ). Desde su lanzamiento, se ha convertido en la implementación comercial de Pascal más popular.
Durante el desarrollo de Pascal, Wirth empleó un procedimiento de arranque en el que cada nueva versión del compilador de Pascal se escribía y compilaba con su predecesor. De este modo, el compilador "P2" se escribió en el dialecto compilable por "P1", "P3" a su vez se escribió en "P2" y así sucesivamente, hasta llegar a "P5". El compilador "P5" implementó Pascal en su estado final tal como lo definió Wirth y, posteriormente, se estandarizó como "ISO 7185 Pascal".
El dialecto Borland, al igual que el popular Pascal UCSD que lo precedió, tomó como base la versión "P4" del lenguaje, en lugar de la revisión final de Wirth. Después de mucha evolución independiente del Pascal estándar, la variante Borland se convirtió en la base de Delphi. Esta página analiza las diferencias entre Delphi y Pascal estándar. No analiza las extensiones específicas de Delphi para el lenguaje, que son numerosas y siguen aumentando.
Las siguientes características son mutuamente excluyentes. La implementación de Pascal estándar no es aceptada por Delphi y viceversa, el código de Delphi no es aceptado por Pascal estándar.
El Pascal estándar tiene una definición del mod
operador similar a la euclidiana , mientras que Delphi utiliza una definición truncada.
El estándar Pascal requiere que los delimitadores de comentarios {
y el bigrama , así como y sean sinónimos entre sí. [2]
Sin embargo, en Delphi, un comentario de bloque iniciado por debe cerrarse con un . [3]
El bigrama solo cerrará cualquier comentario que comience con . [3]
Este esquema permite comentarios anidados a expensas de la complejidad del compilador.(*
}
*)
{
}
*)
(*
La forma en que se pueden pasar procedimientos y funciones como parámetros difiere: Delphi requiere que se declaren tipos de procedimientos explícitos, mientras que Pascal estándar no lo hace. [4]
Varios sistemas informáticos muestran una amplia variedad de formas de indicar una nueva línea . Esto afecta a la representación interna de text
los archivos que se componen de una serie de "líneas". Para aliviar al programador de cualquier dolor de cabeza asociado, el estándar Pascal exige que la lectura de un "carácter de fin de línea" devuelva un solo carácter de espacio. Para distinguir un carácter de espacio de "fin de línea" de un carácter de espacio que es realmente la carga útil genuina de la línea, EOLn
se convierte en true
.
Delphi no muestra este comportamiento. Al leer una nueva línea se devolverá cualquier secuencia de caracteres que represente una nueva línea en el sistema host actual, por ejemplo, dos char
valores (retorno de carro) más (avance de línea). [3]chr(13)
chr(10)
Las siguientes características están presentes o faltan en ambos idiomas.
El estándar Pascal permite que a se aplique goto
a cualquier objeto label
definido en el ámbito. En Delphi, a goto
debe estar dentro de la rutina actual, es decir, no puede salir del marco. [3]begin … end
programa jumpAround ; etiqueta 999 ; procedimiento foo ; begin { Esto no está permitido en Delphi: } goto 999 ; fin ; comienzo foo ; 999 : ; fin .
Delphi no admite variables de búfer ni rutinas estándar asociadas get
. put
[ 3]
programa copy ( entrada , salida ) ; begin while not EOF ( entrada ) do begin { Copiar buffers de archivos. No soportado por Delphi } salida ↑ := entrada ↑ ; { Entrada↑ contiene un espacio si se produjo una nueva línea. } if EOLn ( entrada ) then begin writeLn ( salida ) ; end else begin put ( salida ) ; end ; { Cursor de lectura avanzada. } get ( entrada ) ; end ; end .
En Pascal estándar, la asignación de memoria para una variante record
puede indicar una variante específica. Esto permite que las implementaciones asignen la menor cantidad de memoria realmente necesaria. Delphi no admite esta opción. [3]
programa variantRecord ; tipo sexo = ( femenino , masculino ) ; medidasDeRopa = registro circunferencia : real ; caso género : sexo de femenino : ( bajo busto : real ) ; masculino : ( ) ; fin ; var talla : medidasDeRopa ; comienzo { NB: No hay espacio asignado para `bajo busto`. } nuevo ( talla , masculino ) ; fin .
En Delphi, cualquier archivo debe estar respaldado por un archivo en el sistema de archivos. Esto significa que cualquier file
archivo debe estar asociado a un nombre de archivo con assign
el procedimiento de Delphi. Por el contrario, el Pascal estándar se puede utilizar sin nombres de archivo. Lo siguiente producirá un error en tiempo de ejecución con Delphi. [3]
programa TemporaryFile ( salida ) ; var FD : texto ; comenzar reescribir ( FD ) ; writeLn ( FD , '¡Hola mundo!' ) ; fin .
Delphi no implementa los procedimientos estándar pack
y unpack
. [3]
De todos modos, transferir datos entre tipos de datos empaquetados y desempaquetados es una tarea fácil, aunque la implementación podría no ser tan eficiente como lo sería una implementación proporcionada por un proveedor de compilador.
Delphi no asocia el tipo de datos Boolean
con un ancho predeterminado si se especifica como parámetro write
/ writeLn
. [3]
Delphi demuestra el comportamiento como de costumbre para cadenas de caracteres.
Delphi permite sobrecargar rutinas. En el estándar Pascal, los identificadores deben ser únicos en cada bloque.
función f ( x : entero ) : real ; inicio resultado := sin ( x ) ; fin ; función f ( x : real ) : real ; comienzo resultado := cos ( x ) ; fin ; // ─── PRINCIPAL ───────────────────────────────────────────── comienzo // Tenga en cuenta los diferentes tipos de datos. writeLn ( f ( 3 )) ; writeLn ( f ( 3.0 )) ; fin .
Delphi permite parámetros predeterminados .
En Pascal, si el archivo de destino es un text
archivo, los parámetros de write
/ writeLn
tienen un ancho total predeterminado definido por la implementación. En Delphi, para integer
los valores esto es simplemente 1
. Eso significa que siempre se ocupa la menor cantidad de espacio. [3]
Otros compiladores han mostrado anchos predeterminados de , por ejemplo, 20
lo que permite una vista tabular precisa sin costo de código adicional.