Free Pascal

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Cewbot (会話 | 投稿記録) による 2021年11月10日 (水) 02:42個人設定で未設定ならUTC)時点の版 (Bot作業依頼: iOSの改名提案に伴う内部リンク修正依頼 (iOS) - log)であり、現在の版とは大きく異なる場合があります。

Free Pascal Compiler
CygwinのコマンドラインでFPCを操作
開発元 Florian Klämpfl と 有志
最新版
3.2.0 / 2020年6月19日 (3年前) (2020-06-19)
最新評価版
3.0.4-rc1 / 2017年6月27日 (6年前) (2017-06-27)
リポジトリ ウィキデータを編集
対応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年に入ってからは、大きなバグは修正済みとなり、リリースしてもよい程度の品質になった。macOS用の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(macOSを含む)とのインタフェースを容易にするため、若干ながら 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 でコンパイルされた 16ビットDOSアプリケーションであった。二年後に、コンパイラは自分自身をコンパイルできるようになり(ブートストラップ)、32ビットアプリケーションになった。

拡大

最初の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向けの移植が再度行われ、多くの68k用UNIXやAmiga用の安定なコードを生成するようになった。

新時代

後に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アーキテクチャコンパイラの改良およびNetBSDOpenBSDに関する多数の不具合修正が行われた。最新安定版の2.6.4(2014年3月公開)ではデータベース接続パッケージfcl-dbに対して多くの改良と修正が行われた。

バージョン 3.0の新機能

言語
  • 名前空間ユニット(ドットを含むユニット名をサポート, Delphi互換)
  • 動的配列コンストラクタ(クラスのCreate関数のような生成関数をサポート, Delphi互換)
  • Default関数(指定した型の初期値を返す関数, Delphi互換)
  • 型ヘルパー(文字列リテラルや数値リテラルのような基本型のヘルパー, 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フォーマットをサポート
  • より多くのファイル関連RTLルーティンでマルチコードページとUnicodeをサポート
  • SQL parser/generatorの改良
ツールなど
  • 新しいPas2jniユーティリティ
macOS / iOS
  • 新しいiosxlocaleユニット
新しいコンパイラターゲット
  • Java Virtual MachineとDalvik(Android)のJavaコード生成をサポート
  • AIX(5.3以降)をサポート
  • 16ビットリアルモードMS-DOSをサポート
  • Android(ARM、x86、MIPS)をサポート
  • armhf EABIをサポート
  • AROS(i386-ABIv0、i386-ABIv0-on-trunk)をサポート

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

アーキテクチャ OS / デバイス バージョン
3.0.0 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
macOS 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 Yes[注 1]
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
macOS 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
macOS 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
macOS 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 [注 2] 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[注 3]
  1. ^ BeOSのみ
  2. ^ 32bitのみ
  3. ^ 制限されたクロスコンパイラのみ

関連項目

外部リンク

  • Free Pascal
  • Lazarus - FPC用RAD
  • FPC on Mac - Classic Mac OSへの移植状況(macOSへの移植は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プロジェクト。