Free Pascal

Free Pascal コンパイラはオープンソースのObject Pascal コンパイラである。

1. 概説
-----

Free Pascalは、複数のCPUアーキテクチャ、複数のオペレーティングシステム  をサポートするコンパイラであり、広く用いられる各種システム向けに移植されている。言語仕様はObject Pascalに加えて、Turbo Pascal、Delphi、そして過去に存在したMacintoshコンパイラの方言に対応している。

Free Pascalは以前、FPK Pascalの名で知られていた。これは "Free Pascal Kompiler" の略ではなく、実際は作者のイニシャルから名をとったものである 。その後、プロジェクトの参加者が増えたため、誤解を避ける目的から1997年の終わりに、Free Pascal Compiler  と改名した。

FPCのドキュメントは詳細で、マニュアルは合計1800頁に及ぶ。

Free PascalにはTurbo Pascal風のテキストモードの統合開発環境  があるが、メインテナンス要員が足りないために、時として使い物にならなくなっていた。2005年の後半から改善の努力が続けられ、2006年に入ってからは、大きなバグは修正済みとなり、リリースしてもよい程度の品質になった。macOS用のFPCはコマンドラインからはもちろん、Xcodeの一部として動作させることもできる。

Turbo Pascal や Delphi 同様、FPCは Pascal コードの中にアセンブリ言語コードを記述できるような優れた仕組みをもっている。FPCの内蔵アセンブラは、複数のアーキテクチャと表記法をサポートしている。

ライブラリは、基本プログラムに必要な「Run-Time Library 」と、多種多様なクラスや非ビジュアルコンポーネントで構成された「Free Component Library 」がある。

Free Pascal コンパイラを採用したオープンソースのIDEであるLazarusには、Delphi の Visual Component Library  と高い互換性を持つLazarus Component Library  があり、Free PascalのRTLとFCLを組み合わせてGUIアプリケーションを開発できる。

2. 言語仕様
-------

FPCはPascalの方言のうちで、デファクトスタンダードとなっているBorland PascalとDelphiを採用している。バージョン2.0以降、Delphi7互換性は継続的に実施または改善された。

また、Mac OSとのインタフェースを容易にするため、若干ながら Apple Pascal 文法をサポートするための努力も行われてきた。

コンパイラには複数の「コンパイル互換モード」を持っており、Defaultモード、Delphi互換モード、Turbo Pascal互換モード、FPCモード、Object Pascalモード、Mac Pascalモードがある。

3. 歴史
-----

3.1. はじまり
---------

FPC は ボーランド が「Borland Pascal 8は出さない、次の版はWindows専用になる」と明らかにしたときに出現した。学生であった Florian Paul Klämpfl は自分でコンパイラを作成しようと着手したのである。コンパイラは最初から Turbo Pascal 方言を用い、同時期にDJGPPプロジェクトが作成したGO32V1DOSエクステンダ向けの32ビットコードを生成した。当初のコンパイラ自身は Turbo Pascal でコンパイルされた 16ビットDOSアプリケーションであった。二年後に、コンパイラは自分自身をコンパイルできるようになり、32ビットアプリケーションになった。

3.2. 拡大
-------

最初の32ビットコンパイラがネットに投稿されると、協力者が現れるようになった。数年後にはMichael van Canneytの手でLinuxに移植された。DOS版からは、OS/2 + EMXに移植された。DOS版の改良はその後も進み、GO32V2を用いるようになった。これらの成果はリリース0.99.5としてまとめられ、それまでの版より広い範囲で用いられるようになった。これがTurbo Pascal互換性にとどまっていた最後の版で、後のものは Delphi互換モードを追加していくことになる。リリース0.99.5はモトローラ680x0  用にも移植された。

