21

SECTIONCOBOL にとの両方があるのはなぜPARAGRAPHですか?

SECTIONCOBOL の設計者がs とs の両方を作成した理由を誰か説明できますPARAGRAPHか? NEXT SENTENCEこれらはCOBOLの最初のリリース以来存在していたので、それらの存在の本当の理由はずっと前になくなったのではないかと思います(後方互換性のために言語仕様に残っているものの、明示的なスコープターミネータの導入以来必要ではなくなったものと同様です) )。

私の推測では、SECTIONプログラム オーバーレイをサポートするために導入された可能性があります。SECTIONには、その一部であるプログラム オーバーレイを識別するために、それに関連付けられたオプションの PRIORITY 番号があります。ただし、COBOL の最新の実装のほとんどは、PRIORITY 番号 (およびオーバーレイ) を無視するか、削除しています。

現在、の一部でSECTIONs がまだ必要であることがわかりますが、これを正当化する理由は見つかりません。との間に意味的な違いは見られませんが、は に従属しています。DECLARATIVEPROCEDURE DIVISIONSECTIONPARAGRAPHPARAGRAPHSECTION

一部の COBOL ショップでは、の使用を禁止していますSECTION(PARAGRAPH北米では一般的なようです)。PARAGRAPH他の人は賛成して禁止しSECTIONます(ヨーロッパでは一般的なようです). さらに、それぞれがいつ適切であるかについてのガイドラインを持っているものもあります。これらはすべて、私には非常に恣意的なものに思えます。疑問が生じます。そもそも、なぜそれらが言語仕様に組み込まれたのでしょうか? そして、それらは今日の関連性を持っていますか?

この質問に答える場合は、回答を裏付ける参考文献も示していただければ幸いです。

ありがとう

4

9 に答える 9

7

私の店の古いタイマーの1つからそれが私に渡されたと聞いたので、これについての言及はありませんが...

古いCOBOLコンパイラでは、少なくともIBMとUnisysの場合、セクションを一度に1つずつメモリにロードできました。メモリが不足していた古き良き時代には、一度にメモリにロードするには大きすぎるプログラムを、セクションを使用してメモリ使用量に合わせてモジュール化することができました。セクションと段落の両方を用意することで、プログラマーは、一度にすべてをロードできない場合に、どのコード部分を一緒にメモリにロードするかを決定できます。効率を上げるために、同じ実行ループの2つの部分を一緒にロードする必要があります。今日では、それは多かれ少なかれ議論の余地があります。

私のショップでは段落のみを使用し、GOTOを禁止し、終了段落を要求しているため、すべてのPERFORMはPERFORM 100-PARAGRAPH THRU 100-EXITまたは同様のものです。これにより、段落がセクションのようになります。でも、今はそれほど違いはないと思います。

于 2011-12-05T13:50:07.543 に答える
6

1978年頃にICL2903でCOBOLを学びました。プログラムがメモリに対して大きすぎる場合、SECTIONヘッダーに番号範囲を割り当てることができるという漠然とした記憶があります。つまり、これらのSECTIONヘッダーをメモリにスワップインおよびスワップアウトすることができます。 。

于 2009-11-04T19:54:04.710 に答える
2

Cobolは50年代半ばに開発されました。フルネームがほのめかしているように、既存の「科学的」または「技術的」言語(とにかく「言語」はほとんどなく、「機械語」(特定の)よりもビジネス目的に関連する言語として、ビジネスプログラミング用に開発されました。もちろん、特定のアーキテクチャ(真空管について考える前に、ほぼ「特定のチップ」と言いました))、一部のマシンでは物理的なスイッチ/ダイヤルを介して設定する必要がある場合があります)、運が良ければ「アセンブラ」を使用します。Cobolは、その目的のために、その日のために非常に進歩しました。

Cobolで記述されたプログラムは、開始者にとって何かを意味する単なる「コード」のセットではなく、英語に非常に似ていることが意図されていました。

言語に関連するいくつかの命名法(段落、文、動詞、節)を見ると、それは意図的に英語に起因するパターンに従っています。

SECTIONは、正式なビジネスドキュメントに関連付けるまで、これに完全には適合しません。

セクションと段落の両方が、手順部の外にも表示されます。書かれた英語のように、段落はそれ自体で存在することも、セクションの一部になることもできます。

SECTIONには、「セグメンテーション機能」に関連する優先順位番号が付いている場合があります。これは、基本的なレベルのメモリ管理を提供するために、SECTIONの「オーバーレイ」を含むために使用されていました。これは英語ではなく「コンピューティング機能」です:-)「セグメンテーション機能」には影響が残っていますが、実際に使用されているのを見たことがありません。

DECLARATIVES(私は使用しておらず、マニュアルが不明確であることに気付いたばかりです)がない場合、PERFORMにセクションまたは段落を使用するかどうかは「選択」です。

GO TOを使用すると、合理的に、PERFORM ... TRHU ....で「同等性」を達成できます。そうでない場合、PERFORM ... THRU ...を不必要に使用しない場合は、すでに同等性があります。

「構造化された」コードや現代語との比較は、「歴史を逆に読む」こと、または特定の「実践」の概要を示すことです。「スパゲッティコード」とALTERによって得られた評判から...続行するには...「メモリ管理」が必要でない限り、PERFORMをあまり使用しないのは20年間「一般的」だったかもしれませんが、私はこれをバックアップするための参照や知識はありません。

SECTIONは、段落名の重複を許可します。それ以外の場合、段落名は一意である必要があります。

