Free Pascal

Last updated

Free Pascal
Developer(s) Florian Klämpfl & volunteers
Initial release1997;26 years ago (1997)
Stable release
3.2.2 / May 20, 2021;2 years ago (2021-05-20)
Preview release
3.3.1
Repository
Written in Object Pascal
Operating system Cross-platform, embedded
Type Compiler, embedded operating system
License GNU General Public License for the compiler and utility executables. GNU Lesser General Public License with static linking exception for the runtime, package, component and other libraries that become part of executables created with the compiler
Website www.freepascal.org

Free Pascal Compiler (FPC) is a compiler for the closely related programming-language dialects Pascal and Object Pascal. It is free software released under the GNU General Public License, with exception clauses that allow static linking against its runtime libraries and packages for any purpose in combination with any other software license.

Contents

It supports its own Object Pascal dialect, as well as the dialects of several other Pascal family compilers to a certain extent, including those of Borland Pascal (named "Turbo Pascal" until the 1990 version 6), Borland (later Embarcadero) Delphi, and some historical Macintosh compilers. The dialect is selected on a per-unit (module) basis, and more than one dialect can be used per program.

It follows a write once, compile anywhere philosophy and is available for many CPU architectures and operating systems (see Targets). It supports inline assembly language and includes an internal assembler capable of parsing several dialects such as AT&T and Intel style.

There are separate projects to facilitate developing cross-platform graphical user interface (GUI) applications, the most prominent one being the Lazarus integrated development environment (IDE).

Supported dialects

Initially, Free Pascal adopted the de facto standard dialect of Pascal programmers, Borland Pascal, but later adopted Delphi's Object Pascal. From version 2.0 on, Delphi compatibility has been continuously implemented or improved.

The project has a compilation mode concept, and the developers made it clear that they would incorporate working patches for the standardized dialects of the American National Standards Institute (ANSI) and International Organization for Standardization (ISO) to create a standards-compliant mode.

A small effort has been made to support some of the Apple Pascal syntax to ease interfacing to the Classic Mac OS and macOS. The Apple dialect implements some standard Pascal features that Turbo Pascal and Delphi omit.

The 2.2.x release series did not significantly change the dialect objectives beyond roughly Delphi 7 level syntax, instead aiming for closer compatibility. A notable exception to this was the addition of support for generics to Free Pascal in version 2.2.0, several years before they were supported in any capacity by Delphi.

In 2011 several Delphi 2006-specific features were added in the development branch, and some of the starting work for the features new in Delphi 2009 (most notably the addition of the UnicodeString type) was completed. The development branch also has an Objective-Pascal extension for Objective-C (Cocoa) interfacing.

As of version 2.7.1, Free Pascal implemented basic ISO Pascal mode, though many things such as the Get and Put procedures, and the file-buffer variable concept for file handling were still absent.

As of version 3.0.0, ISO Pascal mode is fairly complete. It has been able to compile standardpascal.org's P5 ISO Pascal compiler with no changes.

History

Early years

Free Pascal was created when Borland clarified that Borland Pascal development for DOS would stop with version 7, to be replaced by a Windows-only product, which later became Delphi.

Student Florian Paul Klämpfl began developing his own compiler written in the Turbo Pascal dialect and produced 32-bit code for the GO32v1 DOS extender, which was used and developed by the DJ's GNU Programming Platform (DJGPP) project at that time.

Originally, the compiler was a 16-bit DOS executable compiled by Turbo Pascal. After two years, the compiler was able to compile itself and became a 32-bit executable.

Expansion

The initial 32-bit compiler was published on the Internet, and the first contributors joined the project. Later, a Linux port was created by Michael van Canneyt, five years before the Borland Kylix Pascal compiler for Linux became available.

