articles/pascal.md: update

This commit is contained in:
tocariimaa 2025-02-15 13:03:36 -03:00
parent a73200e699
commit 677467e04c

View file

@ -1,17 +1,17 @@
# Pascal
Pascal is a procedural programming language created by [Niklaus Wirth](niklaus_wirth.md) in 1970.
Pascal was a popular choice for microcomputers in the 70's and 80's, even more popular than C initially (C was still quite an UNIX-only language)
Pascal was a popular choice for microcomputers in the 70's and 80's, even more popular than [C](c.md) initially (C was still quite an UNIX-only language)
due to its simple design, which allowed fast simple single-pass compilers.
In its "vanilla" form, Pascal is not any more complex than C, aside from having features that C doesn't have, such as range types
and nested procedures.
In its "vanilla" form, Pascal is not any more complex than C, aside from having features that C doesn't have,
such as range types, nested procedures, sets, etc.
## Compilers
- [FPC](https://www.freepascal.org/) (Free Pascal Compiler): currently the most popular Pascal compiler with wide support
for different OSes and architectures, libre software.
- Turbo Pascal: old compiler for DOS systems, proprietary.
- Delphi: proprietary, adds [OOP](oop.md) bloat and exception handling.
- Turbo Pascal: old compiler for [DOS](dos.md) systems, proprietary.
- Delphi: proprietary, adds [OOP](oop.md) [bloat](bloat.md) and [exception](exception.md) handling.
## Notes
### Returning values from functions
@ -54,21 +54,13 @@ fpc hellopascal.pas
### Factorial
```pascal
{
Calculate a factorial on multiple languages: Pascal version
Compile with: fpc -O3 -S2 fact.pas
Calculate a factorial on multiple languages: Pascal version
Compile with: fpc -O3 -S2 fact.pas
}
program Factorials;
{ qword = 64 bit unsigned type }
function FactorialRec(n, acc: qword): qword;
begin
if n <= 0 then
Result := acc
else
Result := FactorialRec(n - 1, acc * n);
end;
function FactorialIter(n: qword): qword;
function Factorial(n: qword): qword;
begin
Result := 1;
while n > 0 do
@ -84,10 +76,9 @@ var
n: qword;
values: array of qword = (14, 5, 2, 10, 1, 18, 4);
begin
Assert((FactorialIter(0) = 1) and (FactorialRec(0, 1) = 1));
for n in values do
begin
WriteLn('Factorial of ', n, ' = ', FactorialRec(n, 1));
WriteLn('Factorial of ', n, ' = ', Factorial(n));
end;
end.
```