Cos'è COBOL e le sue prestazioni che lo rendono (rispetto alla sua età) così veloce?

StackOverflow https://stackoverflow.com/questions/1627314

  •  06-07-2019
  •  | 
  •  

Domanda

Leggendo alcune delle domande qui, sembra esserci il consenso generale sul fatto che continui a esserci un'enorme quantità di codice COBOL "disponibile", non solo perché è un incubo il refactoring o la ricodifica, ma semplicemente perché per un certo segmento di mercato (finanziario ecc.), si è dimostrato più che capace di mantenere il proprio. Ma cosa è riguardo alla lingua che lo rende così? Come può qualcosa che ha diversi decenni continuare a funzionare abbastanza bene da resistere a linguaggi più moderni, con tutti i miglioramenti commisurati nella gestione della memoria ecc.? I compilatori COBOL ecc. Sono semplicemente migliorati silenziosamente in background? O c'è qualcosa di intrinseco nella lingua che significa che è estremamente efficiente per un determinato insieme di operazioni?

È stato utile?

Soluzione

Il linguaggio COBOL è stato progettato negli anni '50 per abbinare le capacità delle macchine lente e con limiti di RAM disponibili al momento. Per non parlare della mancanza di terminali interattivi. Molti aspetti del design sono fatti per essere facili da compilare in un codice macchina semplice senza necessità di ottimizzazione. Ad esempio, non ci sono variabili. Solo un singolo blocco di memoria di lavoro, con nomi che fanno riferimento a matrici di byte di una lunghezza fissa specifica che iniziano in una posizione fissa. I programmi COBOL vengono compilati secondo un codice macchina efficiente in base alla progettazione.

Man mano che le CPU sono diventate più veloci e la RAM è diventata più abbondante, i compilatori COBOL hanno aggiunto nuove funzionalità come l'I / O dei file con indicizzazione delle chiavi e l'algoritmo MERGE integrato e il supporto per i terminali di testo interattivi. Oggi c'è anche COBOL orientato agli oggetti.

Quindi parte del motivo è che il codice era portatile per le nuove architetture della CPU poiché era un linguaggio di alto livello, ma molto efficiente poiché era progettato per non utilizzare funzionalità fantasiose come quelle trovate in ALGOL-60, un antenato di C. E parte del motivo è che COBOL si è evoluto per adattarsi a nuovi sistemi operativi e funzionalità. Ad esempio, i database SQL sono solo forme più sofisticate dei semplici file orientati alle tabelle che COBOL è stato progettato per gestire. I linker overlay hanno permesso di scrivere enormi programmi COBOL purché il flusso di esecuzione fosse approssimativamente sequenziale. Qualsiasi funzione che è stata meglio eseguita in Assembler o PL / 1 o FORTRAN, è possibile accedere tramite chiamate PROCEDURE.

Il linguaggio moderno più vicino a COBOL è Python, perché puoi scrivere programmi puliti che quasi leggono come l'inglese senza punteggiatura estranea ovunque, ma puoi sfruttare una vasta e sofisticata libreria di funzionalità piuttosto che dover codificare il tuo tutto il tempo. Ovviamente Python ha adottato tutte le funzionalità di ALGOL-60 e altro, perché è stato progettato nell'era moderna quando non è necessario inserire tutto in 16k di RAM.

Altri suggerimenti

Su OS / 360 e i suoi discendenti c'erano circa un rapporto tra quattro istruzioni di assemblaggio e un verbo COBOL, i progettisti hardware avevano una buona occhiata alle specifiche COBOL e hanno creato un set di istruzioni per supportarlo.

Anche gli stati apparentemente mostruosi come: -

PERFORM BEGIN-PARA THROUGH END-PARA VARYING I FROM 1 BY 2 TO MAX_ARRAY.

Passa a circa otto istruzioni di assemblaggio (solo 1 delle quali è all'interno del loop)

È perché i programmi COBOL (almeno quelli vecchi) sono strutturati in modo molto semplice, quindi non è affatto difficile compilarli in un codice macchina efficiente. Ad esempio, "good-old" i programmi cobol non hanno bisogno di una gestione efficiente della memoria, perché l'allocazione dinamica della memoria semplicemente non avviene; il layout della memoria è fissato al momento della compilazione.

Un altro punto se favore o COBOL in un contesto finanziario è che dimostra i tipi di dati nativi e gli operatori matematici per fare l'arithemetica decimale a virgola fissa (vedi: [Decimale compresso] [1]).

Il decimale compresso è utile per eseguire calcoli finanziari perché mantiene un numero fisso di cifre prima e dopo il punto decimale. Ciò rende un po 'più semplice gestire l'arrotondamento degli importi finanziari.

Poche lingue diverse da COBOL, PL / 1 e Algol possono eseguire efficacemente l'aritmetica in virgola fissa decimale. I computer mainframe IBM hanno circuiti hardware dedicati per eseguire calcoli in BCD che aiutano a mantenere le prestazioni COBOL da qualche parte nella stratosfera.

[1]: http://en.wikipedia.org/wiki/Packed_decimal " Decimale imballato "

Il vantaggio silenzioso che COBOL ha da tempo è che la lingua stessa separa i dati dalle istruzioni. I dati sono conservati nella DIVISIONE DATI, mentre il codice è tenuto a debita distanza nella DIVISIONE PROCEDURA. Questo aiuta a incoraggiare la scrittura di "apolidi" procedure, che è un aspetto critico della scrittura di codice modulare e facilmente testabile. COBOL era in vantaggio rispetto agli Object Oriented in questo senso, una lezione che molti C ++ e Java sembrano aver dimenticato 15 anni fa.

Naturalmente puoi violare il principio, ma poiché è altrettanto facile scrivere bene il codice, lo fanno gli sviluppatori COBOL più esperti.

Questo fa parte del motivo per cui COBOL è ancora sorprendentemente diffuso. Perché è modulare, è più riutilizzabile, quindi le persone continuano a riutilizzarlo. E perchè no? È pagato per.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top