The DOS port was adapted for use in OS/2 using the Eberhard Mattes eXtender (EMX) which made OS/2 the second supported compiling target. As well as Florian Klämpfl the original author, Daniël Mantione also contributed significantly to make this happen, providing the original port of the run-time library to OS/2 and EMX. The compiler improved gradually, and the DOS version migrated to the GO32v2 extender. This culminated in release 0.99.5, which was much more widely used than prior versions, and was the last release aiming only for Borland Pascal compliance; later releases added a Delphi compatibility mode. This release was also ported to systems using Motorola 68000 family (m68k) processors.

With release 0.99.8 the Win32 target was added, and a start was made with incorporating some Delphi features. Stabilizing for a non-beta release began, and version 1.0 was released in July 2000. The 1.0.x series was widely used, in business and education. For the 1.0.x releases, the port to 68k CPU was redone, and the compiler produced stable code for several 68k Unix-like and AmigaOS operating systems.

Version 2

During the stabilization of what would become 1.0.x, and also when porting to the Motorola 68k systems, it was clear that the design of the code generator was far too limited in many aspects. The principal problems were that adding processors meant rewriting the code generator, and that the register allocation was based on the principle of always keeping three free registers between building blocks, which was inflexible and difficult to maintain.

For these reasons, the 1.1.x series branched off from the 1.0.x main branch in December 1999. At first, changes were mostly clean-ups and rewrite-redesigns to all parts of the compiler. The code generator and register allocator were also rewritten. Any remaining missing Delphi compatibility was added.

The work on 1.1.x continued slowly but steadily. In late 2003, a working PowerPC port became available, followed by an ARM port in summer 2004, a SPARC port in fall 2004, and an x86-64-AMD64 port in early 2004, which made the compiler available for a 64-bit platform.

In November 2003, a first beta release of the 1.1.x branch was packaged and numbered 1.9.0. These were quickly followed by versions 1.9.2 and 1.9.4; the latter introduced OS X support. The work continued with version 1.9.6 (January 2005), 1.9.8 (late February 2005), 2.0.0 (May 2005), 2.0.2 (December 2005), and 2.0.4 (August 2006).

Version 2.2.x

In 2006, some of the major reworks planned for 2.2, such as the rewrite of the unit system, had still not begun, and it was decided to instead start stabilizing the already implemented features.

Some of the motives for this roadmap change were the needs of the Lazarus integrated development environment project, particularly the internal linker, support for Win64, Windows CE, and OS X on x86, and related features like DWARF. After betas 2.1.2 and 2.1.4, version 2.2.0 was released in September 2007, followed by version 2.2.2 in August 2008 and version 2.2.4 in March 2009.

The 2.2.x series vastly improved support for the ActiveX and Component Object Model (COM) interface, and Object Linking and Embedding (OLE), though bugs were still being found. The delegation to interface using the implements keyword was partly implemented, but was not complete as of March 2011. [1] Library support for ActiveX was also improved.

Another major feature was the internal linker for Win32, Win64, and Windows CE, which greatly improved linking time and memory use, and make the compile-link-run cycle in Lazarus much faster. The efficiency for smart-linking, or dead code elimination, was also improved.

Minor new features included improved DWARF (2/3) debug format support, and optimizations such as tail recursion, omission of unneeded stack frames and register-based common subexpression elimination (CSE) optimization. A first implementation of generic programming (generics) support also became available, but only experimentally.

Version 2.4.x

The 2.4.x release series had a less clear set of goals than earlier releases. The unit system rewrite was postponed again, and the branch that became 2.4 was created to keep risky commits from 2.2 to stabilize it. Mostly these risky commits were more involved improvements to the new platforms, Mac PowerPC 64, Mac x86-64, iPhone, and many fixes to the ARM and x86-64 architectures in general, as well as DWARF.

Other compiler improvements included whole program optimization (WPO) and devirtualization and ARM embedded-application binary interface (EABI) support.

Later, during the 2.2 cycle, a more Delphi-like resource support (based on special sections in the binary instead of Pascal constants) was added. This feature, direly needed by Lazarus, became the main highlight of the branch.

Other more minor additions were a memory manager that improved heap manager performance in threaded environments, small improvements in Delphi compatibility such as OleVariant, and improvements in interface delegation.

