Free Pascal Compiler ( FPC ) は、密接に関連するプログラミング言語であるPascalとObject Pascalのコンパイラです。GNU General Public Licenseの下でリリースされたフリーソフトウェアであり、例外条項により、他のソフトウェアライセンスと組み合わせて、ランタイムライブラリやパッケージへの静的リンクをあらゆる目的で許可しています。
独自のObject Pascal方言をサポートするほか、Borland Pascal(1990年版6までは「Turbo Pascal」と呼ばれていた)、Borland(後にEmbarcadero)Delphi、および一部の旧Macintoshコンパイラなど、他のPascal系コンパイラのいくつかの言語も一定程度サポートしています。言語はユニット(モジュール)ごとに選択され、1つのプログラムで複数の言語を使用できます。
一度記述すればどこでもコンパイルできるという理念に基づき、多くのCPUアーキテクチャとオペレーティングシステムに対応しています(「ターゲット」を参照)。インラインアセンブリ言語をサポートし、AT&TスタイルやIntelスタイルなど、複数の方言を解析できる内部アセンブラを搭載しています。
クロスプラットフォームのグラフィカルユーザーインターフェース(GUI)アプリケーションの開発を容易にするための個別のプロジェクトが存在し、その中でも最も有名なのがLazarus統合開発環境(IDE)である。
当初、Free PascalはPascalプログラマーの事実上の標準方言であるBorland Pascalを採用していましたが、後にDelphiのObject Pascalを採用しました。バージョン2.0以降、Delphiとの互換性は継続的に実装または改善されています。
コンパイラはさまざまなモードで動作することができ、例えば開発者たちは、米国規格協会(ANSI)と国際標準化機構(ISO)の標準化された方言に対応するパッチを組み込むことで、標準規格に準拠したモードを作成することを明らかにしました。
Classic Mac OSおよびmacOSとのインターフェースを容易にするため、Apple Pascal構文の一部をサポートする小規模な取り組みが行われました。Apple版では、Turbo PascalやDelphiでは省略されている標準的なPascal機能がいくつか実装されています。
2.2.xリリースシリーズでは、Delphi 7 レベルの構文をほぼ踏襲しつつ、方言の目標を大きく変更することなく、互換性の向上を目指しました。ただし、バージョン 2.2.0 では、Delphi がジェネリクスを本格的にサポートする数年前から、Free Pascal にジェネリクスのサポートが追加されました。
2011年には、開発ブランチにDelphi 2006固有の機能がいくつか追加され、Delphi 2009の新機能(特にUnicodeString型の追加)に関する初期作業の一部が完了しました。また、開発ブランチにはObjective-C(Cocoa )とのインターフェースのためのObjective-Pascal拡張機能も含まれています。
バージョン2.7.1以降、Free PascalはISO Pascalのサポートを追加しました。バージョン3.0.0以降、standardpascal.orgのP5 ISO Pascalコンパイラを一切変更せずにコンパイルできるようになりました。
Free Pascalは、BorlandがMS-DOS向けBorland Pascalの開発をバージョン7で終了すると明言した際に誕生しました。学生のFlorian Paul Klämpflは、Turbo Pascal方言で書かれた独自のコンパイラの開発を開始し、 GO32v1 DOSエクステンダー(DJのGNUプログラミングプラットフォームプロジェクトで開発・使用されている)用の32ビットコードを生成しました。
当初、このコンパイラはTurbo Pascalによってコンパイルされた16ビット実行ファイルだった。2年後、コンパイラは自身を32ビット実行ファイルにコンパイルできるようになった。
最初の32ビットコンパイラはインターネット上で公開され、最初の貢献者たちがプロジェクトに参加した。その後、Borland Kylix PascalコンパイラがLinux向けにリリースされる5年前に、Michael van CanneytによってLinux版が作成された。
DOS版は、Eberhard Mattes eXtender (EMX)を使用してOS/2で使用できるように改良され、OS/2はサポートされる2番目のコンパイルターゲットとなりました。オリジナルの作者であるFlorian Klämpflに加え、Daniël Mantioneもこの実現に大きく貢献し、ランタイムライブラリのOS/2およびEMXへのオリジナル移植版を提供しました。コンパイラは徐々に改良され、DOS版はGO32v2エクステンダーに移行しました。これはリリース0.99.5で最高潮に達し、以前のバージョンよりもはるかに広く使用され、Borland Pascal準拠のみを目的とした最後のリリースとなりました。後のリリースではDelphi互換モードが追加されました。このリリースは、Motorola 68000ファミリー(m68k) プロセッサを使用するシステムにも移植されました。
リリース0.99.8でWin32ターゲットが追加され、Delphiの機能の組み込みが開始されました。ベータ版ではない正式版の安定化作業が始まり、2000年7月にバージョン1.0がリリースされました。1.0.xシリーズは、ビジネスや教育分野で広く使用されました。1.0.xリリースでは、 68k CPUへの移植がやり直され、コンパイラはいくつかの68k Unix系およびAmigaOSオペレーティングシステム向けに安定したコードを生成しました。
1.0.xとなるバージョンの安定化作業中、そしてMotorola 68kシステムへの移植作業中に、コードジェネレータの設計が多くの点で限界を超えていることが明らかになった。主な問題点は、プロセッサを追加するとコードジェネレータを書き直す必要があったこと、そしてレジスタの割り当てが、ビルディングブロック間に常に3つの空きレジスタを確保するという原則に基づいていたため、柔軟性に欠け、保守が困難だったことである。
こうした理由から、1999年12月に1.1.xシリーズが1.0.xメインブランチから分岐しました。当初の変更点は、コンパイラのすべての部分におけるクリーンアップと再設計が中心でした。コードジェネレータとレジスタアロケータも書き直されました。また、不足していたDelphiとの互換性もすべて追加されました。
1.1.x の開発はゆっくりと着実に進められた。2003 年後半にはPowerPC版が完成し、続いて2004 年夏にはARM版、2004 年秋にはSPARC版、そして2004 年初頭にはx86-64 - AMD64 版がリリースされ、64 ビット プラットフォーム向けのコンパイラが利用可能になった。
2003年11月、 1.1.xブランチの最初のベータ版がパッケージ化され、バージョン番号1.9.0が付けられました。その後すぐにバージョン1.9.2と1.9.4がリリースされ、後者ではOS Xのサポートが導入されました。開発は続き、バージョン1.9.6(2005年1月)、1.9.8(2005年2月下旬)、2.0.0(2005年5月)、2.0.2(2005年12月)、2.0.4(2006年8月)がリリースされました。
2006年の時点では、ユニットシステムの書き換えなど、バージョン2.2で計画されていた主要な改修作業の一部はまだ始まっておらず、代わりに既に実装されている機能の安定化に着手することが決定された。
このロードマップ変更の動機には、Lazarus統合開発環境プロジェクトのニーズ、特に内部リンカー、x86上のWin64、Windows CE、OS Xのサポート、およびDWARFなどの関連機能が含まれていました。ベータ版2.1.2と2.1.4の後、2007年9月にバージョン2.2.0がリリースされ、続いて2008年8月にバージョン2.2.2、2009年3月にバージョン2.2.4がリリースされました。
2.2.xシリーズでは、 ActiveXおよびコンポーネントオブジェクトモデル(COM)インターフェース、オブジェクトリンクと埋め込み(OLE)のサポートが大幅に改善されましたが、バグはまだ発見されていました。キーワードを使用したインターフェースへの委譲は部分的に実装されていましたが、 2011年3月時点ではimplements完全ではありませんでした。 [ 1 ] ActiveX のライブラリサポートも改善されました。
もう一つの大きな特徴は、Win32、Win64、およびWindows CE用の内部リンカーが搭載されたことです。これにより、リンク時間とメモリ使用量が大幅に改善され、Lazarusにおけるコンパイル・リンク・実行サイクルが格段に高速化されました。スマートリンク、つまりデッドコード除去の効率も向上しました。
マイナーな新機能としては、DWARF(2/3)デバッグフォーマットのサポートの改善、末尾再帰、不要なスタックフレームの省略、レジスタベースの共通部分式除去(CSE)最適化などの最適化が挙げられます。また、ジェネリックプログラミング(ジェネリクス)のサポートも初めて実装されましたが、これは実験的な機能にとどまりました。
2.4.x リリース シリーズは、以前のリリースに比べて明確な目標設定がありませんでした。ユニット システムの書き換えは再び延期され、2.4 となるブランチは、2.2 のリスクの高いコミットを保持して安定性を確保するために作成されました。これらのリスクの高いコミットは、主に新しいプラットフォーム、Mac PowerPC 64、Mac x86-64、iPhone に対するより複雑な改善、および ARM と x86-64 アーキテクチャ全般、さらに DWARF に対する多くの修正でした。
その他のコンパイラの改良点としては、プログラム全体の最適化(WPO)と仮想化解除、およびARM組み込みアプリケーションバイナリインターフェース(EABI)のサポートが挙げられる。
その後、2.2サイクルにおいて、よりDelphiに近いリソースサポート(Pascal定数ではなくバイナリ内の特殊セクションに基づく)が追加されました。Lazarusにとって切実に必要とされていたこの機能は、このブランチの主要な目玉となりました。
その他のより小さな追加としては、スレッド環境でのヒープマネージャのパフォーマンスを向上させるメモリマネージャ、Delphi との互換性の小さな改善、インターフェース委譲の改善などがありました。OleVariant
2010年1月1日にFree Pascal 2.4.0がリリースされ、続いて2010年11月13日にバグ修正版2.4.2がリリースされ、for..inループsealedやabstractクラスのサポート、その他の変更が加えられた。[ 2 ]
2012年1月、Free Pascal 2.6がリリースされました。この2.6リリースシリーズの最初のバージョンでは、OS XとiOSターゲットでのObjective Pascalもサポートされ、多くの小さな改善とバグ修正が実装されました。2013年2月、FPC 2.6.2がリリースされました。これは、 1.0.10以来初めて、新しいポートに基づいてNetBSDとOpenBSDのリリースを含んでいました。2014年3月、2.6シリーズの最後のポイントリリースである2.6.4がリリースされ、主にデータベース(fcl-db)の更新が行われました。
バージョン3.0.0は2015年11月25日にリリースされ、2012年1月1日以来のメジャーリリースとなりました。多くの新しい言語機能が導入されました。[ 3 ]
バージョン3.0.2は2017年2月15日にリリースされ、バグ修正とマイナーなコンパイラ更新が含まれています。 バージョン3.0.4は2017年11月28日にリリースされました。 このバージョンには、以前のバージョンに比べて多くの言語機能の改善が含まれており、実行可能ファイルおよびリンク可能ファイル形式(ELF)用の内部リンカ、iOSおよびLinux向けのArm AARCH64、i8086プラットフォームの復活、拡張ライブラリなど、多くの新機能が追加されています。
次のメジャーリリースであるバージョン3.2.0は、2020年6月19日に公開されました。このバージョンでは、新しい標準単位の登場や追加プラットフォームのサポートに加え、汎用ルーチン、標準名前空間、管理レコード、動的配列の機能拡張など、多くの新しい言語機能が導入されました。[ 4 ]
バージョン3.2.2は2021年5月20日にリリースされ、AArch64上のmacOSとスレッドの命名をサポートしています。さらに、バグ修正とマイナーなコンパイラの更新も含まれています。[ 5 ]
リリース候補版であるFPC 3.2.4-rc1は、2025年6月にテスト用に利用可能になった。[ 6 ]
2025年7月現在 開発バージョン3.3.1はファイルとしてダウンロード可能でしたfpc.zip。[ 7 ]アーカイブの最新メンバー(メンバーがftp.zip抽出された日付を示すファイルを除く)は2023年9月15日付けでした。
Free Pascal はバージョン 3.0.0 以降、Java 仮想マシンのバイト コード生成もサポートしており、Oracle の Java と Google の Android JVMの両方をターゲットにしていますが、 Object Pascal 構文は完全にはサポートされていません。Free Pascal 3.0.0 は、 Raspbian 上で動作する ARMV6-EABIHF を含むRaspberry Piなどの ARMHF プラットフォームもサポートしています。64 ビット ARM での作業により、3.0.0 では iOS もサポートされています。ネイティブ ARM Android ターゲットが追加され、以前はハックされた ARM Linux ターゲットが終了し、Android 用のネイティブ ARM ライブラリが生成されます。これにより、Lazarus アプリケーションを Android に移植すること (カスタム描画インターフェイス[ 9 ]を使用) が容易になります。FPC 2.6.2 以降、OpenBSDとNetBSDは IA32 および X86_64 アーキテクチャでサポートされています。OS なしで使用するための新しいターゲットembedded が追加されました (主に ARM Cortex M と MIPS)。 InstantFPCを使用すると、PascalプログラムをUnixスクリプトまたはCGIバックエンドとして、その場で変換して実行することが可能です。
Ultibo core は、Raspberry Pi 用の組み込みまたはベアメタル開発環境です。[ 10 ] Ultibo は Free Pascal をベースにしており、Lazarus の修正版で開発されています。IDE は PC ベースですが、Linux と Mac にも移植されています。Ultibo は OS レス ランタイムであり、ほとんどの機能をサポートし、プログラマが RTL ユニットを介してハードウェアを完全に制御できるようにします。ランタイムは、マルチスレッドのプリエンプティブ マルチタスクを実装しています。プログラマは、スレッドを特定の CPU に配置するか、ランタイムに負荷を自動的に分散させるか、またはその両方を組み合わせることができます。A、B、A+、B+ のほか、Raspberry Pi 2B、3B、4B/400/CM4、Zero など、ほとんどの Raspberry Pi モデルがサポートされています。[ 11 ]
ほとんどの最新コンパイラと同様に、Free Pascalは統合開発環境(IDE)で使用できます。独立したIDEの他に、既存の様々なIDE用のプラグインも存在します。



コンパイラとIDEの他に、Free Pascalには以下のライブラリが含まれています。