ネイティブ COBOL と JVM COBOL の比較

Enterprise Developer for Eclipse を使用して、ネイティブ COBOL アプリケーションと JVM COBOL アプリケーションの両方を作成できます。ネイティブ COBOL アプリケーションは、Enterprise Server で実行されるネイティブ COBOL コードとしてコンパイルされます。JVM COBOL アプリケーションは JVM 用にコンパイルされるため、他の JVM アプリケーション (記述に使用されているプログラミング言語は問わない) と相互運用できます。

手続き型 COBOL

手続き型 COBOL は、JVM の機能を利用する構文機能を持たない通常の COBOL です。手続き型 COBOL は、現在も積極的にサポートされており、拡張されています。Net Express、Server Express、Mainframe Express の時代から、インライン ローカル宣言 (DECLARE 内など) をサポートするようになりました。また、XML PARSE、JSON GENERATE、UTF-8 などの新しい構文もサポートしています。

ネイティブ COBOL または (ほとんどの場合) JVM COBOL にコンパイルできます。コア COBOL 構文は、JVM COBOL でサポートされます。ただし、サポートされていない機能もいくつかあります (たとえば、Panels V2、Dialog System、ACUCOBOL-GT)。これは、既存のほとんどの COBOL アプリケーションを再コンパイルして JVM COBOL アプリケーションを作成できることを意味します。

JVM COBOL

JVM COBOL は、JVM をサポートする拡張機能を備えた COBOL です。これは、オブジェクト指向 (OO) 構文のサポート、および使用可能なクラス ライブラリへのアクセスを可能にする構文を提供します。

JVM COBOL をコンパイルすると、Java バイトコード(Java 仮想マシン上で実行される JVM 用の .class または .jar) が生成されます。

ネイティブ COBOL 対 JVM COBOL

ネイティブ COBOL と JVM COBOL では、コンパイル方法およびランタイム管理サービス (セキュリティ、スレッド、メモリ管理など) の提供方法が異なります。

JVM 用の JVM COBOL は Java バイトコードにコンパイルされ、ネイティブ COBOL はマシン コードにコンパイルされます。JVM COBOL とネイティブ COBOL はともに、コンパイル後、サポートされる任意のプラットフォームで実行できます。

JVM コードの場合、管理サービスは JVM によって提供されます。ネイティブ COBOL の場合、管理サービスはオペレーティング システムで提供され、コードはオペレーティング システムに応じて適切なサービスを呼び出す必要があります。管理サービスにより、COBOL プログラムと他の JVM 言語で記述されたプログラムはシームレスに相互運用できます。

ネイティブ COBOL および JVM COBOL アプリケーションの構築

IDE では、ネイティブ COBOL と JVM COBOL の両方のアプリケーションを開発、コンパイル、およびデバッグできます。

Micro Focus Enterprise Developer UNIX コンポーネントをスタンドアロンで使用する場合は、コマンド ラインを使用してネイティブ COBOL または JVM COBOL をコンパイルします。

ユーザーは、新しい COBOL コードを記述することも、既存の COBOL を (場合によってはコード変更なしで) JVM COBOL またはネイティブ コードとして再コンパイルすることもできます。

Enterprise Server によって提供されるランタイム システムでは、ネイティブ アプリケーションをディプロイして、さらにデバッグすることができます。JVM COBOL アプリケーションは、JVM を実行しているプラットフォームにディプロイされます。

JVM COBOL およびネイティブ COBOL

JVMGEN コンパイラ指令を使用して、COBOL プログラム (ネイティブ COBOL または JVM COBOL で記述) を JVM COBOL コードにコンパイルできます。JVM COBOL プロジェクトを使用している場合、これは IDE 内から自動的に行われます。

その結果、コンパイラは中間言語 (JVM バイト コード .class/.jar) を作成します。

COBOL および他のすべての JVM 言語 (Java、JRuby、Jyphon など) は、このフォーマットにコンパイルされます。このフォーマットは、混合言語アプリケーションの記述を容易にします。

また、ネイティブ コード アプリケーションも作成できます。Eclipse では、デフォルトの COBOL プロジェクトはネイティブ コードにコンパイルされます。

コンパイラは、ネイティブ コンパイルの結果として .exe/.dll を生成します。

ネイティブ COBOL アプリケーションは、オペレーティング システムに利用できる適切な管理サービスを呼び出す必要がありますが、マネージ アプリケーションは、ランタイムによって提供される管理サービス (例外処理、ガベージ コレクション、スレッド管理など) を利用できます。

ネイティブ COBOL および JVM COBOL アプリケーションの開発

ネイティブ COBOL アプリケーションと JVM COBOL アプリケーションのどちらの場合でも、その開発、コンパイル、およびデバッグには IDE を使用します。ユーザーは、新しい COBOL コードを記述することも、既存の COBOL アプリケーションを (場合によってはコード変更なしで) ネイティブ COBOL コードまたは JVM COBOL コードに再コンパイルすることもできます。

Enterprise Server によって提供されるランタイム システムでは、アプリケーションをディプロイして、さらにデバッグすることができます。

JVM COBOL アプリケーションは、実行のために Java 仮想マシンにディプロイされます。

ランタイム

ネイティブ COBOL:

Enterprise Server によって提供されるランタイム システムでは、ネイティブ アプリケーションをディプロイして、さらにデバッグすることができます。管理サービスは、CBL_API を介して COBOL ランタイム システムによって提供されます。

JVM COBOL:

JVM バイト コード (.class/.jar ファイル) は、実行のために Java 仮想マシンにディプロイできます。

JVM の Just-In-Time (JIT) コンパイラは、バイト コードをオペレーティング システムに対してネイティブなコードにコンパイルします。JVM は、メモリ管理、例外処理、ガベージ コレクション、スレッド管理などの追加のサービスを提供します。

ネイティブ OO COBOL および JVM COBOL に関する考慮事項

ネイティブ OO COBOL でサポートされている技術は、JVM ではサポートされない場合があります。このようなシナリオでは、ネイティブ OO COBOL コードを引き続き使用する必要がある場合があります。次に例を示します。

  • ネイティブ COBOL アプリケーションで COM の技術を使用する
  • Java を呼び出すネイティブ COBOL アプリケーション
  • 既存の Dialog System アプリケーションを拡張する必要がある場合
  • アプリケーションで GUI/OLE クラス ライブラリおよびオートメーションを使用する
  • アプリケーションで Microsoft Transaction Server (COM サービス経由の MTS) を使用する
  • ネイティブ COBOL と JVM COBOL のハイブリッド アプリケーションを作成する場合は、この 2 つの「橋渡し役」としてネイティブ OO COBOL を使用する必要があります。