Privacy Policy Cookie Policy Terms and Conditions Free Pascal - Wikipedia

Free Pascal

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

Free Pascal Compiler

cygwinのコマンドラインでFPCを操作
開発元: 有志
最新版: 2.0.4 / 2006年8月28日
対応OS クロスプラットホーム
種別: コンパイラ
ライセンス GPL
公式サイト www.freepascal.org


Free Pascal (以前は FPK Pascal)はポータブルで、オープンソースPascalコンパイラである。

目次

[編集] 概説

Free Pascal は、32または64ビットの複数のCPUアーキテクチャ、複数のOSをサポートするコンパイラである。広く用いられる各種システム向けの物がある。言語仕様はボーランドの Pascal (Turbo Pascal及びDelphi)に準拠しており、いくつかの MacPascal の構成も採用している。

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

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

Delphiライブラリの目に見える部分 (VCL)、統合開発環境 (IDE)、RADの移植はLazarusと呼ばれる別のプロジェクトに含まれる。

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

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

Linux用FPC IDE。2002年のNational Olympiad in Informatics, Chinaのための準備をしている
拡大
Linux用FPC IDE。2002年のNational Olympiad in Informatics, Chinaのための準備をしている

[編集] 言語仕様

FPC は Pascal の方言のうちで、デファクトスタンダードとなっている、ボーランドのものを採用している(1.0.xのFPCではBorland Pascal 7とDelphi 2、2.0.xでは Delphi 6または7)。

しかしながら、コンパイラは「コンパイルモード」を持っており、開発チームはANSI/ISO標準Pascalにも対応する標準Pascalモードを導入する予定があることを明言している。

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

以下に、Delphi の機能で FPC が未だにサポートしていないものを挙げる

  • Delegation using the "implements" keyword
  • Automatic COM IDispatch dual interfaces (dispinterfaces)
  • dispid in normal interfaces
  • packages: compiler supported import/export of classes from/to shared libraries (useful for e.g. Lazarus, which implements packages of components)
  • set types can have different size.

[編集] 歴史

[編集] はじまりはじまり

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月に公開された(現行翻訳時点 — 2006年8月 — ではMac OS X他用の2.1.1のスナップショットが、正式な版としては2.0.4が公開されている)。

[編集] 将来

短期的なロードマップ (2.1.x)

  • COM/OLEサポートの実現/改良。これには複数の局面がある
    • COM互換インターフェース/vmt
    • OLEに必要なVariants
    • implements スタイルの delegation
  • リンク/デバックファイルフォーマット関連
    • スマートリンカの改善(.aファイルの廃止、メモリ要求の削減)
    • "packages" 及びダイナミックライブラリ (PIC!) の一般的なサポート
    • クロスリンキングの改良
    • stabs->dwarf クロスオーヴァ
    • Kylix 互換リソースのいくつか(論議中)
  • Apple Pascal 関連
    • subprocedureを別の手続に procvar として渡せるようにする

これらの目標のいくつか(特にリンカ)のためには、プログラムの再構成が必要となるかもしれない。

  • 中核的なプラットフォームには内蔵リンカを導入し、外部リンカ(LD)を不要にする。
  • モジュール (unit) ハンドリングの書き直し。

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

版によって異なる。

[編集] Version 2.1.x (development version)

[編集] Version 2.0.x

現在の安定なバージョンは2.0.2(翻訳時点では2.0.4)で、次のシステムをサポートする

CPUによる分類:

OSによる分類:

[編集] Version 1.0.x

以前の安定なリリース 1.0.x は次のシステムをサポートしている

CPUによる分類:

OSによる分類:

  • Linux: x86/m68k
  • FreeBSD
  • DOS: エクステンダとして Go32V2 を用いる。組込用には PMode が用いられることがある。
  • Win32
  • OS/2: EMX
  • Amiga Classic, m68k

ベータ版は

[編集] 関連項目

[編集] 外部リンク

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

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu