Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Exclusive features  



1.1  Modulo with negative dividend  





1.2  Nested comments  





1.3  Procedural data types  





1.4  Conversion of newline characters  







2 Additional or missing features  



2.1  Global goto  





2.2  Buffer variables  





2.3  Discriminated variant record allocation  





2.4  Temporary files  





2.5  Packing  





2.6  Missing default write width  





2.7  Overloading  





2.8  Default parameter values  







3 Peculiar implementation characteristics  



3.1  Standard write width  







4 References  





5 Further reading  





6 External links  














Comparison of Pascal and Delphi







Add links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 
















Appearance
   

 






From Wikipedia, the free encyclopedia
 


Devised by Niklaus Wirth in the late 1960s and early 1970s, Pascal is a programming language. Originally produced by Borland Software Corporation, Embarcadero Delphi is composed of an IDE, set of standard libraries, and a Pascal-based language commonly called either Object Pascal, Delphi Pascal, or simply 'Delphi' (Embarcadero's current documentation refers to it as 'the Delphi language (Object Pascal)'[1]). Since first released, it has become the most popular commercial Pascal implementation.

While developing Pascal, Wirth employed a bootstrapping procedure in which each newer version of the Pascal compiler was written and compiled with its predecessor. Thus, the 'P2' compiler was written in the dialect compilable by 'P1', 'P3' in turn was written in 'P2' and so on, all the way till 'P5'. The 'P5' compiler implemented Pascal in its final state as defined by Wirth, and subsequently became standardised as 'ISO 7185 Pascal'.

The Borland dialect, like the popular UCSD Pascal before it, took the 'P4' version of the language as its basis, rather than Wirth's final revision. After much evolution independent of Standard Pascal, the Borland variant became the basis for Delphi. This page goes over the differences between Delphi and Standard Pascal. It does not go into Delphi-specific extensions to the language, which are numerous and still increasing.

Exclusive features

[edit]

Following features are mutually exclusive. The Standard Pascal implementation is not accepted by Delphi and vice versa, the Delphi code is not acceptable in Standard Pascal.

Modulo with negative dividend

[edit]

Standard Pascal has a Euclidean-like definition of the mod operator whereas Delphi uses a truncated definition.

Nested comments

[edit]

Standard Pascal requires that the comment delimiters { and the bigramm (*, as well as } and *) are synonymous to each other.[2] In Delphi, however, a block comment started by { must be closed with a }.[3] The bigramm *) will only close any comment that started with (*.[3] This scheme allows for nested comments at the expense of compiler complexity.

Procedural data types

[edit]

The way procedures and functions can be passed as parameters differs: Delphi requires explicit procedural types to be declared where Standard Pascal does not.[4]

comparison procedural data types
Standard Pascal Delphi
program proceduralDataType(output);

 { `printYIntersect` has one procedural parameter: }
 procedure printYIntersect(function f(x: real): real);
  begin
   writeLn(f(0.0));
  end;
 { Standard Pascal does not have procedural “pointers.” }
 function f(x: real): real;
  begin
   f := cos(x);
  end;
 { ─── MAIN ───────────────────────────────────────────── }
 begin
  printYIntersect(f);
 end.
type
 TFunc = function(x: real): real;

procedure printYIntersect(f: TFunc);
 begin
  writeLn(f(0.0));
 end;

function f(x: real): real;
 begin
  f := cos(x);
 end;
// ─── MAIN ─────────────────────────────────────────────
begin
 printYIntersect(@f);
end.

Conversion of newline characters

[edit]

Various computer systems show a wide variety how to indicate a newline. This affects the internal representation of text files which are composed of a series of “lines”. In order to relieve the programmer from any associated headaches, Standard Pascal mandates that reading an “end-of-line character” returns a single space character. To distinguish such an “end-of-line” space character from a space character that is actually genuine payload of the line, EOLn becomes true.

Delphi does not show this behavior. Reading a newline will return whatever character sequence represents a newline on the current host system, for example two char values chr(13) (carriage return) plus chr(10) (line feed).[3]

Additional or missing features

[edit]

Following features are present or missing in either language.

Global goto

[edit]

Standard Pascal permits a goto to any label defined in scope. In Delphi a goto must be within the current routine, i. e. may not leave the begin  end-frame.[3]

program jumpAround;
 label
  999;
 procedure foo;
  begin
   { This is not permitted in Delphi: }
   goto 999;
  end;
 begin
  foo;
  999: ;
 end.

Buffer variables

[edit]

Delphi does not support buffer variables and associated standard routines get and put.[3]

program copy(input, output);
 begin
  while not EOF(input) do
  begin
   { Copy file buffers. Not supported by Delphi }
   output := input;
   
   { Input↑ contains a space if a new-line occurred. }
   if EOLn(input) then
   begin
    writeLn(output);
   end
   else
   begin
    put(output);
   end;
   
   { Advance reading cursor. }
   get(input);
  end;
 end.

Discriminated variant record allocation

[edit]

In Standard Pascal allocating memory for a variant record may indicate a specific variant. This allows implementations to allocate the least amount of really necessary memory. Delphi does not support this.[3]

program variantRecord;
 type
  sex = (female, male);
  clothingMeasures = record
    girth: real;
    case gender: sex of
     female: (underbust: real);
     male: ( );
   end;
 var
  size: clothingMeasures;
 begin
  { NB: No space allocated for `underbust`. }
  new(size, male);
 end.

Temporary files

[edit]

In Delphi any file must be backed by a file in the file system. That means any file needs to be associated with a file name with Delphi's assign procedure. In contrast, Standard Pascal is usable without file names. The following will produce a run-time error with Delphi.[3]

program temporaryFile(output);
 var
  FD: text;
 begin
  rewrite(FD);
  writeLn(FD, 'Hello world!');
 end.

Packing

[edit]

Delphi does not implement the standard procedures pack and unpack.[3] Regardless, transferring data between packed and unpacked data types is an easy feat, although the implementation might not be as efficient as a compiler vendor supplied implementation would be.

Missing default write width

[edit]

Delphi does not associate the data type Boolean with a default width if specified as write/writeLn parameters.[3] Delphi demonstrates the behavior as usual for character-strings.

Overloading

[edit]

Delphi permits overloading routines. In Standard Pascal identifiers must be unique in every block.

function f(x: integer): real;
begin
 result := sin(x);
end;

function f(x: real): real;
begin
 result := cos(x);
end;
// ─── MAIN ─────────────────────────────────────────────
begin
 // Note the different data types.
 writeLn(f(3));
 writeLn(f(3.0));
end.

Default parameter values

[edit]

Delphi permits default parameters.

Peculiar implementation characteristics

[edit]

Standard write width

[edit]

In Pascal, if the destination file is a text file, the parameters to write/writeLn have an implemention-defined default total width. In Delphi, for integer values this is simply 1. That means always the least amount of space is occupied.[3] Other compilers have shown default widths of, for example, 20 allowing for a fine tabular look at no cost of extra code.

comparison default write width
source code fragment
writeLn(1);
writeLn(23456789);
produces in
Standard Pascal (GPC) Delphi
          1
   23456789
1
23456789

References

[edit]
  1. ^ "Delphi Reference - RAD Studio XE2".
  • ^ van der Heijden, Jan-Jaap; Gerwinski, Peter; Heckenbach, Frank; deBoer, Berend; Freche, Dominik; Lange, Eike; Lewis, Peter; et al. "The GNU Pascal Manual". A QuickStart Guide from Borland Pascal to GNU Pascal. Retrieved April 24, 2023.
  • ^ a b c d e f g h i j Moore, Scott (December 2, 2022). "Standard Pascal FAQ". Q. What are the differences between Borland Delphi and the ISO 7185 standard?. Retrieved April 24, 2023.
  • ^ Reagan, John (April 3, 1995). "Pascal Standards FAQ". Comparison of Borland Pascal to the Pascal standards. Archived from the original on September 28, 2021.
  • Further reading

    [edit]
    [edit]
    Retrieved from "https://en.wikipedia.org/w/index.php?title=Comparison_of_Pascal_and_Delphi&oldid=1228073015"

    Categories: 
    Pascal programming language family
    Borland
    Comparison of individual programming languages
    Hidden categories: 
    Articles with short description
    Short description matches Wikidata
    Use mdy dates from April 2023
     



    This page was last edited on 9 June 2024, at 09:29 (UTC).

    Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Mobile view



    Wikimedia Foundation
    Powered by MediaWiki