Pourquoi COBOL a-t-il à la fois "SECTION" et "paragraphe"?

pourquoi COBOL a les deux SECTION et PARAGRAPH?

quelqu'un Peut-il expliquer pourquoi les concepteurs de COBOL créé à la fois SECTIONet PARAGRAPH s? Ceux-ci ont été autour depuis la libération initiale de COBOL donc je soupçonne la raison réelle de leur existence a disparu depuis longtemps (semblable à des choses comme NEXT SENTENCE qui sont encore dans la spécification linguistique pour la rétrocompatibilité mais qui ne sont plus nécessaires depuis l'introduction de la portée explicite terminateur.)

je pense que SECTION peut avoir été introduit pour soutenir les chevauchements de programmes. SECTION a un numéro de priorité optionnel qui lui est associé pour identifier le programme dont il fait partie. Cependant, la plupart des implémentations modernes de COBOL ignorent ou ont abandonné les numéros de priorité (et les superpositions).

Actuellement, je vois que SECTIONs sont encore nécessaires dans le DECLARATIVE de la PROCEDURE DIVISION, mais ne peut trouver aucune justification pour cela. Je ne vois pas de différence sémantique entre SECTION et PARAGRAPH autre que PARAGRAPH est subordonné SECTION.

certains magasins de COBOL interdisent l'utilisation de SECTION favorable PARAGRAPH (semble commun en Amérique du Nord). D'autres ban PARAGRAPH favorable SECTION (semble commun en Europe). D'autres encore ont des lignes directrices lorsque chacun est approprié. Tout cela me semble tout à fait arbitraire, ce qui m'amène à la question suivante: Pourquoi ont - ils d'abord été inclus dans la spécification linguistique? Et, ils n'ont pas toute pertinence aujourd'hui?

si vous répondez à cette question, il serait bon que vous indiquiez également une référence pour appuyer votre réponse.

Merci

19
demandé sur user207421 2009-11-04 20:39:48

8 réponses

aucune référence à ce sujet, puisque j'ai entendu dire qu'il m'a été transmis par l'un des anciens employés de ma boutique mais...

dans les anciens compilateurs COBOL, du moins pour IBM et Unisys, des sections ont pu être chargées en mémoire une à la fois. Dans le bon vieux temps, lorsque la mémoire était rare, un programme trop grand pour être chargé en mémoire à la fois a pu être modularisé pour l'utilisation de la mémoire à l'aide de sections. Le fait d'avoir à la fois des sections et des paragraphes a permis au programmeur de décider quel code les pièces ont été chargées en mémoire ensemble si elles ne pouvaient pas toutes être chargées en même temps - vous voudriez deux parties de la même boucle de Performance chargé ensemble pour le bien de l'efficacité. Aujourd'hui, c'est plus ou moins discutable.

mon atelier utilise seulement des paragraphes, interdit GOTO et exige des paragraphes de sortie, Donc tout ce que nous effectuons sont Effectuer 100-paragraphe à travers 100-sortie ou quelque chose de similaire - ce qui semble rendre les paragraphes plus comme des sections pour moi. Mais je ne pense pas qu'il y ait une grande différence maintenant.

6
répondu Marcus_33 2011-12-05 13:50:07
6
répondu colemanj 2009-11-04 19:54:04

je sais qu'il s'agit d'une vieille question, mais L'OP a demandé de la documentation sur la justification initiale de L'utilisation de la SECTION ainsi que du paragraphe dans COBOL.

vous ne pouvez pas obtenir beaucoup plus" original " que la documentation CODASYL Journal.

dans la section 8 de la Revue de spécification pour le langage,

( page 331, section 8.1 "Segmentation-General Description")

(P 331, section 8.1.2.1 "segments de programme")

Dans son livre sur la comparaison des langages de programmation ("Langages de Programmation: Histoire et Fondements", 1969) Jean Sammet (qui était assis sur le CODASYL comité, représentant Sylvania Electric) déclare:--1-->

".. L'allocation de stockage est géré automatiquement par le compilateur. L'unité principale pour allouer le code exécutable est un groupe de sections appelé segment. le programmeur combine des sections en spécifiant une numéro de priorité avec le nom de chaque section. ... Le compilateur est requis pour voir que les transferts de contrôle appropriés sont fournis de sorte que le contrôle parmi les segments qui ne sont pas stockés simultanément peut avoir lieu. ..."

(p 369 - 371 V. 3 COBOL)

4
répondu Cr McDonough 2016-05-02 23:41:08

Eh bien, la plus simple des raisons est que les sections s vous fournissent la "modularité" -- tout comme les fonctions en C -- une nécessité dans les programmes "structurés". Vous remarquerez que le code écrit en utilisant des SECTIONs semble beaucoup plus lisible que le code écrit juste dans les paragraphes, car chaque section doit avoir un "EXIT" -- un point de Sortie unique et très explicite d'une SECTION (le point de sortie d'un paragrpah est beaucoup plus vague et implicite, c.-à-d. jusqu'à ce qu'une nouvelle déclaration de paragraphe soit trouvée). Considérez ceci exemple et vous pourriez être tenté d'utiliser des sections dans votre code:

*==================
 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.

Ne pensez pas que vous auriez ce genre de secret quand vous écrivez vos codes dans les paragraphes. Vous avez peut-être dû écrire une énorme instruction ELSE pour masquer les instructions que vous ne vouliez pas exécuter quand une certaine condition est atteinte (considérez cet ensemble d'instructions pour courir à travers 2-3 pages... un autre ensemble de si / ELSE vous créerait des crampes pour indentation). Bien sûr, vous devrez utiliser "ALLER À" pour atteindre ceci, mais vous pouvez toujours dire à vos professionnels de ne pas utiliser GO TOs sauf en sortant, ce qui est une affaire équitable, je pense.

donc, bien que je convienne aussi que tout ce qui peut être écrit en utilisant des SECTIONs peut aussi être écrit en utilisant des paragraphes (avec peu ou pas de modifications), mon choix personnel serait d'aller pour une implémentation qui peut rendre le travail de mes développeurs un peu plus facile à l'avenir!

2
répondu Taurus 2011-01-28 14:26:46

pour une chose, les noms de paragraphe doivent être uniques à moins qu'ils ne soient dans des sections séparées, ainsi les sections permettent "namespacing" de paragraphes.

Si je me souviens bien, la seule raison pour laquelle vous un SECTIONDECLARATIVES. Outre qu'ils sont facultatifs et principalement utile pour regrouper les paragraphes. Je pense que c'est commun (relativement parlant, de toute façon) à exiger que PERFORM ne doit être utilisé sur les paragraphes que lorsqu'ils se trouvent dans la même section.

1
répondu Tim Sylvester 2009-11-04 18:23:13

une section peut comporter plusieurs paragraphes. Lorsque vous exécutez une section, elle exécute les paragraphes de la section. Dans la section vous pouvez utiliser PERFORM ou GOTO pour la branche aux paragraphes dans la section.

1
répondu JoelFan 2009-11-05 06:12:52

le Cobol a été développé au milieu des années 50. Comme le nom complet fait allusion, il a été développé pour la programmation d'affaires, comme étant un langage plus pertinent à des fins commerciales que les langages "scientifiques" ou "techniques" existants (il y avait très peu de "langages" de toute façon, et "Code machine" (spécifique, bien sûr, à une architecture particulière (j'ai presque dit "puce spécifique", avant de penser à des tubes à vide)) qui peuvent avoir à être réglé par des interrupteurs/cadrans physiques sur certaines machines) et si chanceux avec assembleur." Cobol était très avancé pour son époque, pour son but.

l'intention était que les programmes écrits en Cobol soient beaucoup plus semblables à ceux de langue anglaise qu'un simple ensemble de "codes" qui signifient quelque chose pour les initiés.

si vous regardez une partie de la nomenclature relative à la langue - paragraphe, phrase, verbe, clause - elle suit délibérément les modèles attribués à la langue anglaise.

SECTION ne rentre pas tout à fait dans cela, jusqu'à ce que vous reliez les choses à un document d'affaires officiel.

les SECTIONs et les paragraphes apparaissent aussi à l'extérieur de la division de la procédure. Comme dans l'anglais écrit, les paragraphes peuvent exister sur leur propre, ou peuvent faire partie d'une SECTION.

les SECTIONs peuvent avoir un numéro de priorité qui se rapporte à la "fonction de segmentation". Cela incluait la "superposition" de SECTIONs pour permettre un niveau primitif de gestion de la mémoire. C'est un "informatique featuer" plutôt que de langue anglaise :-) "segmentation feature" a quelque chose d'un affect restant, mais je ne l'ai jamais vu réellement utilisé.