On January 1, 2010, Free Pascal 2.4.0 was released, followed on November 13, 2010, by bug fix release 2.4.2, with support for for..in loops, sealed and abstract classes, and other changes. [2]

Version 2.6.x

In January 2012, Free Pascal 2.6 was released. This first version from the 2.6 release series also supported Objective Pascal on OS X and iOS targets and implemented many small improvements and bug fixes. In February 2013, FPC 2.6.2 was released. It contained NetBSD and OpenBSD releases for the first time since 1.0.10, based on fresh ports. In March 2014, the last point release in the 2.6 series, 2.6.4, was launched, featuring mostly database (fcl-db) updates.

Version 3.0.x

Version 3.0.0 was released on November 25, 2015, and was the first major release since January 1, 2012. It introduced many new language features. [3]

Version 3.0.2 was released on February 15, 2017, and includes bug fixes and minor compiler updates.
Version 3.0.4 was released on November 28, 2017.
It includes many language improvements over previous versions, including an internal linker for Executable and Linkable Format (ELF), Arm AARCH64 for iOS and Linux, a revived i8086 platform, extended libraries and much more.

Version 3.2.x

The next major release, version 3.2.0, was published on June 19, 2020. It introduced many new language features, including generic routines, standard namespaces, managed records and expanded functionality for dynamic arrays, in addition to the advent of new standard units and the support of additional platforms. [4]

Version 3.2.2 was released on May 20, 2021, and supports macOS on AArch64 and naming of threads. Additionally it includes bug fixes and minor compiler updates. [5]

Targets

