7
votes

Qu'est-ce qui concerne Cobol et ses performances qui le font (comparé à son âge) si vite?

Lecture par certaines des questions ici, le Concensus général semble être que là-bas pour continuer à être une quantité pétillante de code COBOL "là-bas", non seulement parce que c'est un cauchemar de refactoriser ou de re-cocher, mais simplement parce que Pour un certain segment de marché (Financial Financial, etc.), il s'est révélé être plus que capable de la détenir. Mais qu'est-ce que est sur la langue qui le fait que cela soit tellement? Comment quelque chose peut-être que plusieurs décennies continuent de fonctionner suffisamment bien pour tenir ses propres langues plus modernes, toutes les améliorations comesurimentales de la gestion de la mémoire, etc.? Demandez aux compilateurs de COBOL, etc. Il est simplement amélioré silencieusement en arrière-plan? Ou existe-t-il quelque chose d'inhérent dans la langue qui signifie qu'il est extrêmement efficace pour un ensemble d'opérations donné?


2 commentaires

Devrait peut-être un wiki communautaire qu'une question.


Je ne cherche pas d'opinions: j'aimerais vraiment savoir quelle est la raison technique. Compilateurs, mémoire, peu importe.


5 Réponses :


4
votes

C'est parce que les programmes COBOL (au moins les anciens) sont très simplement structurés, il n'est donc pas du tout difficile de les compiler à un code de machine efficace. Par exemple, les "bons" programmes COBOL n'ont pas besoin de gestion de la mémoire efficace, car une allocation dynamique de la mémoire n'arrive tout simplement pas; La mise en page de la mémoire est fixée au moment de la compilation.


1 commentaires

+1, plus C'est également une langue conçue à peu près pour les opérations commerciales de type lot, qui correspond bien aux utilisations qu'il est placée dans le monde financier



13
votes

La langue Cobol a été conçue dans les années 1950 pour correspondre aux capacités des machines lentes et limitées de RAM disponibles à l'époque. Sans parler du manque de terminaux interactifs. De nombreux aspects de la conception sont faciles à compiler dans un code de machine simple sans optimisation nécessaire. Par exemple, il n'y a pas de variables. Seul un seul bloc de stockage de travail, avec des noms faisant référence à des tableaux d'octets d'une longueur fixe spécifique à partir d'un emplacement fixe. Les programmes COBOL compilent avec un code de machine efficace par design.

Au fur et à mesure que les processeurs ont été plus rapides et que la RAM a été plus abondante, Cobol compilers a ajouté de nouvelles fonctionnalités telles que l'algorithme d'E / S de fichier indexé clé et l'algorithme de fusion intégré, ainsi que la prise en charge des terminaux de texte interactifs. NOAWADAY Il y a même un cobol orienté objet.

Si partie de la raison est que le code était portable pour les nouvelles architectures de la CPU, car il s'agissait d'une langue de haut niveau, mais très efficace car elle a été conçue pour ne pas utiliser de fonctionnalités de fantaisie telles que celles trouvées à Algol-60, un ancêtre de C. Et une partie de la raison est que Cobol a évolué pour s'intégrer dans des systèmes d'exploitation et de capacités plus récents. Par exemple, les bases de données SQL ne sont que des formes plus sophistiquées des fichiers simples axés sur la table que COBOL a été conçu pour gérer. Les liaiseurs de superposition ont permis d'écrire d'énormes programmes de COBOL tant que le flux d'exécution était approprié à peu près. Une fonctionnalité de mieux réalisée dans Assembleur ou PL / 1 ou FORTRAN peut être accessible via des appels de procédure.

Le langage moderne le plus proche de Cobol est Python, car vous pouvez écrire des programmes propres qui sont presque lus comme l'anglais sans ponctuation étranger partout, mais vous pouvez tirer parti d'une bibliothèque de fonctionnalités importantes et sophistiquées plutôt que d'avoir à coder votre propre temps. Bien sûr, Python a adopté toutes les caractéristiques d'Algol-60 et plus, car elle a été conçue à l'ère moderne lorsque vous n'avez pas à tout adapter à 16k de RAM.


2 commentaires

"Bibliothèque de fonctionnalités" grande et sophistiquée "- Beaucoup de mots-clés intégrés pour diverses choses - mais sans bibliothèques. Vous avez fini par coder des calculs de date simples, redémarrage des chaînes, etc. à la main et encore.


Hmmm ... Les programmeurs modernes utilisent Google pour appliquer le principe sec. PYPI.PYTHON.ORG/PYPI/ISO8601 pypi.python.org/pypi/python-datetime-tz/0.2 PYPI.PYTHON.ORG/PYPI/PYTHON-CHRONO/0.3.0 et il y a beaucoup plus. Ou si vous ne pouvez pas les utiliser, alors au moins, écrivez votre propre bibliothèque.



3
votes

Un autre point Si la faveur ou le COBOL dans un contexte financier est qu'il incite des types de données natifs et des opérateurs mathématiques pour faire une arithémétique à point fixe décimal (voir: [Décimal emballé] [1]).

Décimal emballé est utile pour effectuer des calculs financiers car il maintient un nombre fixe de chiffres avant et après le point décimal. Cela rend un peu plus facile de faire face à l'arrondissement des montants financiers.

Peu de langues autres que COBOL, PL / 1 et Algol peuvent efficacement faire de l'arithmétique en un point fixe décimal. Les ordinateurs IBM Mainframe ont des circonscriptions matérielles dédiées pour effectuer des calculs en BCD, ce qui aide à garder les performances de Cobol quelque part dans la stratosphère.

[1]: http://fr.wikipedia.org/wiki/packed_decimal "Décimal emballé"


1 commentaires

Il y a plusieurs langues dont le point fixe décimal est un type distinct (VB avait monnaie , par exemple, et il était également disponible pour toute langue complémaire). L'astuce est d'avoir du matériel qui fonctionne bien avec cela.



5
votes

sur OS / 360 et ses descendants, il y avait un ratio de quatre instructions de montage à un verbe COBOL, les concepteurs matériels ont bien consulté la spécification COBOL et ont construit une instruction définie pour le soutenir.

même apparemment monstrueux StateMens, comme: - xxx

transmet à environ huit instructions d'assemblage (seulement 1 à l'intérieur de la boucle)


0 commentaires

2
votes

L'avantage silencieux COBOL est tenu depuis longtemps que la langue elle-même sépare les données des instructions. Les données sont détenues dans la Division des données, tandis que le code est conservé à la longueur du bras dans la Division de la procédure. Cela aide à encourager les procédures "apatrides", qui est un aspect essentiel de la rédaction de code modulaire et facilement testable. Cobol était en avance sur les personnes orientées objet à cet égard, une leçon de nombreuses personnes C ++ et Java semblent avoir oublié il y a 15 ans.

Bien sûr, vous pouvez violer le principe, mais comme il est tout aussi facile d'écrire le code bien, les développeurs de COBOL les plus assaisonnés font.

Cela fait partie de la raison pour laquelle Cobol est toujours dans une utilisation étonnamment généralisée. Parce qu'il est modulaire, il est plus réutilisable, afin que les gens continuent de la réutiliser. Et pourquoi pas? Il est payé pour.


0 commentaires