コンポーネントパスカル
| コンポーネントパスカル | |
|---|---|
| パラダイム | 命令型、構造化、モジュール型、オブジェクト指向 |
| 家族 | ヴィルト・オベロン |
| 開発者 | オベロンマイクロシステムズ |
| 初登場 | 1997年 |
| タイピングの規律 | 強い、静的 |
| 範囲 | 語彙 |
| Webサイト | blackboxframework.org |
| 影響を受けた | |
| パスカル、オベロン、オベロン2 | |
Component Pascalは、ニクラウス・ヴィルトのPascal、[1] Modula-2、[2] Oberon [3] [4]およびOberon-2 [5]の流れを汲むプログラミング言語である。言語名を冠し、その伝統を守っているが、Pascalとは互換性がない。その代わりに、より表現力豊かな型システムと組み込みの文字列サポートを備えたOberon-2のマイナーバリアントおよび改良版である。Component Pascalは元々Oberon/Lという名前で、ETHチューリッヒの小さなスピンオフ企業であるOberon microsystemsによって設計およびサポートされていた。同社はBlackBox Component Builderという統合開発環境(IDE)を開発していた。2014年以降、開発とサポートは少人数のボランティアによって引き継がれている。IDEの最初のバージョンは1994年にOberon/Fとしてリリースされた。当時、編集可能なフォームに基づくグラフィカルユーザーインターフェース(GUI)構築の斬新なアプローチが提示されました。このフォームでは、フィールドとコマンドボタンがエクスポートされた変数と実行可能なプロシージャにリンクされていました。このアプローチは、2008年にリリースされたMicrosoftの.NET 3.0で、拡張アプリケーションマークアップ言語(XAML)のコードにアクセスするために使用されていたコードビハインド方式とある程度類似しています。
オーストラリアのクイーンズランド工科大学の John Gough 氏を中心とした Gardens Point チームにより、.NETおよびJava 仮想マシン(JVM) プラットフォーム用の Component Pascal のオープン ソース ソフトウェア実装が提供されています。
2004年6月23日、Oberon microsystemsは、BlackBox Component Builderを無料ダウンロードとして利用できるようにし、オープンソース版も計画していることを発表しました。ベータオープンソース版は、最初に2004年12月にリリースされ、2005年12月に最終v1.5リリースに更新されました。IDE、コンパイラ、デバッガ、ソースアナライザ、プロファイラ、およびインタフェースライブラリの完全なソースコードが含まれており、Webサイトからダウンロードすることもできます。v1.6のリリース候補は2009年から2011年にかけて数回登場し、最新のもの(1.6rc6)は2011年にOberon microsystemsのWebページに登場しました。2013年末、Oberon microsystemsは最終リリース1.6をリリースしました。これはおそらく同社がバンドルした最後のリリースです。小規模なコミュニティが進行中の開発を引き継ぎました。
BlackBox Component Pascalは、ソースファイルなどのドキュメントファイルに.odc(Oberonドキュメント)という拡張子を、シンボルファイルに.osf (Oberonシンボルファイル)という拡張子を使用します。一方、Gardens Point Component Pascalは、ソースファイルに.cp、シンボルファイルに.cpsという拡張子を使用します。BlackBox Component Pascalには、独自の実行可能かつ読み込み可能なオブジェクト形式である.ocf(Oberonコードファイル)があり、この形式用のランタイムリンクローダーが含まれています。ドキュメント形式(.odc)はリッチテキストバイナリ形式で、書式設定、条件付き折りたたみ、ソーステキストへのアクティブコンテンツの埋め込みが可能です。また、ユーザーインターフェース要素を編集可能な形式で扱うことができます。これはOberon Text形式の伝統を受け継いでいます。[6]
構文
言語報告書に記載されているCPの完全な構文を以下に示します。拡張バッカス・ナウア形式では、必要な文法規則は34個のみです。Oberon -2はより高度な言語ですが、Oberon-2よりも1つ多くなっています。
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 "=" タイプ。VarDecl = IdentList ":" タイプ。ProcDecl = PROCEDURE [ Receiver ] IdentDef [ FormalPars ] MethAttributes [ ";" DeclSeq [ BEGIN StatementSeq ] END ident ]。MethAttributes = [ "," NEW ] [ "," (抽象| 空| 拡張可能)].ForwardDecl = PROCEDURE "^" [ Receiver ] IdentDef [ FormalPars ] MethAttributes 。FormalPars = "(" [ FPSection { ";" FPSection }] ")" [ ":" タイプ]。FPSection = [ VAR | IN | OUT ] ident { "," ident } ":" タイプ。受信者= "(" [ 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 ":" タイプ]。StatementSeq = ステートメント{ ";" ステートメント}。Statement = [ 指定子":=" Expr | 指定子[ "(" [ 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 [関係 SimpleExpr ]。SimpleExpr = [ "+" | "-" ] 項{ AddOp 項}。項= 係数{ MulOp 係数}。係数= 指定子| 数値| 文字| 文字列| NIL | 設定| "(" Expr ")" | " ~ " 係数。設定= "{" [要素{ "," 要素}] "}" 。要素= Expr [ ".." Expr ]。関係= "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS 。AddOp = "+" | "-" | または.MulOp = "*" | "/" | ディビジョン| MOD | 「&」。指定子= 修飾子{ "." ID | "[" ExprList "]" | "^" | "(" 資格")" | "(" [ ExprList ] ")" } [ "$" ]。ExprList = Expr { "," Expr }。IdentList = IdentDef { "," IdentDef }。qualident = [ ident "." ] アイデンティティ。IdentDef = ident [ "*" | "-" ]。参考文献
- ^ ジェンセン、キャスリーン;ヴィルト、ニクラウス(1974–1991)。Pascal: ユーザーマニュアルとレポート。スプリンガー・フェルラーグ。ISBN 978-0-387-97649-5。
- ^ ニクラウス、ヴィルト(1982–1985)。Modula-2 でのプログラミング。スプリンガー・フェルラーグ。ISBN 978-3-540-15078-7。
- ^ ライザー、マーティン、ヴィルト、ニクラウス(1992年6月1日)『Oberonプログラミング:PascalとModulaを超えたステップ』Addison-Wesley . ISBN 978-0201565430。PDF (334 KB) 2012年6月3日アーカイブWayback Machine
- ^ Wirth, Niklaus ; Gutknecht, Jürg (1992年11月1日). Project Oberon: The Design of an Operating System and Compiler . Addison-Wesley . ISBN 978-0201544282。PDF (4'398 KB) 2012年7月10日アーカイブ、Wayback Machine
- ^ Mössenböck, Hans-Peter; Wirth, Niklaus (1991). 「プログラミング言語Oberon-2」(PDF) .構造化プログラミング. 12 : 179–195 .
- ^ Mössenböck, H.; Koskimies, K. (1996). 「ソースコードの構造化と理解のためのアクティブテキスト」 .ソフトウェア:実践と経験. 26 (7): 833– 850. doi :10.1002/(SICI)1097-024X(199607)26:7<833::AID-SPE34>3.0.CO;2-Q.
さらに読む
- モジュラからオベロン・ヴィルトへ(1990)
- プログラミング言語 オベロン・ワース (1990)
- OberonとOberon-2の違い MössenböckとWirth (1993)
- The Programming Language Oberon-2 H. Mössenböck、N. Wirth、Institut für Computersysteme、ETH Zürich ( ETHZ )、1992 年 1 月。
- Component Pascal の新機能 (Oberon-2 から CP への変更)、Pfister (2001)
- コンポーネントとオブジェクトの統合、クレメンス・シペルスキ、ドブス博士、1999年5月
外部リンク
- 公式サイト
- 以前の公式ウェブサイトの最新の利用可能なバージョン。ダウンロードページの履歴メモも参照してください。
- .NET および JVM 向け Gardens Point コンポーネント Pascal
- Josef Templ の OFront をベースにしたコンポーネント Pascal から C へのトランスパイラ