Processor architectureOperating system, deviceVersion 3.2.2 or 3.3.1 (Trunk)Version 3.0.0 - 3.2.0Version 2.6.2Version 2.6.0Version 2.4.4Version 2.4.2Version 2.4.0Version 2.2.4Version 2.0.xVersion 1.0.x
i386 DOS (GO32v2 extender)YesYesYesYesYesYesYesYesYesYes
FreeBSD YesYesYesYesYesYesYesYesYesYes
OpenBSDYesYesYesNoNoNoNoNoNoYes
NetBSDYesYesYesNoNoNoNoNoNoYes
LinuxYesYesYesYesYesYesYesYesYesYes
macOSYesYesYesYesYesYesYesYesNoNo
OS/2YesYesYesYesYesYesYesYesYesYes
WindowsYesYesYesYesYesYesYesYesYesYes
Windows CEYesYesYesYesYesYesYesNoNoNo
BeOS YesYesYesYesYesYesYesYesYesYes
Haiku YesYesYesYesYesYesYesNoNoNo
NetWare YesYesYesYesYesYesYesYesYesNo
Solaris YesYesYesYesYesYesNoNoNoYes
iPhone Sim YesYesYesYesNoNoNoNoNoNo
QNX Neutrino YesNoNoNoNoNoNoNoNoYes
Android YesYesYesNoNoNoNoNoNoNo
AROS YesYesNoNoNoNoNoNoNoNo
x86-64 FreeBSD YesYesYesYesYesYesNoNoNoNo
OpenBSDYesYesYesUn­knownUn­knownUn­knownUn­knownUn­knownUn­knownUn­known
NetBSDYesYesYesUn­knownUn­knownUn­knownUn­knownUn­knownUn­knownUn­known
LinuxYesYesYesYesYesYesYesYesUn­knownNo
macOSYesYesYesYesYesYesYesNoNoNo
Windows YesYesYesYesYesYesYesNoNoNo
iPhone SimYesYesYesYesNoNoNoNoNoNo
AROS YesYesYesYesYesYesNoNoNoNo
DragonFly BSD YesYesYesYesYesYesNoNoNoNo
SolarisYesYesYesYesYesYesNoNoNoNo
HaikuYesYesNoNoNoNoNoNoNoNo
AndroidYesYesNoNoNoNoNoNoNoNo
ARM iOS YesYesYesYesYesYesYesNoNoNo
Game Boy Advance YesYesYesYesYesYesYesNoNoNo
Nintendo DS YesYesYesYesYesYesYesNoNoNo
LinuxYesYesYesYesYesYesYesYesUn­knownNo
Windows CEYesYesYesYesYesYesYesYesUn­knownNo
Android YesYesYesNoNoNoNoNoNoNo
Embedded YesYesYesNoNoNoNoNoNoNo
Embedded Rasp-Pi YesYesNoNoNoNoNoNoNoNo
AROSYesYesNoNoNoNoNoNoNoNo
AArch64 LinuxYesYesYesNoNoNoNoNoNoNo
iOSYesYesYesNoNoNoNoNoNoNo
AndroidYesYesNoNoNoNoNoNoNoNo
macOSYesNoNoNoNoNoNoNoNoNo
AVR EmbeddedYesYesNoNoNoNoNoNoNoNo
PowerPCLinuxYesYesYesYesYesYesYesYesYesNo
macOSYesYesYesYesYesYesYesYesYesNo
Classic Mac OSYesYesYesYesYesNoNoYesYesNo
AmigaOS 4YesYesYesYesYesUn­knownUn­knownUn­knownYesNo
MorphOS YesYesYesYesYesUn­knownUn­knownUn­knownYesNo
AIX YesYesYesYesNoNoNoNoNoNo
Wii YesYesYesYesYesNoNoNoNoNo
PowerPC 64-bitLinuxYesYesYesYesYesYesYesYesNoNo
macOSYesYesYesYesYesYesYesNoNoNo
AIXYesYesYesYesNoNoNoNoNoNo
SPARCSolarisYesYesYesYesYesYesNoNoNoNo
NetBSDYesYesYesYesYesYesNoNoNoNo
EmbeddedYesYesYesYesYesYesNoNoNoNo
LinuxYesYesYesYesYesYesNoNoNoNo
SPARC64LinuxYesYesYesYesNoNoNoNoNoNo
RISC-V EmbeddedYesYesNoNoNoNoNoNoNoNo
RISC-V64EmbeddedYesYesNoNoNoNoNoNoNoNo
Java virtual machine Java YesYesNoNoNoNoNoNoNoNo
AndroidYesYesNoNoNoNoNoNoNoNo
MIPS (BE and LE)LinuxYesYesNoNoNoNoNoNoNoNo
EmbeddedYesYesNoNoNoNoNoNoNoNo
8086 (16-bit)DOSYesYesNoNoNoNoNoNoNoNo
Win16 YesYesNoNoNoNoNoNoNoNo
EmbeddedYesYesNoNoNoNoNoNoNoNo
m68k LinuxYesYesNoNoNoNoNoNoNoYes
NetBSDYesYesNoNoNoNoNoNoNoYes
AmigaOSYesYesNoNoNoNoNoNoNoYes
Atari TOS YesYesNoNoNoNoNoNoNoYeslimited cross-compiler only
Palm OS YesYesNoNoNoNoNoNoNoUn­known
Z80 EmbeddedYesNoNoNoNoNoNoNoNoNo
ZX SpectrumYesNoNoNoNoNoNoNoNoNo
MSX-DOSYesNoNoNoNoNoNoNoNoNo
WebAssembly Web browsersYesNoNoNoNoNoNoNoNoNo

Free Pascal also supports byte code generation for the Java Virtual Machine as of version 3.0.0 and targets both Oracle's Java and Google's Android JVM, [6] although Object Pascal syntax is not fully supported. Free Pascal 3.0.0 also supports ARMHF platforms like the Raspberry Pi, including ARMV6-EABIHF running on Raspbian. Work on 64-bit ARM has resulted in support for iOS in 3.0.0 as well. A native ARM Android target has been added, ending the formerly hacked ARM Linux target to generate native ARM libraries for Android. This makes porting Lazarus applications to Android (using Custom Drawn Interface [7] ) easier. Since FPC 2.6.2, OpenBSD and NetBSD are supported on IA32 and X86_64 architectures. A new target embedded has been added for usage without OS (ARM Cortex M and MIPS mainly). With InstantFPC it is possible to run Pascal programs, which are translated just in time, as Unix scripts or CGI back-end.