いつも特定の指を重ねることはできません。

GO TOを使用する場合は、SECTIONを使用します。そうでない場合は、段落。DECLARATIVESでは、SECTIONSを使用します。SECTIONを使用する場合は、診断メッセージを回避するために、SECTIONを使用してPROCEDUREDIVISIONを開始します。

地域の基準が指示する場合がありますが、必ずしも「現代的」(または「合理的」)に基づいているとは限りません。多くは「知られている」が、私の経験では、実際にはセクションと段落について誤解されている。

パフォーマンス(大量のデータが処理されている場合、つまり大量のデータ)の場合、複数の個別の段落ではなく1つのセクションのPERFORMで改善が見られます。効果はPERFORM...THRU ...でも同じですが、お勧めしません。PERFORMの範囲外に移動するのは1)悪い2)「最適化」を失う可能性があります。異常終了/例外に移動し、論理的な戻りを期待しない場合を除いて、問題にはならないはずです。これの使用が必然的に「すぐに」行われると思われる場合は、「直感に反する」にもかかわらず、PERFORMを使用する方が適切です。 「アスペクト(それを文書化する)。

于 2013-01-16T10:58:12.663 に答える
2

最も単純な理由は、SECTION が「構造化された」プログラムに必要な「モジュール性」 (C の関数と同様) を提供することです。SECTION を使用して記述されたコードは、段落だけで記述されたコードよりもはるかに読みやすいように見えることに気付くでしょう。なぜなら、すべてのセクションには「EXIT」が必要なためです。つまり、新しい段落宣言が見つかるまで)。次の例を考えてみてください。コードでセクションを使用したくなるかもしれません。

*==================
 MAINLINE SECTION.
*==================
     PERFORM SEC-A
     PERFORM SEC-B
     PERFORM SEC-C
     GOBACK.
*==================
 MAINLINE-EXIT.
*==================
    EXIT.

*==================
 SEC-A SECTION.
*==================

.....
.....
.....
.....

    IF <cond>
       go to A-EXIT
    end-if

..... 
.....
.....
.....

.

*==================
 A-EXIT.
*==================
    EXIT.

コードを段落で書くときに、この種の特権があるとは思わないでください。特定の条件に達したときに実行したくないステートメントを隠すために、巨大な ELSE ステートメントを作成する必要があったかもしれません (ステートメントのセットが 2 ~ 3 ページにわたって実行されていると考えてください...さらに IF のセット/ ELSE はインデントのためにあなたを窮屈にするでしょう)。もちろん、これを達成するには「GO TO」を使用する必要がありますが、終了中以外はGO TOを使用しないように専門家にいつでも指示できます。これは公正な取引だと思います.

したがって、SECTION を使用して記述できるものはすべて段落を使用して記述できることにも同意しますが (微調整をほとんどまたはまったく行わずに)、私の個人的な選択は、開発者の仕事を少し簡単にする実装を選択することです。将来!

于 2011-01-28T09:18:25.533 に答える
1

1 つには、段落名は別のセクションにない限り一意でなければならないため、セクションは段落の「名前空間」を許可します。

私の記憶が正しければ、 a を使用しなければならないSECTION唯一の理由は forDECLARATIVESです。それ以外はオプションであり、主に段落のグループ化に役立ちます。PERFORM段落が同じセクションにある場合にのみ、段落で使用することを要求するのは(比較的言えば、とにかく)一般的だと思います。

于 2009-11-04T18:23:13.777 に答える
1

セクションには複数の段落を含めることができます。セクションを PERFORM すると、セクション内のすべての段落が実行されます。セクション内では、PERFORM または GOTO を使用して、セクション内の段落に分岐できます。

于 2009-11-05T06:12:52.890 に答える
-1

すべての 37K MVS バッチ COBOL プログラムでCOBOL SECTIONコーディングを使用しています。この手法を使用して、実行時間を大幅に短縮し、CPU オーバーヘッドを大幅に削減します。この COBOL コーディング手法は、高性能バッチ アセンブラーと非常によく似ています。

機能的に構造化された高パフォーマンス COBOLプログラミングと呼んでください。

SECTION が定義されると、すべての PERFORM xxxxx は、SECTION 内の次の段落ではなく、次のコード化された SECTION で返されます。段落が最初の SECTION の前にコーディングされている場合、段落は正常に実行できます。 (しかし、私たちはこれを許可しません)

SECTION を使用すると、段落のみを使用してPERFORMを実行する場合よりもオーバーヘッドが高くなります -ただし、GOTOロジックを使用して、条件付きで実行する必要があるコードをバイパスします。私たちのルールでは、GOTOは同じ SECTION 内の タグラインのみを指すことができます。(段落) SECTION 内のすべての段落は、SECTION s 関数のサブ関数でなければなりません。EXIT命令は、アセンブラの NOP 命令です。次の SECTION の前にタグラインを配置することができます - 迅速な終了/戻り。

PERFORM xxxx THRU yyyy を実行すると、 GOTOなしで SECTION を実行するよりも CPU オーバーヘッドが大きくなります。

警告: SECTION で PERFORM xxxxタグラインを実行すると、次の SECTION が検出されるまで、SECTION 内のすべてのコードが通過します。現在の SECTION の外側にあるGOTO タグラインは、次の SECTION に遭遇するまで、新しいランディング SECTION 内のすべてのコードを通過します。(しかし、私たちはこれを許可しません)

于 2010-07-21T19:12:22.137 に答える