リリース0.99.8で、Win32がターゲットとして加えられ、Delphiの仕様と協調する作業が始められた。1.0版の安定化が進められ、2000年6月に記念すべき公開にこぎ着けた。1.0.xシリーズは企業にも教育機関にも広く用いられた。1.0.xでは、68k向けの移植が再度行われ、多くの68k用UNIXやAmiga用の安定なコードを生成するようになった。

3.3. 新時代
--------

後に1.0.xとなる安定化作業及び68k向け移植の際に、コード生成部分にの設計上の限界がはっきりした。二つの基本的な問題があり、一つは、新しいプロセッサをサポートしようと思うと、コードジェネレータを根本的に書き直す必要があったこと、レジスタ割当の原則が管理しにくく、自由度を欠いていたことである。

これらの理由から、1999年12月に1.0.xシリーズから枝分かれする形で1.1.xシリーズが作られた。最初はコンパイラの各部分のクリーンアップ及び再設計と書き直し、次いでコードジェネレータとレジスタアロケータの書き直しが行われた。余得として、不足していたDelphi互換性が向上した。

1.1.xの改良は遅かったが、着実であった。2003年遅くにはPowerPC  への移植が着手され、ARM及びSPARCへの移植も2004年の夏から秋にかけて行われた。AMD64への移植は2004年早くに行われた。AMD64への移植によって、64ビットコンパイラとしての機能が加わった。

2003年11月に、1.1.xの最初のベータ版が公開され、版名を1.9.0とすることにした。その後すぐに1.9.2、1.9.4が公開された。1.9.4はMac OS Xをサポートした記念すべき最初の版であった。

その後、1.9.6が2005年1月、1.9.8が2005年2月、2.0.0が2005年5月、2.0.2が2005年12月に公開された。

2012年1月に公開された 2.6.0 は、ネストした型、クラス変数、クラス/型ヘルパー、レコードのfor..inなどが実装され、Delphi互換性が向上した。さらにMac OS XとiOSを対象としたObjective Pascalの方言もサポートした。2013年2月に公開された 2.6.2 は、ARMアーキテクチャコンパイラの改良およびNetBSDとOpenBSDに関する多数の不具合修正が行われた。最新安定版の2.6.4ではデータベース接続パッケージfcl-dbに対して多くの改良と修正が行われた。

4. バージョン 3.0の新機能
----------------

言語
名前空間ユニット
動的配列コンストラクタ
Default関数
型ヘルパー
コードページ情報を含むANSI文字列コード生成
Class field reordering
Removing the calculation of dead values
Shortcuts to speed up floating point calculations
Constant propagation
Dead store elimination
Node dfa for liveness analysisユニットとパッケージ
TDBF - Visual FoxProファイルをサポート
Bufdataset - ftAutoIncフィールドをサポート
TDBF, bufdataset  allow escaped delimiters in string expression filter
TODBCConnection - 64ビットODBCをサポート
TZipper - zip64フォーマットをサポート
より多くのファイル関連RTLルーティンでマルチコードページとUnicodeをサポート
SQL parser/generatorの改良ツールなど
新しいPas2jniユーティリティmacOS / iOS
新しいiosxlocaleユニット 新しいコンパイラターゲット
Java Virtual MachineとDalvikのJavaコード生成をサポート
AIXをサポート
16ビットリアルモードMS-DOSをサポート
Androidをサポート
armhf EABIをサポート
AROSをサポート

5. ターゲットとなるシステム
---------------



6. 関連項目
-------

Lazarus - RAD環境
Turbo Pascal
Delphi

7. 外部リンク
--------

[1]
[2] - FPC用RAD
[3] - Classic Mac OSへの移植状況
[4] - Daniël Mantione による新版の詳しい紹介。開発史も。
[5] - さまざまな環境向けに、FPCをDelphi IDE風に統合する無料ツールキット。
[6] - FPC用Win32ベースのIDE。デバッガを含む。
[7] - FPCで記述したPhotoshop風画像エディタ。
[8] - ゲームボーイアドバンス向けFPCプロジェクト。