Ultibo core is an embedded or bare metal development environment for Raspberry Pi. [8] Ultibo is based on Free Pascal and developed under a modified version of Lazarus. The IDE is PC based but has been ported to Linux and Mac as well. Ultibo is an OS-less runtime and has support for most functions and allows the programmer full control over the hardware via the RTL units. The runtime implements multi-threaded, pre-emptive multitasking. The programmer can put threads on a specific CPU or let the runtime divide the load automatically or a mix of the two. Most Raspberry Pi models are supported including the A, B, A+ and B+ as well as the Raspberry Pi 2B, 3B, 4B/400/CM4 and Zero. [9]

Integrated development environments

Like most modern compilers, Free Pascal can be used with an integrated development environment (IDE). Besides independent IDEs there are also plugins to various existing IDEs

Lazarus IDE in Windows 10 Lazarus 2.0 unter Windows 10.png
Lazarus IDE in Windows 10
Free Pascal IDE in Linux showing "Hello, World!" program in German FPIDE 1.0.10 de.png
Free Pascal IDE in Linux showing "Hello, World!" program in German

Bundled libraries

Apart from a compiler and an IDE, Free Pascal provides the following libraries:

Examples of software produced with Free Pascal

See also

Related Research Articles

<span class="mw-page-title-main">Pascal (programming language)</span> Programming language

Pascal is an imperative and procedural programming language, designed by Niklaus Wirth as a small, efficient language intended to encourage good programming practices using structured programming and data structuring. It is named in honour of the French mathematician, philosopher and physicist Blaise Pascal.

Turbo Pascal is a software development system that includes a compiler and an integrated development environment (IDE) for the Pascal programming language running on CP/M, CP/M-86, and DOS. It was originally developed by Anders Hejlsberg at Borland, and was notable for its extremely fast compilation. Turbo Pascal, and the later but similar Turbo C, made Borland a leader in PC-based development.

In computing, cross-platform software is computer software that is designed to work in several computing platforms. Some cross-platform software requires a separate build for each platform, but some can be directly run on any platform without special preparation, being written in an interpreted language or compiled to portable bytecode for which the interpreters or run-time packages are common or standard components of all supported platforms.

<span class="mw-page-title-main">Windows API</span> Microsofts core set of application programming interfaces on Windows

The Windows API, informally WinAPI, is Microsoft's core set of application programming interfaces (APIs) available in the Microsoft Windows operating systems. The name Windows API collectively refers to several different platform implementations that are often referred to by their own names. Almost all Windows programs interact with the Windows API. On the Windows NT line of operating systems, a small number use the Native API.

C++Builder is a rapid application development (RAD) environment for developing software in the C++ programming language. Originally developed by Borland, as of 2009 it is owned by Embarcadero Technologies, a subsidiary of Idera. C++Builder can compile apps for Windows, iOS, macOS, and Android. It includes tools that allow drag-and-drop visual development, making programming easier by incorporating a WYSIWYG graphical user interface builder.

The Visual Component Library (VCL) is a visual component-based object-oriented framework for developing the user interface of Microsoft Windows applications. It is written in Object Pascal.

A cross compiler is a compiler capable of creating executable code for a platform other than the one on which the compiler is running. For example, a compiler that runs on a PC but generates code that runs on an Android smartphone is a cross compiler.

<span class="mw-page-title-main">Delphi (software)</span> General-purpose programming language and a software product

Delphi is a general-purpose programming language and a software product that uses the Delphi dialect of the Object Pascal programming language and provides an integrated development environment (IDE) for rapid application development of desktop, mobile, web, and console software, currently developed and maintained by Embarcadero Technologies.

Object Pascal is an extension to the programming language Pascal that provides object-oriented programming (OOP) features such as classes and methods.

