Component
Pascalは、
プログラミング言語の分野で重要な位置を占めるニクラウス・ヴィルトによって開発された
Pascal、
Modula-2、
Oberon、
Oberon-2の系譜を受け継ぐ言語です。
Pascalという名前がついていますが、従来の
Pascalとは互換性がなく、むしろ
Oberon-2をベースに改良が加えられたものと言えます。この言語は、
チューリッヒ工科大学から独立したオベロン・マイクスシステムズという企業によって設計・保守されており、彼らが提供する統合開発環境(IDE)は「BlackBox Component Builder」として知られています。
1994年に最初のバージョンが
Oberon/Fとしてリリースされた際、Component
Pascalはグラフィカルユーザーインターフェースにおいて、編集可能なフォームと、エクスポートされた変数やプロシージャを連携させるという新しいアプローチを導入しました。これにより、開発者はより直感的にGUIを構築できるようになりました。また、オーストラリアの
クイーンズランド工科大学のジョン・ゴー氏を中心としたチームによって、
.NETと
Java仮想マシンに対応したオープンソース実装も提供されています。
2004年6月23日には、オベロン・マイクスシステムズがBlackBox Component Builderの無料ダウンロードを開始し、オープンソース版を計画していることを発表しました。その後、
2004年12月にベータ版がリリースされ、2005年12月には最終バージョン1.5が公開されました。このパッケージには、IDE、コンパイラ、デバッガ、ソースアナライザ、プロファイラ、そしてインターフェースライブラリの完全なソースコードが含まれており、ウェブサイトからダウンロード可能です。
BlackBox Component
Pascalでは、ソースコードファイルに
拡張子「.odc」、シンボルファイルに「.osf」を使用します。一方、Gardens Point Component
Pascalでは、ソースコードに「.cp」、シンボルファイルに「.cps」を使用します。BlackBox Component
Pascalは、独自の実行オブジェクトフォーマットとして「.ocf」を採用しており、このフォーマットに対応する実行時リンクロードも提供されています。
Component
Pascalの文法は、
Oberon-2よりも進歩していますが、
EBNF生成規則はわずか34個しかありません。このシンプルさが、言語の学習と使用を容易にしています。以下にその文法を構成する要素をまとめました。
Module = MODULE ident ";" [ImportList] DeclSeq [BEGIN StatementSeq] [CLOSE StatementSeq] END ident ".".
ImportList = IMPORT [ident ":="] ident {"," [ident ":="] ident} ";".
DeclSeq = { CONST {ConstDecl ";" } | TYPE {TypeDecl ";"} | VAR {VarDecl ";"}} {ProcDecl ";" | ForwardDecl ";"}.
ConstDecl = IdentDef "=" ConstExpr.
TypeDecl = IdentDef "=" Type.
VarDecl = IdentList ":" Type.
ProcDecl = PROCEDURE [Receiver] IdentDef [FormalPars] MethAttributes [";" DeclSeq [BEGIN StatementSeq] END ident].
MethAttributes = ["," NEW] ["," (ABSTRACT | EMPTY | EXTENSIBLE)].
ForwardDecl = PROCEDURE " ^ " [Receiver] IdentDef [FormalPars] MethAttributes.
FormalPars = "(" [FPSection {";" FPSection}] ")" [":" Type].
FPSection = [VAR | IN | OUT] ident {"," ident} ":" Type.
Receiver = "(" [VAR | IN] ident ":" ident ")".
Type = Qualident
| ARRAY [ConstExpr {"," ConstExpr}] OF Type
| [ABSTRACT | EXTENSIBLE | LIMITED] RECORD ["("Qualident")"] FieldList {";" FieldList} END
| POINTER TO Type
| PROCEDURE [FormalPars].
FieldList = [IdentList ":" Type].
StatementSeq = Statement {";" Statement}.
Statement = [ Designator ":=" Expr
| Designator ["(" [ExprList] ")"]
| IF Expr THEN StatementSeq
{ELSIF Expr THEN StatementSeq}
[ELSE StatementSeq] END
| CASE Expr OF Case {"|" Case}
[ELSE StatementSeq] END
| WHILE Expr DO StatementSeq END
| REPEAT StatementSeq UNTIL Expr
| FOR ident ":=" Expr TO Expr [BY ConstExpr] DO StatementSeq END
| LOOP StatementSeq END
| WITH [ Guard DO StatementSeq ] {"|" [ Guard DO StatementSeq ] } [ELSE StatementSeq] END
| EXIT
| RETURN [Expr]
].
Case = [CaseLabels {"," CaseLabels} ":" StatementSeq].
CaseLabels = ConstExpr [".." ConstExpr].
Guard = Qualident ":" Qualident.
ConstExpr = Expr.
Expr = SimpleExpr [Relation SimpleExpr].
SimpleExpr = ["+" | "-"] Term {AddOp Term}.
Term = Factor {MulOp Factor}.
Factor = Designator | number | character | string | NIL | Set | "(" Expr ")" | " ~ " Factor.
Set = "{" [Element {"," Element}] "}".
Element = Expr [".." Expr].
Relation = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
AddOp = "+" | "-" | OR.
MulOp = "
" | "/" | DIV | MOD | "&".
Designator = Qualident {"." ident | "[" ExprList "]" | " ^ " | "(" Qualident ")" | "(" [ExprList] ")"} [ "$" ].
ExprList = Expr {"," Expr}.
IdentList = IdentDef {"," IdentDef}.
Qualident = [ident "."] ident.
IdentDef = ident [" " | "-"].
Component
Pascalは、そのシンプルさと効率性から、特定の分野において根強い人気を保っています。特に、組み込みシステムやリアルタイムシステムの開発に適しており、その堅牢な設計は信頼性の高いソフトウェアを開発するための基盤となります。
この言語の更なる詳細や関連情報については、以下の外部リンクを参照してください。
Oberon microsystems
Open Source License for the framework
Gardens Point Component Pascal
Component Pascal Collection with many useful sources
Component Pascal Resources
Open Directory: Component Pascal
Oberon と Oberon-2 の進化
「From
Modula-2 to
Oberon」、ヴィルト、1988年
「The Programming Language Oberon」、ヴィルト、1988年
「Differences between
Oberon and
Oberon-2」、メッセンベック、ヴィルト、1991年
「The Programming Language Oberon-2」メッセンベック、ヴィルト、計算機システム学科、チューリッヒ工科大学、1992年1月
「What's New in Component
Pascal」、プファイシュテル、2001年