sans déclarations (que je n'utilise pas, et je viens de remarquer que le manuel n'est pas clair) alors c'est un "choix" quant à savoir si les SECTIONs ou les paragraphes sont utilisés pour effectuer.

si GO TO est utilisé, rationnellement, "l'équivalence" peut être obtenue avec PERFORM ... TRHU .... Si non, et il n'y a pas d'utilisation gratuite de PERFORM ... THRU ... puis il y a équivalence déjà.

les comparaisons avec le code " structuré "et les langues modernes consistent à" lire l'histoire à l'envers "ou simplement à décrire une"pratique" particulière. De la réputation atteinte par "spaghetti code" et ALTER ... POUR PROCÉDER À L' ... il se peut fort bien que pendant 20 ans, il était "courant" de ne pas faire grand-chose avec PERFORM sauf si vous aviez besoin de la "gestion de la mémoire", mais je n'ai aucune référence ou connaissance pour étayer cela.

les SECTIONs permettent de dupliquer les noms de paragraphe, sinon les noms de paragraphe ça doit être unique.

je ne peux pas mettre un doigt précis sur un sur l'autre tout le temps.

si vous utilisez GO TO, j'utiliserais des SECTIONs. Si non, les paragraphes. Avec des déclarations, J'utiliserais des SECTIONs. Si J'utilisais des SECTIONs, je commencerais la DIVISION des procédures avec une SECTION pour éviter un message de diagnostic.

normes Locales peuvent dicter, mais pas nécessairement sur un "moderne" (ou même "rationnelle"). Beaucoup est "connu" mais en fait mal compris sur les SECTIONs et les paragraphes, dans mon expérience.

pour la performance (où les masses de données sont traitées, et je veux dire les masses) alors une performance d'une SECTION plutôt que plusieurs paragraphes individuels verraient des améliorations. L'effet serait le même avec PERFORM ... THRU ... mais je préfère ne pas le recommander. Aller à l'extérieur de la gamme D'une performance est 1) Mauvais 2) peut perdre sur "l'optimisation". Ne devrait pas être un problème * sauf" quand aller à abend / exception et ne pas s'attendre à un retour logique. Si l'utilisation de ce qui est ressenti pour être nécessairement "immédiatement", alors il est préférable de le faire avec un PERFORM malgré l'aspect" contre-intuitif " (ainsi le documenter).

1
répondu Bill Woodger 2013-01-16 10:58:12

nous utilisons du COBOL codage dans tous nos programmes de COBOL 37K MVS batch. Nous utilisons cette technique pour obtenir des temps d'exécution beaucoup plus rapides et considérablement réduit CPU overhead. Cette technique de codage COBOL est très similaire à l'assembleur de lots de haute performance.

Appeler Haute Performance Fonctionnellement Structuré COBOL programmation

une fois qu'une SECTION est définie, exécuter xxxxx retournera à la SECTION codée suivante et non au paragraphe suivant. section. Si les paragraphes sont codés avant la première SECTION, ils peuvent être exécutés normalement. (Mais nous n'avons pas permettre à cet)

utiliser une SECTION a des frais généraux plus élevés que lors de l'utilisation et PERFORM ing seuls les paragraphes - U N I L E S S S - vous utiliser GOTO logique pour contourner le code qui devrait être exécuté conditionnellement. Notre règle est qu'un GOTO ne peut point à un Balise De Ligne dans le même SECTION. (un paragraphe) tous les paragraphes d'une SECTION doivent être une sous-fonction de la fonction SECTION S. EXIT instruction est une instruction NOP assembleur. Il permet pour un Balise De Ligne à placer avant la SECTION suivante-une sortie/retour rapide.

exécution d'un PERFORM xxxx THRU yyyy a plus de CPU overhead que l'exécution D'une SECTION sans le GOTO s.

avertissement: Exécution d'un PERFORM xxxx Balise De Ligne dans une SECTION passera par tout le code de la SECTION jusqu'à ce que la SECTION suivante soit rencontrée. GOTO Balise De Ligne à l'extérieur de la SECTION courante passera par tout le code de la nouvelle section d'atterrissage jusqu'à ce que la SECTION suivante soit rencontrée. (Mais nous n'avons pas permettre à cet)

-1
répondu user396088 2010-07-21 19:12:22