Borland Kylix is a compiler and integrated development environment (IDE) formerly sold by Borland, but later discontinued. It is a Linux software development environment based on Borland Delphi and Borland C++ Builder, which runs under Microsoft Windows. Continuing Delphi's classical Greek theme, Kylix is the name for an ancient Greek drinking cup. The closest supported equivalent to Kylix is the free Lazarus IDE package, designed to be code-compatible with Delphi. As of 2010 the project has been resurrected in the form of Delphi cross compiler for Mac and Linux, as shown in the Embarcadero's Delphi and C++ Builder roadmap. As of September 2011 with Kylix discontinued the framework for cross-platform development by Embarcadero is FireMonkey.

Virtual Pascal is a free 32-bit Pascal compiler, IDE, and debugger for OS/2 and Microsoft Windows, with some limited Linux support. Virtual Pascal was developed by Vitaly Miryanov and later maintained by Allan Mertner.

<span class="mw-page-title-main">DOS Navigator</span> File manager for DOS, OS/2 and Windows

DOS Navigator (DN) is an orthodox file manager for DOS, OS/2, and Windows.

<span class="mw-page-title-main">Lazarus (software)</span> Free cross-platform integrated development environment for Free Pascal

Lazarus is a free, cross-platform, integrated development environment (IDE) for rapid application development (RAD) using the Free Pascal compiler. Its goal is to provide an easy-to-use development environment for programmers developing with the Object Pascal language, which is as close as possible to Delphi.

<span class="mw-page-title-main">Turbo Vision</span>

Turbo Vision is a character-mode text user interface framework included with Borland Pascal, Turbo Pascal, and Borland C++ circa 1990. It was used by Borland itself to write the integrated development environments (IDE) for these programming languages. By default, Turbo Vision applications replicate the look and feel of these IDEs, including edit controls, list boxes, check boxes, radio buttons and menus, all of which have built-in mouse support. Later it was deprecated in favor of Object Windows Library, the Win16 API, and the GUI tools of Borland Delphi.

The Visual Component Framework (VCF) is an abandoned open source project for development under Microsoft Windows and Apple Macintosh that is distributed under the BSD license. It is an advanced C++ application framework that makes it easier to produce GUI-based C++ applications. The framework is C++ design and has built in support for rapid application development. The framework is designed to be portable over multiple platforms and compilers.

<span class="mw-page-title-main">PocketStudio</span>

PocketStudio by Winsoft is an IDE supporting rapid application development (RAD) for Palm OS and related operating systems such as Garnet OS or Access Linux Platform. In some regard similar to Delphi and Lazarus, it has a visual form designer, an object inspector and a source code editor.

RemObjects Software is an American software company founded in 2002 by Alessandro Federici and Marc Hoffman. It develops and offers tools and libraries for software developers on a variety of development platforms, including Embarcadero Delphi, Microsoft .NET, Mono, and Apple's Xcode.

This page details the history of the programming language and software product Delphi.

References

  1. bugs.freepascal.org
  2. User Changes 2.4.2
  3. "FPC New Features 3.0.0". Free Pascal wiki. Retrieved February 28, 2021.
  4. "FPC New Features 3.2.0 - Free Pascal wiki". wiki.freepascal.org. Retrieved June 20, 2020.
  5. "FPC New Features 3.2.2 - Free Pascal wiki". wiki.freepascal.org. Retrieved December 30, 2021.
  6. freepascal wiki: FPC JVM
  7. Custom Drawn Interface
  8. "Ultibo embedded Runtime Library". Ultibo.org. Ultibo.
  9. "Ultibo supported Pi boards". Ultibo.org.
  10. "ULIBO Core".
  11. "D_2D and D_3D plotting programs". sourceforge.net. Retrieved March 23, 2018.
  12. "MeKin2D: Subroutines for planar linkage mechanism kinematic simulation". sourceforge.net. Retrieved March 23, 2018.
  13. "Nim Pascal source". GitHub .
  14. "Tranzistow".

Official websites

General introduction

Sites specialized in game development