Free Pascal

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
Free Pascal Compiler
FPC Command Line.PNG
CygwinのコマンドラインでFPCを操作
開発元 Florian Klämpfl と 有志
最新版 2.6.4 / 2014年3月11日(14か月前) (2014-03-11
最新評価版 3.1.1 / 2015年1月6日(5か月前) (2015-01-06
対応OS クロスプラットホーム
種別 コンパイラ
ライセンス GPL
公式サイト www.freepascal.org
テンプレートを表示
Linux用FPC IDE。2002年のNational Olympiad in Informatics, Chinaのための準備をしている
Windows版Lazarus 1.2.6 (Free Pascal 2.6.4)

Free Pascal コンパイラ(通称 FPC。以前は FPK Pascal)はオープンソースObject Pascal コンパイラである。

概説[編集]

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

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

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

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

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

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

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

言語仕様[編集]

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

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

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

歴史[編集]

はじまり[編集]

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

拡大[編集]

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

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

新時代[編集]

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

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

1.1.xの改良は遅かったが、着実であった。2003年遅くには PowerPC (PPC) への移植が着手され、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(2014年3月公開)ではデータベース接続パッケージ fcl-db に対して多くの改良と修正が行われた。

開発版(2.7.x)[編集]

バージョン2.7.xは、後に2.8または3.0として公開される。

言語
  • 名前空間ユニット(ドットを含むユニット名をサポート, Delphi互換)
  • 動的配列の生成(クラスのCreate関数のような生成関数をサポート, Delphi互換)
  • Default関数(指定した型の初期値を返す関数, Delphi互換)
  • 型ヘルパー(文字列リテラルや数値リテラルのような基本型のヘルパー)
  • コードページ情報を含むANSI文字列(Delphi互換)
コード生成
  • 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 (and descendents such as TSQLQuery) allow escaped delimiters in string expression filter
  • TODBCConnection(odbcconn) - 64ビットODBCをサポート
  • TZipper - zip64フォーマットをサポート
  • より多くのランタイムルーティンでマルチコードページとUnicodeをサポート
  • SQL parser/generatorの改良
ツールなど
  • 新しいPas2jniユーティリティ
OS X / iOS(Mac)
  • 新しいiosxlocaleユニット
新しいコンパイラターゲット
  • Java Virtual MachineとDalvik(Android)のJavaコード生成をサポート
  • AIX(5.3以降)をサポート

ターゲットとなるシステム[編集]

アーキテクチャ OS / デバイス バージョン
開発版 (2.7.x) 2.6.2 2.6.0 2.4.4 2.4.2 2.4.0 2.2.4 2.0.x 1.0.x
i386 DOS Extender (GO32V2) Yes Yes Yes Yes Yes Yes Yes Yes Yes
FreeBSD Yes Yes Yes Yes Yes Yes Yes Yes Yes
OpenBSD Yes Yes ? ? ? ? ? ? ?
NetBSD Yes Yes ? ? ? ? ? ? Yes
Linux Yes Yes Yes Yes Yes Yes Yes Yes Yes
Mac OS X Yes Yes Yes Yes Yes Yes Yes No No
OS/2 Yes Yes Yes Yes Yes Yes Yes Yes Yes
Windows Yes Yes Yes Yes Yes Yes Yes Yes Yes
Windows CE Yes Yes Yes Yes Yes Yes No No No
Haiku Yes Yes Yes Yes Yes Yes No No YesBeOSのみ
NetWare ? ? ? ? ? ? ? Yes No
Solaris Yes Yes Yes Yes Yes No No No Yes
iPhoneSim Yes Yes Yes No No No No No No
QNX No No No No No No No No Yes
x86-64 FreeBSD Yes Yes Yes Yes Yes No No No No
OpenBSD Yes Yes ? ? ? ? ? ? ?
NetBSD Yes Yes ? ? ? ? ? ? ?
Linux Yes Yes Yes Yes Yes Yes Yes ? No
Mac OS X Yes Yes Yes Yes Yes Yes No No No
Windows Yes Yes Yes Yes Yes Yes No No No
Solaris Yes Yes Yes Yes Yes No No No No
ARM iOS Yes Yes Yes Yes Yes Yes No No No
Game Boy Advance Yes (GBA) Yes Yes Yes Yes Yes No No No
Nintendo DS Yes Yes Yes Yes Yes Yes No No No
Linux Yes Yes Yes Yes Yes Yes Yes ? No
Windows CE Yes Yes Yes Yes Yes Yes Yes ? No
Android Yes No No No No No No No No
組み込みシステム Yes No No No No No No No No
PowerPC Linux Yes Yes Yes Yes Yes Yes Yes Yes No
Mac OS X Yes Yes Yes Yes Yes Yes Yes Yes No
Mac OS Classic ? ? ? ? No No Yes Yes No
MorphOS Yes Yes Yes Yes ? ? ? Yes No
AIX Yes Yes Yes No No No No No No
PowerPC 64-bit Linux Yes Yes Yes Yes Yes Yes Yes No No
Mac OS X Yes Yes Yes Yes Yes Yes No No No
AIX Yes Yes Yes No No No No No No
SPARC Solaris Yes Yes Yes Yes Yes 32bitのみ No No No No
Linux Yes Yes Yes Yes Yes Yes Yes ? No
JVM Java Yes No No No No No No No No
Android Yes No No No No No No No No
MIPS (BE and LE) Linux Yes No No No No No No No No
組み込みシステム Yes No No No No No No No No
8086 (16-bit) DOS Yes No No No No No No No No
M68000ファミリ Linux Yes No No No No No No No Yes
NetBSD ? No No No No No No No Yes
AmigaOS Yes No No No No No No No Yes
Atari TOS英語版 No No No No No No No No Yes制限されたクロスコンパイラのみ

関連項目[編集]

外部リンク[編集]

  • Free Pascal
  • Lazarus - FPC用RAD
  • FPC on Mac - Classic Mac OSへの移植状況(Mac OS Xへの移植はUNIXチームが行った)
  • Introduction to Free Pascal 2.0 - Daniël Mantione による新版の詳しい紹介。開発史も。
  • CrossFPC - さまざまな環境向けに、FPCをDelphi IDE風に統合する無料ツールキット。
  • FPS - FPC用Win32ベースのIDE。デバッガ(トレース、ブレークポイント、ウォッチウィンドウ)を含む。
  • Pixel image editor - FPCで記述したPhotoshop風画像エディタ。
  • FPC 4 GBA Initiative - ゲームボーイアドバンス向けFPCプロジェクト。