stringtranslate.com

Comparación de Pascal y Delphi

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.

Características exclusivas

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.

Módulo con dividendo negativo

El Pascal estándar tiene una definición del modoperador similar a la euclidiana , mientras que Delphi utiliza una definición truncada.

Comentarios anidados

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.(*}*){ }*)(*

Tipos de datos procedimentales

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]

Conversión de caracteres de nueva línea

Varios sistemas informáticos muestran una amplia variedad de formas de indicar una nueva línea . Esto afecta a la representación interna de textlos 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, EOLnse 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 charvalores (retorno de carro) más (avance de línea). [3]chr(13)chr(10)

Funciones adicionales o faltantes

Las siguientes características están presentes o faltan en ambos idiomas.

Globalgoto

El estándar Pascal permite que a se aplique gotoa cualquier objeto labeldefinido en el ámbito. En Delphi, a gotodebe 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 .    

Variables de buffer

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 .         

Asignación de registros de variantes discriminadas

En Pascal estándar, la asignación de memoria para una variante recordpuede 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 .                

Archivos temporales

En Delphi, cualquier archivo debe estar respaldado por un archivo en el sistema de archivos. Esto significa que cualquier filearchivo debe estar asociado a un nombre de archivo con assignel 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 .   

Embalaje

Delphi no implementa los procedimientos estándar packy 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.

Falta writeel ancho predeterminado

Delphi no asocia el tipo de datos Booleancon un ancho predeterminado si se especifica como parámetro write/ writeLn. [3] Delphi demuestra el comportamiento como de costumbre para cadenas de caracteres.

Sobrecarga

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 .     

Valores de parámetros predeterminados

Delphi permite parámetros predeterminados .

Características de implementación peculiares

writeAncho estándar

En Pascal, si el archivo de destino es un textarchivo, los parámetros de write/ writeLntienen un ancho total predeterminado definido por la implementación. En Delphi, para integerlos 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, 20lo que permite una vista tabular precisa sin costo de código adicional.

Referencias

  1. ^ "Referencia de Delphi - RAD Studio XE2".
  2. ^ van der Heijden, Jan-Jaap; Gerwinski, Peter; Heckenbach, Frank; deBoer, Berend; Freche, Dominik; Lange, Eike; Luis, Pedro; et al. "El manual de GNU Pascal". Una guía de inicio rápido de Borland Pascal a GNU Pascal . Consultado el 24 de abril de 2023 .
  3. ^ abcdefghij Moore, Scott (2 de diciembre de 2022). "Preguntas frecuentes sobre el estándar Pascal". P. ¿Cuáles son las diferencias entre Borland Delphi y el estándar ISO 7185? . Consultado el 24 de abril de 2023 .
  4. ^ Reagan, John (3 de abril de 1995). "Preguntas frecuentes sobre los estándares de Pascal". Comparación de Borland Pascal con los estándares de Pascal. Archivado desde el original el 28 de septiembre de 2021.

Lectura adicional

Enlaces externos