![]() A private build of Free Pascal cross-compiler (from i386 win32 to x86-64 win64), version 2.3.1 |
|
Developer(s) | Florian Klämpfl & Volunteers |
---|---|
Stable release | 2.6.0 / January 1, 2012 |
Written in | Object Pascal and Assembly |
Operating system | Cross-platform |
Type | Compiler |
License | GNU General Public License |
Website | www.freepascal.org |
![](https://web.archive.org/web/20120504173144im_/https://upload.wikimedia.org/wikipedia/commons/thumb/6/6f/20020730092044_-_FreePascal_IDE.jpg/240px-20020730092044_-_FreePascal_IDE.jpg)
Free Pascal Compiler (FPC for short, and formerly known as FPK Pascal[1]) is a free Pascal and Object Pascal compiler.
In addition to its own Object Pascal dialect, Free Pascal supports, to varying degrees, the dialects of several other compilers, including those of Turbo Pascal, Delphi, and some historical Macintosh compilers. Dialect is selected on a per-unit (module) basis, and more than one dialect can be used to produce a single program.
A member of the write once, compile anywhere campaign, Free Pascal is available for many architectures and operating systems (see Targets). It has an excellent support for integration of assembly language, and supports internal assembler in a number of dialects.
Separate projects exist to facilitate the development of cross-platform graphical applications, the most prominent one being the Lazarus IDE.
Contents |
Supported dialects
Free Pascal adopted the de facto standard dialect of Pascal programmers, Borland Pascal and, later, Delphi. From version 2.0 on, the Delphi 7 compatibility has been continuously implemented or improved.
In fact, the project has a compilation mode concept, and the developers made it clear that they would incorporate working patches for the ANSI/ISO standardized dialects to create a standards-compliant mode.
A small effort has been made to support some of the Apple Pascal syntax, to ease interfacing to Mac OS and Mac OS X. Since the Apple dialect implements some Standard Pascal features that Turbo Pascal and Delphi omit, Free Pascal is a bit more ISO-compatible than these.
The 2.2.x series does not significantly change the dialect objectives beyond Delphi 7, instead they aim for closer compatibility. The project still lacks the Delphi functionality of compiler-supported exporting of classes from shared libraries, which is for example useful for Lazarus, which implements packages of components.
As of 2011 in the current development branch several Delphi 2006-specific features have been added, and some of the starting work for the features new in Delphi 2009 (most notably the addition of the UnicodeString
type) has been done. The development branch also features an “Objective-Pascal” extension for Objective-C (Cocoa) interfacing.
The current trunk (2.5.1) version implements basic ISO Pascal mode, though many things such as Get
and Put
procedure and file buffer variable concept for file handling are still missing.
History
The early years
Free Pascal emerged when Borland made it clear that Borland Pascal development for MS-DOS would stop with version 7, to be replaced by a Windows-only product (which became Delphi later on).
Student Florian Paul Klämpfl started developing his own compiler, written in the Turbo Pascal dialect, and produced 32-bit code for the go32v1 extender, which was used and developed by the DJGPP project at that time.
Originally, the compiler itself 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 made by Michael van Canneyt, five years before Kylix became available.
The DOS port was adapted for use in OS/2 using the EMX extender which made OS/2 the second supported compilation target - apart from support of Florian Klämpfl as the original author, Daniël Mantione contributed significantly to make this happen and provide the original port of the run-time library to OS/2 / EMX. The compiler improved gradually, and the MS-DOS version migrated to the go32v2 extender. This culminated in release 0.99.5, which was much more widely used than previous versions, and was the last release aiming only for Turbo Pascal compliance—later releases added a Delphi compatibility mode. This release was also ported to systems using a 680x0 processor.
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, both as an enterprise and educational tool. For the 1.0.x releases, the port to 68k CPU was redone, and the compiler produced stable code for a number of 68k Unix and AmigaOS operating systems.
The second generation
During the stabilization of what would become 1.0.x, and specially when porting to the Motorola 68k systems, it was clear that the design of the code generator was far too limited in many ways. The principal problems were that adding processors basically 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 hard to maintain.
For these reasons, the 1.1.x branched from the 1.0.x main branch in December 1999. At first, changes were mostly clean-ups and rewrite/design to all parts of the compiler, and then the code generator and register allocator were rewritten. As a bonus, remaining missing Delphi compatibility was added.
The work on 1.1.x continued slowly but steadily, and 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 AMD64 port—which made the compiler available for a 64-bit platform—in early 2004.
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; version 1.9.4 introduced Mac 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).
Consolidation: the 2.2 series
In 2006 some of the major reworks planned for 2.2, such as the rewrite of the unit system, had not started, and it was decided to start stabilizing the already implemented features.
Some of the motivations for this roadmap change were the needs of the Lazarus project, particularly the internal linker, support for Win64, Windows CE, and Mac 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 the ActiveX/COM, interface, and OLE support, though bugs are still being found. The delegation to interface using the implements
keyword is partially implemented, but was not complete as of March 2011.[2] Library support for ActiveX was also improved.
Another major highlight was the internal linker for Win32, Win64, and Windows CE, which much improves linking time and memory use, and makes the compile-link-run cycle in Lazarus much faster. The efficiency for smart-linking, or dead code elimination, has also been improved.
Minor new features are improved DWARF (2/3) debug format support, and optimizations such as tail recursion, omission of unneeded stack frames and register-based CSE optimization. A first implementation of generics support is also available, but only for exploration purposes.
The 2.4.x series
The 2.4.x 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 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 points 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.
Free Pascal 2.4.0 was released on January 1, 2010, followed by bug fix release 2.4.2 on November 13, 2010, containing support for for..in
loops, and sealed
and abstract
classes, and other changes.[3]
The 2.6.x series
In January 2012, Free Pascal 2.6 has been released. This version also supports ObjectivePascal on Mac OS X and iOS targets and implements numerous small improvements and bug fixes.
Targets
Architecture | OS/Device | Version 2.4.2 | Version 2.4.0 | Version 2.2.4 | Version 2.0.x | Version 1.0.x |
---|---|---|---|---|---|---|
i386 | DOS (GO32v2 extender) | Yes | Yes | Yes | Yes | Yes |
FreeBSD (6.x and 7.x) | Yes | Yes | Yes | Unknown | Unknown | |
Linux | Yes | Yes | Yes | Yes | Yes | |
Mac OS X | Yes | Yes | Yes | No | No | |
OS/2 | Yes | Yes | Yes | Yes | Yes | |
Windows | Yes | Yes | Yes | Yes | Yes | |
Windows CE | Yes | Yes | No | No | No | |
Haiku | Yes | Yes | No | No | No | |
Netware | Unknown | Unknown | Unknown | Yes | No | |
Solaris | Yes | No | No | No | No | |
x86-64 | FreeBSD | Yes | No | No | No | No |
Linux | Yes | Yes | Yes | Unknown | No | |
Mac OS X | Yes | Yes | No | No | No | |
Windows | Yes | Yes | No | No | No | |
Solaris | Yes | No | No | No | No | |
ARM | iOS | Yes | Yes | No | No | No |
Game Boy Advance (GBA) | Yes | Yes | No | No | No | |
Nintendo DS | Yes | Yes | No | No | No | |
Linux | Yes | Yes | Yes | Unknown | No | |
Windows CE | Yes | Yes | Yes | Unknown | No | |
PowerPC | Linux | Yes | Yes | Yes | Yes | No |
Mac OS X | Yes | Yes | Yes | Yes | No | |
Mac OS Classic | No | No | Unknown | Yes | No | |
MorphOS | Unknown | Unknown | Unknown | Yes | No | |
PowerPC 64-bit | Linux | Yes | Yes | Yes | No | No |
Mac OS X | Yes | Yes | No | No | No | |
SPARC | Solaris | Yes 32bit only | No | No | No | No |
Linux | Yes | Yes | Yes | Unknown | No |
As of version 3.0, Free Pascal will also support byte code generation for the Java Virtual Machine[4]
Integrated development environments (IDEs)
Like most modern compilers, Free Pascal can be used with an integrated development environment (IDE).
Lazarus
Lazarus is the most popular IDE used by Free Pascal programmers. It provides a Delphi-like development experience, and can be used to create console and graphical applications.
Lazarus provides a cross-platform user interface framework, called Lazarus Component Library (LCL). Graphical applications created with LCL can be ported to another platform with a recompilation.
MSEide
MSEide is another Free Pascal-based IDE that is aimed at building lightweight applications[citation needed]. MSEgui, like LCL to Lazarus, is the class library that comes with MSEide. It communicates directly with X11 via Xlib on Linux, and gdi32 under Windows, with support for multiple document interface (MDI) and visual form inheritance.
Software produced with Free Pascal
- Free Pascal itself is written in Object Pascal and assembly language, and compiled by itself.
- Lazarus: Free Pascal’s affiliated Delphi-like software package for rapid development of graphical applications.
- Pixel image editor: a Photoshop-like image editor, arguably among the best-known software created with Free Pascal[citation needed].
- SFS Technology: Linux technology to use portable stand-alone applications on various Linux distributions (such as Ubuntu).
- Peazip: an open source archiver.
- Double Commander: a cross-platform open source file manager.
- Morfik: Morfik WebOS AppBuilder uses Free Pascal to produce the resulting CGI binaries.
- Northworld: Northworld, an AD&D based fantasy RPG written entirely in FreePascal. Utilizes colored extended ASCII in 80x50 textmode to simulate low res 2D topographical graphics providing a nostalgic early Ultima style game experience.
- Hedgewars: a Worms-like turn based strategy game.
- MRIcron: a medical image visualization and analysis package. The software provides tools for drawing volumes of interest and volume rendering. In addition, it includes non-parametric statistical mapping (NPM) and conversion of images from DICOM format to NIfTI format (dcm2nii). It is currently available for Windows (using WinAPI), Linux (GTK1, GTK2 or QT), and Mac OS X (Carbon or GTK1).
- Virtual Magnifying Glass: a simple and customizable free, open source, screen magnification tool for Windows, Linux and FreeBSD. It has been downloaded over 170.000 times over 5 years.
- Cactus Jukebox: an audio player with a database to organize music file collections, for Linux and Win32.
- Becape: an open source backup (and restore) tool for personal and desktop usage.Can create incremental backups; stores backups in a SQLite database.
- Master Maths: Software for computer based mathematics training. Developed with fpGUI Toolkit, and makes use of Firebird RDBMS and tiOPF v2 for object persistence. Runs under Linux and Windows.
- OutKafe: next-generation free and open source cybercafe management suite. OutKafe is running hundreds of cybercafes around the world.
- CQRLOG: an advanced amateur radio logger based on the Firebird database. It provides radio control based on hamlib libraries (currently supports 140+ radio types and models), DX cluster connection, QRZ callbook (web version), a grayliner, ON6DP QSL manager database support and a country resolution algorithm based on country tables developed by OK1RR.
- Dedalu: a collection of small and simple projects (games, editors, utilities, etc.) developed with Lazarus and Free Pascal by Giuseppe Ridinò (a.k.a. Pepecito).
- TruckBites: USA-specific business management software for independent trucking operators.
- Mundo The Game: an in-progress open-source multi-platform 3D MMORPG.
- Arkadia.com: a real-estate website that uses Free Pascal to implement the 64-bit ISAPI module.
- EZlect: masking plug-in for Photoshop, written using Delphi for Windows, and Free Pascal for Mac OS X.
- WinFF: a GUI for the command line video converter, FFMPEG. It will convert almost any video file that FFmpeg can convert, and can handle multiple files in multiple formats at one time. WinFF is open source and cross platform, written in Free Pascal and Lazarus.
- MyNotex: a free note-taking and notes manager software for GNU/Linux.
See also
- Morfik: an RAD IDE for Ajax-based Web applications that uses Free Pascal as the back-end for server-side compiling.
- fpGUI Toolkit: a 100% Object Pascal language implemented toolkit for cross-platform application development, developed with the Free Pascal compiler; all widgets are custom-drawn (painted by the toolkit itself) to reduce library dependencies and simplify deployment. It provides single-source portability across Linux, MS Windows, *BSD, Solaris and embedded ARM devices such as those using Embedded Linux and Windows CE.
References
- ^ Free Pascal used to be known as FPK Pascal, where FPK stands for the author Florian Paul Klämpfl. The name of the project was changed to Free Pascal Compiler at the end of 1997.
- ^ http://bugs.freepascal.org/view.php?id=8951
- ^ See [1].
- ^ freepascal wiki: FPC JVM. Seen on August 23rd, 2011.
External links
Official websites
General introduction
- Introduction to Free Pascal 2.0, by Daniël Mantione, with in-depth introduction to the new version and a bit of its development history.
- Getting Started with FPC.
Development tools
- FPS Complete Win32 based IDE for FPC, including debugger (trace, breakpoint and watch windows).
- DevPascal Win32 based IDE for FPC.
- MSEide+MSEgui - a RAD/Cross Platform GUI Development System for FPC.
- Tabitha - a Windows portable editor for FreePascal.
- Morfik Win32 based IDE for build Ajax-based web applications that uses FPC for compiling back-end server side logic.
Sites specialized in game development
- Pascal Game Development
- Pascal Gamer Magazine
- FPC 4 GBA Initiative Free Pascal support project for the GameBoy Advance platform.
- FPC 4 GBA Programming Tutorial An extensive tutorial into game programming on the Game Boy Advance with Free Pascal.
|