Computer finestre Internet

Diversi linguaggi di programmazione. Linguaggio di programmazione

Fino alla metà degli anni Sessanta il personal computer era una macchina troppo costosa che veniva utilizzata esclusivamente per compiti speciali e che svolgeva un solo compito alla volta.

I linguaggi di programmazione a quel tempo, così come il dispositivo informatico su cui venivano utilizzati, erano sviluppati solo per eseguire compiti di un piano specifico, ad esempio per l'informatica scientifica e non. Per il motivo che le macchine, come abbiamo detto sopra, erano un piacere molto costoso e veniva eseguita solo un'attività alla volta, quindi il tempo era considerato costoso, quindi la velocità di esecuzione del programma era in primo piano.

Tuttavia, il costo iniziò a diminuire durante gli anni Sessanta, ed è giunto il momento in cui anche le piccole imprese possono permettersi questo piacere. Inoltre, la velocità è aumentata e le macchine sono rimaste inattive per molto tempo senza eseguire alcuna attività. E per fermare questo, sono stati introdotti sistemi di condivisione del tempo.

Tempo di elaborazione in questi sistemi, come dirlo, "tagliato", e gli utenti potrebbero ricevere alternativamente brevi segmenti di questo tempo. Il dispositivo del computer ha iniziato a funzionare molto più velocemente, il che ha permesso all'utente di sentirsi al terminale come se stesse facendo il suo lavoro da solo con il sistema. L'apparato, a sua volta, era meno inattivo, poiché eseguiva non uno, ma diversi compiti contemporaneamente. La condivisione del tempo ha ridotto significativamente il costo del tempo hardware, tutto grazie al fatto che un dispositivo potrebbe essere condiviso da più di un utente, e nemmeno due, ma centinaia.

Quindi, quando il potere è diventato più economico e più disponibile, coloro che hanno creato linguaggi di programmazione hanno iniziato a pensare sempre di più a una scrittura più conveniente del software e non alla velocità della loro esecuzione. Le operazioni "piccole", cioè operazioni di tipo atomico che venivano eseguite direttamente dai dispositivi dell'apparato, venivano combinate in operazioni più "voluminose" alto livello e disegni uniformi, con i quali era molto più comodo e facile per gli utenti svolgere le proprie attività.

Cosa sono i linguaggi di programmazione?

Diamo ora una risposta chiara a questa domanda. Un linguaggio di programmazione è un sistema di segni formale che ha lo scopo di descrivere algoritmi in una forma più conveniente per l'esecutore, ad esempio, personal computer... Un linguaggio di programmazione include un pacchetto di regole semantiche, sintattiche e lessicali utilizzate per creare un programma per computer. Con l'aiuto di un tale linguaggio, il programmatore sarà in grado di determinare con precisione a quali eventi reagirà il PC, come verranno archiviate e trasmesse le informazioni e anche quali azioni devono essere eseguite su questi diversi tipi di circostanze.

Quasi tremila linguaggi di programmazione sono stati inventati durante la creazione dei primi dispositivi programmabili. Il loro numero aumenta ogni anno e l'elenco viene riempito di nuovi. Ci sono alcuni linguaggi che solo un piccolo numero di creatori che li hanno sviluppati sa usare, altri diventano noti a un gran numero di utenti. Nel loro lavoro, i programmatori ne usano più di dieci lingue differenti programmazione.

A cosa servono i linguaggi di programmazione?

Il processo di un PC è l'esecuzione di un programma. Per dirla di più linguaggio semplice, ovvero un batch di comandi che seguono in un ordine specifico. Il tipo di istruzione di tipo macchina, che consiste di zero e uno, indica quali azioni deve eseguire il processore centrale. Da ciò segue: per impostare la sequenza di azioni da eseguire del PC, viene impostata una sequenza di codici di tipo binario dei comandi corrispondenti. Nei codici macchina, il software consiste di molte istruzioni. Scrivere un software di questo tipo richiede tempo, è ingombrante e noioso. Il programmatore deve conoscere la combinazione di uno e zero del codice di tipo binario di ogni programma, inoltre, deve ricordare i codici di tipo binario degli indirizzi dati che vengono utilizzati nella sua esecuzione. È molto più facile scrivere software in un linguaggio che è più vicino al linguaggio naturale umano e istruire il PC a tradurre questo programma in codici di tipo macchina. È così che sono comparsi i linguaggi di programmazione, che sono destinati specificamente alla scrittura di software.

Ci sono un gran numero di diversi linguaggi di programmazione ora. Per risolvere molti problemi, puoi applicarli ciascuno. Gli esperti nel loro campo sanno quale linguaggio di programmazione utilizzare per risolvere eventuali problemi, poiché ciascuno dei linguaggi è dotato delle proprie capacità, orientamento a determinati tipi di attività e ha anche il proprio modo di descrivere oggetti e concetti utilizzati per risolvere un gran numero di problemi.

I linguaggi di programmazione sono divisi in 2 gruppi

Ci sono lingue di basso livello e lingue di alto livello.

Il primo gruppo comprende i linguaggi assembly, in cui i simboli di istruzione vengono utilizzati sotto forma di simboli che vengono ricordati rapidamente e chiaramente. Simboli vengono scritti al posto di una sequenza di comandi di tipo binario, e al posto degli indirizzi di dati di tipo binario, che vengono utilizzati durante l'esecuzione di un comando, i nomi di questi dati sotto forma di simboli vengono scelti dai programmatori e vengono presi . Tale linguaggio di programmazione ha un altro nome: codice automatico o codice mnemonico.

Ma i linguaggi di programmazione di alto livello sono più spesso utilizzati per i programmi da coloro che li creano. Tale lingua, in linea di principio, proprio come la lingua umana, ha il suo alfabeto, vale a dire un gran numero di simboli usati nelle lingue. Questi caratteri sono necessari per comporre le parole chiave della lingua. Ogni parola chiave ha una sua funzione, proprio come nel solito per noi, il linguaggio delle parole, che sono composte da lettere alfabetiche. Le parole chiave sono combinate tra loro in frasi usando le regole sintattiche della lingua. Ciascuna di tutte le proposte è responsabile della sequenza di azioni che il PC eseguirà.

Il linguaggio di programmazione, che ha un alto livello, è il collegamento tra il PC e l'utente, offrendogli di comunicare con il PC nel modo più conveniente per una persona. Molto spesso, questo linguaggio ti aiuta a scegliere il metodo giusto per risolvere i problemi.

Prima di iniziare a scrivere software in un linguaggio di programmazione di alto livello, uno specialista elabora un algoritmo per risolvere i problemi, ovvero sta elaborando un piano d'azione passo passo che deve essere eseguito per risolvere questo problema. Pertanto, i linguaggi di programmazione che richiedono la compilazione preliminare di un algoritmo sono chiamati linguaggi di tipo algoritmico.

Bene, arriviamo, possiamo dire la cosa principale. Ora ti diremo quali sono i linguaggi di programmazione.

Quali linguaggi di programmazione ci sono

Fortran

A metà degli anni Cinquanta, gli scienziati iniziarono a creare linguaggi di programmazione. E il primissimo linguaggio di questo tipo si chiamava Fortran, ed è stato sviluppato nel 1957. Viene utilizzato per descrivere un algoritmo per la risoluzione di problemi di tipo scientifico e tecnico utilizzando un computer digitale. Inoltre, come le prime unità computazionali, questo tipo di linguaggio veniva utilizzato per eseguire calcoli di scienze naturali e matematici. Questa lingua in un tipo migliorato è sopravvissuta fino ai nostri giorni ed è, tra le lingue moderne, che hanno un livello elevato, la più utilizzata nella conduzione di ricerche di natura scientifica. Le opzioni più comuni oggi sono Fortran-I2, Fortran-I4, EASIC Fortran e le loro generalizzazioni.

ALGOL

Continuiamo il nostro argomento sui linguaggi di programmazione. Come hai già capito, ora parleremo di un linguaggio di programmazione come Algol, apparso nel 1958-1960. Nel 1964-1968 è stato migliorato, quindi è apparso Algol - 68. Un linguaggio di questo tipo è stato sviluppato da un comitato, che includeva scienziati americani ed europei, e lo ha classificato tra le lingue che hanno un livello elevato. Utilizzando un linguaggio di questo tipo, le formule algebriche potrebbero essere facilmente tradotte in comandi di programma. Algol era popolare non solo in Europa, ma anche in Russia. Per tutti i linguaggi di programmazione creati dopo qualche tempo, questo tipo di linguaggio ha avuto un impatto notevole e, in particolare, ha interessato il linguaggio Pascal. Questo tipo di linguaggio, in linea di principio, proprio come il linguaggio FORTRAN, nasce per risolvere problemi di tipo scientifico e tecnico. Inoltre, il linguaggio è stato utilizzato come mezzo per insegnare le basi della programmazione, ovvero l'arte di compilare software.

Cobol

Il linguaggio di programmazione Cobol è stato creato nel 1959-1960 e questo linguaggio appartiene alla terza generazione. In primo luogo, è destinato allo sviluppo di applicazioni per il business e alla risoluzione di problemi di tipo economico, per l'elaborazione di dati bancari, per compagnie assicurative e altri enti. L'"inventore" di Cobol è Grace Hopper. Di solito, per la sua macchinosità e verbosità, COBOL viene criticato, poiché uno degli obiettivi dei creatori di questo linguaggio era la massima approssimazione a lingua inglese... Allo stesso tempo, il linguaggio di programmazione aveva strumenti eccellenti per il suo tempo per svolgere attività con strutture di dati e file, e questo, tra l'altro, gli ha fornito una lunga vita nelle applicazioni aziendali. Almeno negli Stati Uniti, di sicuro.

Lisp

Il prossimo in linea è il linguaggio di programmazione Lisp. Il linguaggio di programmazione Lisp è stato sviluppato quasi contemporaneamente al linguaggio di programmazione Cobol. Questo linguaggio si basa sulla rappresentazione del programma di elenchi di caratteri lineari di sistema, che sono la struttura dati principale del linguaggio. È il secondo linguaggio di programmazione più antico dopo Fortran. È ampiamente utilizzato per elaborare le informazioni sotto forma di simboli e viene utilizzato per creare software che imita l'attività del cervello umano.

Un programma Lisp è costituito da sequenze di espressioni, cioè forme. Il risultato del programma è il calcolo di queste espressioni, scritte sotto forma di elenco, una delle strutture principali di questo tipo di linguaggio. Il significato principale del programma Lisp è "vita" nello spazio simbolico.

DI BASE

Il linguaggio di programmazione BASIC è stato sviluppato dai programmatori del Dartmouth College negli Stati Uniti a metà degli anni Sessanta. Il linguaggio era basato in parte su Fortran 2 e in parte su Algol - 60; sono state inoltre apportate aggiunte che lo hanno reso più conveniente per lavorare in modalità time sharing, e dopo diversi anni è diventato conveniente anche per l'elaborazione del testo e l'aritmetica delle matrici. Questo tipo di linguaggio di programmazione è stato originariamente implementato sul mainframe GE-265, che supporta un gran numero di terminali. Al momento della sua comparsa, contrariamente alla credenza popolare, era una lingua compilata.

Questo tipo di linguaggio di programmazione è stato progettato in modo che gli studenti possano scrivere programmi utilizzando terminali in multiproprietà. È stato creato non solo per risolvere il problema associato a lingue problematiche e vecchie, ma è stato anche concepito in modo che potesse essere utilizzato da utenti "semplici" che non sono interessati alla velocità del programma, ma sono interessati nella possibilità di utilizzare un PC per risolvere i propri compiti. La maggior parte dei programmatori alle prime armi, a causa della semplicità di questo tipo di linguaggio, inizia il proprio percorso di programmazione con esso.

Forte

Il linguaggio di programmazione Fort è apparso alla fine degli anni Sessanta all'inizio degli anni Settanta. Questo tipo di linguaggio è stato utilizzato nei problemi di controllo di vari tipi di sistemi dopo che il suo creatore Moore Charles ha scritto su di esso un software, destinato a controllare i radiotelescopi dell'Osservatorio dell'Arizona.

Molte proprietà, come la flessibilità, l'interattività e la semplicità di "invenzione", hanno reso Forth un linguaggio efficace e attraente nella ricerca applicata e nella creazione di strumenti. Le ovvie aree di applicazione per questo tipo di linguaggio di programmazione sono i sistemi di controllo integrati. Oltre a tutto ciò che è stato detto, ha trovato applicazione anche nella programmazione di PC sotto il controllo di vari tipi di sistemi operativi.

Pascal

Continuando l'argomento, non si può non notare un tipo di linguaggio di programmazione come Pascal. Pascal è stato creato nel 1972 e prende il nome da Blaise Pascal, che un tempo era un grande matematico e inventore della prima unità aritmetica al mondo. Lo scienziato e informatico svizzero Nikolaus Wirth è giustamente considerato il creatore del linguaggio. L'innovazione è stata utilizzata per l'insegnamento mediante metodi di programmazione. Pascal è un linguaggio di programmazione scopo generale.

Di tutte le sue caratteristiche, si possono chiamare le principali: si tratta della digitazione più rigorosa e della disponibilità di strumenti di programmazione di tipo strutturato. Pascal è stata una delle prime lingue del genere. Il linguaggio di programmazione Pascal insegna la correttezza della scrittura di un programma e il corretto sviluppo di metodi per risolvere i problemi e aiuta anche a imparare come scegliere le giuste opzioni per presentare e organizzare i dati utilizzati in un'attività. La lingua Pascal dal 1983 è stata introdotta in corsi di formazione informatica nelle scuole secondarie statunitensi.

Continuando l'argomento dei linguaggi di programmazione, abbiamo deciso di parlare di un altro tipo di linguaggio: questo è il linguaggio di Ada. Il linguaggio di programmazione Ada è stato ispirato da Pascal alla fine degli anni settanta e prende il nome da Ada Lovelace, una donna matematica di talento. Fu questa donna di talento che, nel 1843, spiegò al mondo le possibilità dell'Unità analitica di Charles Babbage. Questo tipo di linguaggio è stato sviluppato per ordine, che è stato fatto dal Dipartimento della Difesa degli Stati Uniti, ed è stato originariamente utilizzato per risolvere i problemi di controllo del volo spaziale.

Il linguaggio di programmazione Ada è un linguaggio di programmazione modulare, strutturato e orientato agli oggetti che contiene strumenti di programmazione di alto livello per processi paralleli. Sintassi lingua del programma di questo tipo è ripreso da Pascal e Algol, è stato ampliato ed eseguito in uno stile logico e rigoroso. Ada è un linguaggio di programmazione che ha una tipizzazione forte ed esclude completamente il lavoro con oggetti che non hanno tipi e riduce anche le conversioni automatiche al minimo assoluto.

Il linguaggio di programmazione C è di gran lunga il più popolare e utilizzato dai programmatori. Questo tipo di linguaggio di programmazione ha origine da 2 linguaggi, ovvero BCPL e B. Martin Richards nel 1967 ha creato BCPL come linguaggio destinato alla scrittura di software di sistema e compilatori. Di seguito ti spieghiamo di cosa si tratta. Ken Thompson ha utilizzato il DEC PDP-7 sul suo PC nel 1970 per creare versioni precedenti di UNIX. Sia nella prima che nella seconda lingua, le variabili non erano separate in tipi: ogni valore di dati aveva una parola in memoria.

Il linguaggio di programmazione C è stato implementato per la prima volta nel 1972 su un PC DEC PDP-11. Ma è riuscito a guadagnare popolarità e fama come sistema operativo UNIX. Tutti i principali sistemi operativi oggi sono scritti in C o C++. Il linguaggio di programmazione C è disponibile su un gran numero di PC dopo diversi decenni. E a proposito, vale la pena notare che è completamente indipendente dall'hardware.

Il linguaggio C è diventato un linguaggio di programmazione tradizionale alla fine degli anni settanta. Questo tipo di linguaggio è dotato di strumenti ricchi che consentono di scrivere software flessibile che viene utilizzato in tutti i tipi di PC moderni.

Prologo

Bene, qui arriviamo alla fine. Concluderemo il nostro argomento sui linguaggi di programmazione con una storia sull'ultimo linguaggio in quest'area - e si chiama Prolog. Questo tipo di linguaggio è considerato il linguaggio di programmazione del futuro ed è stato creato nei primi anni settanta. Specialisti dell'Università di Marsiglia hanno preso parte allo sviluppo. Prende il nome dalle parole "PROGRAMMAZIONE NEL LINGUAGGIO DELLA LOGICA". Il linguaggio di programmazione è stato creato sulla base delle leggi della logica matematica. Questo tipo di linguaggio, a differenza dei linguaggi di programmazione sopra descritti, non è algoritmico e appartiene ai cosiddetti linguaggi descrittivi, cioè descrittivi.

Ora parliamo di cosa sono un compilatore e un interprete?

Compilatore e interprete

Sviluppare un linguaggio che sia conveniente per scrivere un programma non è sufficiente. Ogni lingua deve avere un traduttore, che è un programma speciale: un traduttore.

Quindi, un traduttore è un programma progettato per tradurre software scritto in un linguaggio di programmazione in software in un altro linguaggio di programmazione. Questo processo di traduzione è chiamato traduzione. Un esempio di traduttore è un compilatore, che è anche un programma. È destinato alla traduzione di software, scritto in qualsiasi lingua, in software in codici di tipo macchina. Questo processo è chiamato compilazione.

C'è un altro modo che può combinare i processi di traduzione e di esecuzione del programma, e si chiama interpretazione. L'essenza del processo è la seguente: prima viene tradotta in codici di tipo macchina, quindi viene eseguita la prima riga del software. Al termine della prima riga, inizia la traduzione della seconda riga e così via.

Quindi, da ciò possiamo concludere che l'interpretazione è un programma destinato alle traduzioni riga per riga e al programma sorgente.

Bene, sembra che per oggi sia tutto, ora sai cosa sono linguaggi di programmazione e cosa sono.

È noto che la tecnologia dell'informazione è una delle aree in più rapida crescita della vita moderna. Nuove tecnologie, progetti, nomi e abbreviazioni compaiono quasi ogni giorno. E alla ricerca del progresso, nello sforzo di stargli dietro, a volte è utile fermarsi un minuto, alzarsi in punta di piedi e guardarsi intorno. Per guardare oltre l'orizzonte, ricordare la storia e pensare al futuro... Per immergersi nel lavoro con nuova energia, padroneggiare nuove tecnologie, aumentare la propria efficienza e il proprio benessere. Fino a quando non ti viene voglia di rialzarti in punta di piedi...

Mi è stato suggerito di scrivere questo articolo da una discussione che è divampata su uno dei forum dotSITE dopo che è apparso un post che criticava aspramente C#, uno dei componenti principali della nuova piattaforma .NET di Microsoft. Il messaggio conteneva le critiche già abbastanza comuni a Microsoft in generale e in particolare (non sto qui affermando che non c'è nulla da criticare per Microsoft, è solo che questa critica ha già messo i denti sul bordo), nonché alcune affermazioni in particolare su C #. Nel corso della discussione che ne è seguita, sono state fatte diverse osservazioni interessanti, ma alcune questioni sono rimaste inalterate. Tutto ciò mi ha spinto a scrivere un articolo in cui si cerca di "conciliare" in qualche modo i portatori di opinioni sull'esclusività di questo o quel linguaggio di programmazione. Cercherò di fornire alcuni cenni storici sullo sviluppo delle varie lingue e spiegherò alcune tendenze generali con esempi. Forse posso convincere qualcuno dell'inutilità di tenere discussioni come quelle sopra. Non pretendo di essere obiettivo (anche se cercherò di esserlo) o di essere completo. Questo è solo un tentativo di "stare in punta di piedi e guardarsi intorno"...

1. I primi linguaggi universali

Quindi, cominciamo. Torniamo alle origini dello sviluppo della tecnologia informatica. Ricordiamo i primissimi computer e programmi per loro. Questa era l'era della programmazione direttamente nei codici macchina e i principali supporti di memorizzazione erano schede perforate e nastro perforato. I programmatori dovevano conoscere a fondo l'architettura della macchina. I programmi erano abbastanza semplici, il che era causato, in primo luogo, dalle capacità molto limitate di queste macchine e, in secondo luogo, dalla grande complessità dello sviluppo e, soprattutto, del debug dei programmi direttamente nel linguaggio macchina. Allo stesso tempo, questo metodo di sviluppo ha conferito al programmatore un potere incredibile sul sistema. stava diventando possibile utilizzo algoritmi e modi così ingegnosi di organizzare i programmi che gli sviluppatori moderni non si sono mai sognati. Ad esempio, potrebbe essere utilizzata (ed è stata utilizzata!) una possibilità come il codice automodificante. La conoscenza della rappresentazione binaria dei comandi a volte ha permesso di non memorizzare alcuni dati separatamente, ma di incorporarli nel codice come comandi. E questo non è un elenco completo di tecniche, il possesso di almeno una delle quali ora ti fa progredire immediatamente al livello di un "guru" extra-classe.

2. Assemblatore

Il primo passo significativo sembra essere il passaggio al linguaggio assembly (consentiamoci una piccola digressione lirica: nome inglese linguaggio assembly, o assembler, è tradotto in russo esattamente dal termine che è stato usato sopra. Allo stesso tempo, il principiante ha l'impressione che la lingua prenda il nome da una certa persona chiamata assembler. Una situazione piuttosto divertente, non è vero?). Un passo apparentemente poco evidente - il passaggio alla codifica simbolica delle istruzioni macchina - era in realtà di grande importanza. Il programmatore non doveva più approfondire modi intelligenti per codificare le istruzioni a livello di hardware. Inoltre, spesso istruzioni sostanzialmente identiche venivano codificate in modi completamente diversi a seconda dei loro parametri (un esempio ben noto dal mondo dei computer moderni è la codifica dell'istruzione mov nei processori Intel: esistono diverse varianti di istruzioni codificate in modo completamente diverso; la scelta dell'una o dell'altra opzione dipende dagli operandi, sebbene l'essenza dell'operazione eseguita sia invariata: inserire il contenuto (o valore) del secondo operando nel primo). È apparsa anche la possibilità di utilizzare macro ed etichette, che ha anche semplificato la creazione, la modifica e il debug dei programmi. C'era anche una parvenza di portabilità: era possibile sviluppare un'intera famiglia di macchine con un set di istruzioni simile e un assemblatore comune per esse, mentre non era necessario fornire compatibilità binaria.

Allo stesso tempo, il passaggio a una nuova lingua è stato irto di alcuni lati negativi (almeno a prima vista). È diventato quasi impossibile usare tutti i tipi di trucchi intelligenti simili a quelli sopra menzionati. Inoltre, qui per la prima volta nella storia dello sviluppo della programmazione sono apparse due rappresentazioni del programma: nel codice sorgente e nella forma compilata. All'inizio, mentre gli assemblatori traducevano solo mnemonici in codici macchina, uno poteva essere facilmente tradotto in un altro e viceversa, ma poi, quando apparivano opportunità come etichette e macro, lo smontaggio divenne sempre più difficile. Alla fine dell'era degli assemblatori, la capacità di tradurre automaticamente in entrambe le direzioni era completamente persa. A questo proposito, sono stati sviluppati un gran numero di speciali programmi disassemblatori che eseguono trasformazioni inverse, ma nella maggior parte dei casi difficilmente riescono a separare il codice dai dati. Inoltre, tutte le informazioni logiche (nomi di variabili, etichette, ecc.) vengono irrimediabilmente perse. Nel caso del problema della decompilazione di linguaggi di alto livello, gli esempi di una soluzione soddisfacente del problema sono piuttosto rari.

3. Fortran

Nel 1954, nelle viscere della società IBM, un gruppo di sviluppatori guidati da John Backus creò il linguaggio di programmazione Fortran.

Il significato di questo evento difficilmente può essere sopravvalutato. È il primo linguaggio di programmazione di alto livello. Per la prima volta, un programmatore poteva veramente astrarsi dalle specificità dell'architettura della macchina. L'idea chiave che contraddistingue Nuova lingua da assembler, c'era il concetto di subroutine. Ricorda che questo computer moderni supportare le subroutine a livello hardware, fornendo le opportune istruzioni e strutture dati (stack) direttamente a livello assembler, nel 1954 questo era completamente sbagliato. Pertanto, compilare Fortran non è stato affatto un processo banale. Inoltre, la struttura sintattica del linguaggio era piuttosto complessa per l'elaborazione delle macchine, principalmente a causa del fatto che gli spazi come unità sintattiche non venivano utilizzati affatto. Ciò ha creato molte opportunità per errori nascosti, come ad esempio:

In Fortran, la seguente costruzione descrive un "ciclo for fino al segno 10 quando l'indice cambia da 1 a 100": DO 10 I = 1,100 Se si sostituisce qui la virgola con un punto, si ottiene l'operatore di assegnazione: DO10I = 1,100 It si dice che un tale errore abbia causato l'esplosione del missile durante l'ora di inizio!

Il linguaggio Fortran era (ed è ancora usato oggi) per l'informatica scientifica. Soffre dell'assenza di molti costrutti e attributi del linguaggio familiari; il compilatore praticamente non controlla in alcun modo il programma sintatticamente corretto dal punto di vista della correttezza semantica (corrispondenza di tipo, ecc.). Manca il supporto per i modi moderni di strutturare codice e dati. Gli stessi sviluppatori ne erano consapevoli. Secondo lo stesso Backus, si trovavano di fronte al compito di sviluppare un compilatore piuttosto che un linguaggio. La comprensione del significato indipendente dei linguaggi di programmazione è arrivata dopo.

L'avvento di Fortran è stato accolto con critiche ancora più feroci rispetto all'introduzione dell'assemblatore. I programmatori erano spaventati dalla diminuzione dell'efficienza dei programmi dovuta all'uso di un collegamento intermedio sotto forma di compilatore. E questi timori erano ben fondati: in effetti, un buon programmatore, molto probabilmente, quando risolverà qualche piccolo compito, scriverà manualmente un codice che funziona più velocemente del codice ottenuto a seguito della compilazione. Dopo qualche tempo, si è capito che la realizzazione di grandi progetti è impossibile senza l'uso di linguaggi di alto livello. La potenza dei computer crebbe e divenne possibile fare i conti con il calo di efficienza, che in precedenza era considerato minaccioso. I vantaggi dei linguaggi di alto livello sono diventati così evidenti da aver spinto gli sviluppatori a creare nuovi linguaggi, sempre più perfetti.

4. Cobol

Nel 1960 è stato creato il linguaggio di programmazione Cobol. È stato concepito come un linguaggio per la creazione di applicazioni commerciali e lo è diventato. Migliaia di applicazioni commerciali sono scritte in Cobol. Una caratteristica distintiva del linguaggio è la capacità di lavorare in modo efficiente con grandi quantità di dati, tipica delle applicazioni commerciali. La popolarità di Kobol è così alta che anche adesso, con tutti i suoi difetti (in termini di struttura e design, Kobol assomiglia per molti versi a Fortran), appaiono i suoi nuovi dialetti e implementazioni. È così che è apparsa di recente l'implementazione di Cobol, compatibile con Microsoft .NET, che probabilmente ha richiesto l'introduzione nel linguaggio di alcune funzionalità di un linguaggio orientato agli oggetti.

Nel 1964, la stessa società IBM creò il linguaggio PL/1, che avrebbe dovuto sostituire Cobol e Fortran nella maggior parte delle applicazioni. La lingua possedeva un'eccezionale ricchezza di costruzioni sintattiche. Ha introdotto per la prima volta la gestione delle eccezioni e il supporto della concorrenza. Va notato che la struttura sintattica della lingua era estremamente complessa. Gli spazi sono già stati utilizzati come separatori di sintassi, ma parole chiave non sono stati prenotati. In particolare, la riga seguente è un operatore PL/1 perfettamente normale: IF ELSE = THEN THEN THEN; ALTRO ALTRO

A causa di queste caratteristiche, lo sviluppo di un compilatore per PL/1 è stato estremamente difficile. Il linguaggio non è mai diventato popolare al di fuori del mondo IBM.

6. BASE

Nel 1963, al Dartmouth College fu creato il linguaggio di programmazione BASIC (Beginners' All-Purpose Symbolic Instruction Code). Il linguaggio è stato concepito principalmente come strumento di apprendimento e come primo linguaggio di programmazione per l'apprendimento. Si presumeva che fosse facile da interpretare e compilare. Devo dire che il BASIC è davvero diventato il linguaggio in cui si impara a programmare (almeno lo era qualche anno fa, ora questo ruolo è svolto da Pascal). Sono state create diverse potenti implementazioni BASIC che supportano i concetti di programmazione più moderni (l'esempio più importante è Microsoft Visual Basic).

7. Algol

Nel 1960, il linguaggio di programmazione Algol è stato creato da un team guidato da Peter Naur. Questa lingua ha dato origine a un'intera famiglia di lingue simili a Algol (il rappresentante più importante è Pascal). Nel 1968 è apparso una nuova versione linguaggio. Non ha trovato un'applicazione pratica così ampia come la prima versione, ma era molto popolare nei circoli dei teorici. La lingua era piuttosto interessante, poiché aveva molte caratteristiche uniche in quel momento.

8. Ulteriori sviluppi linguaggi di programmazione

A questo punto preferirei fermarmi e fare qualche commento. La creazione di ciascuno dei suddetti linguaggi (con la possibile eccezione di Algol) è stata dettata da alcune esigenze pratiche. Queste lingue sono servite come base per gli sviluppi successivi. Rappresentano tutti lo stesso paradigma di programmazione. I seguenti linguaggi sono andati significativamente oltre nel loro sviluppo, verso un'astrazione più profonda.

Fornirò informazioni sulle lingue successive sotto forma di descrizioni di famiglie linguistiche. Questo ti permetterà di tracciare meglio la relazione tra le singole lingue.

9. Linguaggi pascal

Nel 1970 Niklaus Wirth creò il linguaggio di programmazione Pascal. Il linguaggio è notevole in quanto è il primo linguaggio diffuso per la programmazione strutturata (il primo, in senso stretto, era Algol, ma non era così diffuso). Per la prima volta, l'operatore di salto incondizionato ha cessato di svolgere un ruolo fondamentale nel controllo dell'ordine di esecuzione delle istruzioni. Questo linguaggio introduce anche un forte controllo del tipo, che consente di identificare molti errori in fase di compilazione.

La caratteristica negativa del linguaggio era la mancanza di mezzi per dividere il programma in moduli. Wirth ne era consapevole e sviluppò il linguaggio Modula-2 (1978), in cui l'idea di un modulo divenne uno dei concetti chiave del linguaggio. Nel 1988 Modula-3 è stato introdotto con l'aggiunta di funzionalità orientate agli oggetti. Oberon e Oberon-2 sono la logica continuazione di Pascal e Modula. Sono caratterizzati da un movimento verso l'oggetto e l'orientamento dei componenti.

10. Linguaggi tipo C

Nel 1972, Kernighan e Ritchie hanno creato il linguaggio di programmazione C. È stato creato come linguaggio per lo sviluppo del sistema operativo UNIX. Il C viene spesso chiamato "assemblatore portatile", il che significa che consente di manipolare i dati in modo quasi efficiente come nel linguaggio assembly, fornendo costrutti di controllo strutturati e astrazioni di alto livello (strutture e array). È a questo che è ancora associata la sua immensa popolarità. Ed è proprio questo il suo tallone d'Achille. Il compilatore C è molto debole nel controllo del tipo, quindi è molto facile scrivere un programma esteriormente perfettamente corretto, ma logicamente errato.

Nel 1986, Bjarne Stroustrup ha creato la prima versione del linguaggio C++, aggiungendo al linguaggio C funzionalità orientate agli oggetti prese da Simula (vedi sotto) e risolvendo alcuni bug e soluzioni scadenti del linguaggio. Il C++ continua a migliorare al momento attuale, quindi nel 1998 è stata rilasciata una nuova (terza) versione dello standard, contenente alcune modifiche piuttosto significative. La lingua è diventata la base per lo sviluppo di moderni progetti grandi e complessi. Ha, tuttavia, e lati deboli derivanti da esigenze di efficienza.

Nel 1995, alla Sun Microsystems, Ken Arnold e James Gosling hanno creato linguaggio Java... Ha ereditato la sintassi di C e C++ e ha eliminato alcune delle fastidiose caratteristiche di quest'ultimo. Una caratteristica distintiva del linguaggio è la compilazione nel codice di alcune macchine astratte, per le quali viene poi scritto un emulatore (Java Virtual Machine) per sistemi reali. Inoltre, Java non dispone di puntatori ed ereditarietà multipla, il che migliora notevolmente l'affidabilità della programmazione.

Nel 1999-2000, Microsoft ha creato il linguaggio C#. È abbastanza simile a Java (ed è stato concepito come un'alternativa a quest'ultimo), ma ha anche caratteristiche distintive. Si concentra principalmente sullo sviluppo di applicazioni Internet multicomponente.

11. Lingue Ada e Ada 95

Nel 1983, la lingua Ada è stata creata sotto gli auspici del Dipartimento della Difesa degli Stati Uniti. Il linguaggio è notevole in quanto si possono rilevare molti errori in fase di compilazione. Inoltre, supporta molti aspetti della programmazione che spesso sono lasciati alla mercé del sistema operativo (concorrenza, gestione delle eccezioni). Nel 1995 è stato adottato lo standard linguistico Ada 95, che sviluppa versione precedente, aggiungendovi l'orientamento all'oggetto e correggendo alcune imprecisioni. Entrambe queste lingue non sono ampiamente utilizzate al di fuori di progetti militari e su larga scala (aviazione, trasporto ferroviario). Il motivo principale è la difficoltà di apprendimento della lingua e una sintassi piuttosto macchinosa (molto più ingombrante del Pascal).

12. Lingue del trattamento dei dati

Tutti i linguaggi di cui sopra sono linguaggi generici nel senso che non sono mirati o ottimizzati per l'uso di strutture dati specifiche o per l'uso in aree specifiche. È stato sviluppato un gran numero di lingue, destinate ad applicazioni abbastanza specifiche. Di seguito è riportato il breve recensione tali lingue.

Nel 1957 si tentò di creare un linguaggio per descrivere l'elaborazione di dati matematici. Il linguaggio è stato chiamato APL (Application Programming Language). La sua caratteristica distintiva era l'uso simboli matematici(che ne rendeva difficile l'utilizzo sui terminali testuali; la comparsa delle interfacce grafiche eliminava questo problema) e una sintassi molto potente che permetteva di eseguire molte operazioni non banali direttamente su oggetti complessi, senza ricorrere alla loro scomposizione in componenti. L'uso diffuso è stato impedito, come già notato, dall'uso di simboli non standard come elementi di sintassi.

14. Snobol e icona

Nel 1962 apparve il linguaggio Snobol (e nel 1974 il suo successore Icon), destinato all'elaborazione delle stringhe. La sintassi di Icon ricorda C e Pascal allo stesso tempo. La differenza sta nella presenza di potenti funzioni integrate per lavorare con le stringhe e nella semantica speciale associata a queste funzioni. La controparte moderna di Icon e Snobol è Perl, un linguaggio di elaborazione di stringhe e testo che ha aggiunto alcune funzionalità orientate agli oggetti. È considerato un linguaggio molto pratico, tuttavia manca di eleganza.

15. SETL

Nel 1969 fu creato il linguaggio SETL, un linguaggio per descrivere le operazioni sugli insiemi. La struttura dati principale nel linguaggio è un insieme e le operazioni sono simili alle operazioni matematiche sugli insiemi. Utile quando si scrivono programmi che trattano oggetti astratti complessi.

16. Lisp e lingue simili

Nel 1958 apparve il linguaggio Lisp, un linguaggio per l'elaborazione degli elenchi. È ampiamente utilizzato nei sistemi di intelligenza artificiale. Ha diversi discendenti: Planner (1967), Scheme (1975), Common Lisp (1984). Molte delle sue caratteristiche sono state ereditate. lingue moderne programmazione funzionale.

17. Linguaggi di scripting

Di recente, a causa dello sviluppo delle tecnologie Internet, dell'uso diffuso di computer ad alte prestazioni e di una serie di altri fattori, si sono diffusi i cosiddetti linguaggi di scripting. Questi linguaggi erano originariamente destinati ad essere utilizzati come linguaggi di controllo interno in tutti i tipi di sistemi complessi. Molti di questi, tuttavia, sono andati oltre l'ambito della loro applicazione originale e vengono ora utilizzati in aree completamente diverse. Le caratteristiche di queste lingue sono, in primo luogo, la loro interpretabilità (la compilazione è impossibile o indesiderabile), in secondo luogo, la semplicità della sintassi e, in terzo luogo, la facile estensibilità. Pertanto, sono ideali per un uso frequente. programmi modificabili, molto piccoli programmi o nei casi in cui l'esecuzione delle istruzioni linguistiche richiede un tempo incomparabile con il tempo della loro analisi. È stato creato un numero abbastanza elevato di tali lingue, elenchiamo solo quelle principali e più utilizzate.

18. JavaScript

Il linguaggio è stato creato da Netscape Communications come linguaggio per descrivere il comportamento complesso delle pagine web. Originariamente chiamato LiveScript, il nome è stato cambiato per motivi di marketing. Interpretato dal browser quando viene visualizzata la pagina web. La sintassi è simile a Java e (da remoto) a C/C++. Ha la capacità di utilizzare la funzionalità degli oggetti incorporata nel browser, ma non è veramente un linguaggio orientato agli oggetti.

19. VBScript

Il linguaggio è stato creato da Microsoft in molti modi come alternativa a JavaScript. Ha un campo di applicazione simile. Sintatticamente simile a Visual Basic (ed è una versione ridotta di quest'ultimo). Proprio come JacaScript, viene eseguito dal browser durante il rendering delle pagine Web e ha lo stesso grado di orientamento agli oggetti.

20. Perla

Il linguaggio è stato creato per aiutare l'amministratore di sistema del sistema operativo Unix a elaborare vari tipi di testi ed evidenziare le informazioni necessarie. Sviluppato per essere un potente strumento di elaborazione testi. È un linguaggio interpretato ed è implementato su quasi tutte le piattaforme esistenti. Viene utilizzato per l'elaborazione di testi e per la generazione dinamica di pagine Web su server Web.

21. Pitone

Un linguaggio di programmazione orientato agli oggetti interpretato. È simile per struttura e scopo a Perl, ma meno diffuso e più rigoroso e logico. Esistono implementazioni per la maggior parte delle piattaforme esistenti.

22. Linguaggi orientati agli oggetti

L'approccio orientato agli oggetti, che ha sostituito quello strutturato, non è apparso per la prima volta in C++, come alcuni credono. Ci sono tutta una serie di linguaggi puramente orientati agli oggetti là fuori senza i quali la nostra indagine sarebbe incompleta.

23. Simulazione

Il primo linguaggio orientato agli oggetti è stato Simula (1967). Questo linguaggio era destinato alla modellazione di vari oggetti e processi e le funzionalità orientate agli oggetti apparivano in esso proprio per descrivere le proprietà degli oggetti del modello.

24. Piccole chiacchiere

La popolarità della programmazione orientata agli oggetti è stata portata dal linguaggio Smalltalk, creato nel 1972. Il linguaggio era destinato alla progettazione di interfacce grafiche complesse ed è stato il primo linguaggio veramente orientato agli oggetti. In esso, le classi e gli oggetti sono gli unici costrutti di programmazione. I grandi svantaggi di Smalltalk sono i grandi requisiti di memoria e le scarse prestazioni dei programmi risultanti. Ciò è dovuto alla scarsa implementazione delle funzionalità orientate agli oggetti. La popolarità dei linguaggi C++ e Ada 95 è dovuta proprio al fatto che l'orientamento agli oggetti viene implementato senza un significativo degrado delle prestazioni.

25. Eiffel

Esiste un linguaggio con un'ottima implementazione dell'orientamento agli oggetti che non è costruito su nessun altro linguaggio. Questo è il linguaggio di Eiffel (1986). Essendo un puro linguaggio di programmazione orientato agli oggetti, migliora anche l'affidabilità del programma attraverso l'uso di "asserzioni di controllo".

26. Linguaggi di programmazione paralleli

La maggior parte delle architetture di computer e dei linguaggi di programmazione sono focalizzati sull'esecuzione sequenziale delle istruzioni del programma. Attualmente, tuttavia, esistono sistemi software e hardware che consentono di organizzare l'esecuzione parallela di varie parti di uno stesso processo computazionale. La programmazione di tali sistemi richiede un supporto speciale da strumenti di programmazione, in particolare i linguaggi di programmazione. Alcuni linguaggi generici contengono elementi di supporto per il parallelismo, ma la programmazione di sistemi realmente paralleli a volte richiede tecniche speciali.

27. Lingua di Occam

Il linguaggio Occam è stato creato nel 1982 ed è destinato alla programmazione di transputer - sistemi multiprocessore per l'elaborazione distribuita dei dati. Descrive l'interazione di processi paralleli sotto forma di canali - modi di trasferire informazioni da un processo all'altro. Si noti la particolarità della sintassi del linguaggio Шccam - in esso, gli ordini di esecuzione sequenziali e paralleli degli operatori sono uguali e devono essere esplicitamente indicati con le parole chiave PAR e SEQ.

28. Linda modello di calcolo parallelo

Nel 1985 è stato proposto il modello di calcolo parallelo Linda. Il suo compito principale è organizzare l'interazione tra processi in esecuzione parallela. Ciò si ottiene mediante l'uso di uno spazio di tuple globale. Un processo può mettere lì una tupla con dei dati (cioè una raccolta di più dati, possibilmente eterogenei), e un altro processo può aspettare che appaia una tupla nell'area della tupla e, dopo la sua comparsa, leggere la tupla con eventuali successive cancellazione. Si noti che un processo può, ad esempio, posizionare una tupla nell'ambito ed uscire, e un altro processo può utilizzare questa tupla dopo un po'. Ciò consente la comunicazione asincrona. Ovviamente, con l'aiuto di un tale modello, è possibile emulare anche l'interazione sincrona. Linda è un modello di calcolo parallelo e può essere aggiunto a qualsiasi linguaggio di programmazione. Esistono implementazioni abbastanza efficienti di Linda che aggirano il problema di una regione di tupla globale con memoria potenzialmente illimitata.

29. Lingue non imperative

Tutte le lingue discusse in precedenza hanno una cosa in comune: sono imperativi. Ciò significa che i programmi su di essi, alla fine, rappresentano una descrizione passo passo della soluzione a un particolare problema. Puoi provare a descrivere solo la formulazione del problema e affidare il problema al compilatore. Ci sono due approcci principali per sviluppare questa idea: programmazione funzionale e logica.

30. Linguaggi funzionali

L'idea principale alla base della programmazione funzionale è la rappresentazione di un programma sotto forma di funzioni matematiche (ovvero funzioni il cui valore è determinato solo dai loro argomenti e non dal contesto di esecuzione). L'operatore di assegnazione non viene utilizzato in tali lingue (o almeno il suo uso è sconsigliato). Le capacità obbligatorie, di regola, sono disponibili, ma il loro uso è circondato da gravi restrizioni. Ci sono lingue con semantica pigra ed energica. La differenza sta, grosso modo, nel fatto che nelle lingue con semantica energetica, i calcoli vengono eseguiti nello stesso luogo in cui sono descritti, e nel caso della semantica pigra, il calcolo viene eseguito solo quando è realmente necessario. I primi linguaggi hanno un'implementazione più efficiente, mentre i secondi hanno una semantica migliore.

Tra le lingue con semantica energetica, citiamo ML e due dei suoi dialetti moderni: Standard ML (SML) e CaML. Quest'ultimo ha un discendente orientato agli oggetti - Objective CaML (O'CaML).

Tra le lingue con semantica pigra, due sono le più comuni: Haskell e il suo dialetto più semplice Clean.

Per ulteriori informazioni sui linguaggi funzionali, vedere QUI:

31. Linguaggi di programmazione logica

I programmi nei linguaggi di programmazione logici sono espressi come formule di logica matematica e il compilatore cerca di derivarne conseguenze.

L'antenato della maggior parte dei linguaggi di programmazione logici è il linguaggio Prolog (1971). Ha un numero di discendenti: Parlog (1983, focalizzato sul calcolo parallelo), Delta Prolog, ecc. La programmazione logica, come la programmazione funzionale, è un'area separata della programmazione e, per altro, particolari rimandiamo il lettore alla letteratura specializzata.

32. Invece di una conclusione

Mi permetterò di evidenziare alcune tendenze generali nello sviluppo dei linguaggi di programmazione. L'astuto lettore avrà probabilmente già intuito ciò che sto per dire molto tempo fa. Le lingue si stanno evolvendo verso sempre più astrazione. E questo è accompagnato da un calo di efficienza. La domanda è: ne vale la pena l'astrazione? Risposta: ne vale la pena. Ne vale la pena, perché un aumento del livello di astrazione comporta un aumento del livello di affidabilità della programmazione. La bassa efficienza può essere combattuta creando di più computer veloci... Se i requisiti di memoria sono troppo alti, puoi aumentare la quantità. Questo, ovviamente, richiede tempo e denaro, ma può essere risolto. Ma c'è solo un modo per affrontare gli errori nei programmi: devono essere corretti. Meglio ancora, non impegnarti. Meglio ancora, rendili il più difficili possibile. Ed è proprio a questo che mira tutta la ricerca nel campo dei linguaggi di programmazione. E devi fare i conti con la perdita di efficienza.

Lo scopo di questa recensione era un tentativo di dare al lettore un'idea di tutta la diversità lingue esistenti programmazione. C'è spesso un'opinione tra i programmatori sulla "applicabilità generale" di un particolare linguaggio (C, C ++, Pascal, ecc.). Questa opinione nasce per diversi motivi: mancanza di informazioni, abitudine, inerzia di pensiero. Ho cercato di compensare leggermente il primo fattore. Per il resto posso solo dire che un vero professionista dovrebbe impegnarsi costantemente per migliorare le proprie qualifiche professionali. E per questo non devi aver paura di sperimentare. E se tutti intorno a loro scrivessero in C / C ++ / VB / Pascal / Perl / Java / ... (sottolinea il necessario)? perché non provare qualcosa di nuovo? E se si rivelasse più efficace? Naturalmente, prima di decidere di utilizzare un nuovo linguaggio, è necessario studiare attentamente tutte le sue funzionalità, inclusa la presenza di un'implementazione efficace, la capacità di interagire con i moduli esistenti, ecc., E solo allora prendere una decisione. Certo, c'è sempre il rischio di sbagliare strada, ma... Solo chi non fa nulla non sbaglia.

E inoltre. Ho sentito e talvolta partecipato a discussioni come "la lingua A è migliore della lingua B". Spero che dopo aver letto questa recensione, molti saranno convinti dell'insensatezza di tali controversie. Il massimo che può essere discusso sono i vantaggi di una lingua rispetto a un'altra quando si risolve un problema particolare in determinate condizioni. Qui, infatti, a volte c'è da discutere. E la decisione a volte è tutt'altro che scontata. Tuttavia, argomentare "in generale" è un'ovvia sciocchezza.

Questo articolo vuole essere una risposta a chi grida "la lingua degli X DEVE MORIRE". Spero che la risposta si sia rivelata abbastanza adeguata e convincente. Spero anche che l'articolo abbia, oltre che valore polemico, anche conoscitivo.

Materiale da Wikipedia

Linguaggio di programmazione- formale sistema di segni destinato alla registrazione programmi per computer... Un linguaggio di programmazione definisce un insieme lessicale , sintattico e semantico regole che determinano l'aspetto del programma e le azioni che l'esecutore (di solito un computer) eseguirà sotto il suo controllo.

Allo stesso tempo, negli anni '40, apparvero i computer digitali elettrici e fu sviluppato un linguaggio che può essere considerato il primo linguaggio di programmazione informatica di alto livello - " Plankalkül"Creato da un ingegnere tedesco K. Zuse da A 1945 anni.

Dalla metà degli anni '50, linguaggi di terza generazione come Fortran , Lisp e Cobol... I linguaggi di programmazione di questo tipo sono più astratti (vengono anche detti "linguaggi di alto livello") e universali, non hanno una rigida dipendenza da uno specifico piattaforma hardware e le istruzioni della macchina utilizzate su di esso. Un programma in un linguaggio di alto livello può essere eseguito (almeno in teoria, in pratica di solito ci sono una serie di versioni o dialetti specifici dell'implementazione della lingua) su qualsiasi computer su cui è presente un traduttore per questa lingua (un strumento che traduce il programma nella lingua della macchina, dopodiché può essere eseguito dal processore).

Le versioni aggiornate delle lingue elencate sono ancora in uso oggi. Software, e ciascuno di essi ha avuto un preciso impatto sul successivo sviluppo dei linguaggi di programmazione. Poi, alla fine degli anni '50, apparve ALGOL, che è stata anche la base per una serie di ulteriori sviluppi in questo settore. Va notato che il formato e l'uso dei primi linguaggi di programmazione sono stati ampiamente influenzati da interfaccia restrizioni.

Perfezione

Un'importante area di lavoro sta diventando linguaggi di programmazione visivi (grafici), in cui il processo di "scrittura" di un programma come testo è sostituito dal processo di "disegno" (costruzione di un programma sotto forma di diagramma) sullo schermo di un computer. I linguaggi visivi forniscono chiarezza e una migliore percezione umana della logica del programma.

Standardizzazione dei linguaggi di programmazione

Per molti linguaggi di programmazione diffusi, standard internazionali... Organizzazioni specifiche aggiornano e pubblicano regolarmente le specifiche e le definizioni formali della lingua pertinente. Nell'ambito di tali comitati, lo sviluppo e la modernizzazione dei linguaggi di programmazione continuano e vengono affrontate le questioni relative all'espansione o al supporto di costruzioni linguistiche esistenti e nuove.

Tipi di dati

I moderni computer digitali sono binario e i dati sono memorizzati in un codice binario (binario) (sebbene siano possibili anche implementazioni in altri sistemi numerici). Questi dati di solito riflettono informazioni dal mondo reale (nomi, conti bancari, misurazioni, ecc.) che rappresentano concetti di alto livello.

Il sistema speciale con cui sono organizzati i dati nel programma è sistema di tipi linguaggio di programmazione; lo sviluppo e lo studio dei sistemi di tipo è noto come teoria dei tipi... Le lingue possono essere divise in avere digitazione statica e digitazione dinamica , e lingue senza tipo (Per esempio, Via ).

Le lingue digitate staticamente possono essere ulteriormente suddivise in lingue con dichiarazione obbligatoria dove ogni dichiarazione di variabile e funzione ha una dichiarazione di tipo obbligatoria e linguaggi con tipi dedotti... A volte vengono chiamati linguaggi digitati dinamicamente digitato in modo latente.

Strutture dati

I sistemi di tipi in linguaggi di alto livello consentono la definizione di tipi complessi e compositi, i cosiddetti strutture dati... In genere, i tipi di dati strutturati sono formati come prodotto cartesiano tipi base (atomici) e tipi compositi precedentemente definiti.

Le strutture dati di base (liste, code, tabelle hash, alberi binari e coppie) sono spesso rappresentate da una sintassi speciale nei linguaggi di alto livello. Tali dati sono strutturati automaticamente.

Semantica dei linguaggi di programmazione

Esistono diversi approcci per definire la semantica dei linguaggi di programmazione.

Le varietà più diffuse delle tre seguenti sono: operazionale, derivazionale (assiomatica) e denotazionale (matematica).

  • Quando si descrive la semantica all'interno operativo approccio, l'esecuzione di costruzioni di un linguaggio di programmazione viene solitamente interpretata con l'aiuto di un computer immaginario (astratto).
  • La semantica assiomatica descrive le conseguenze dell'esecuzione di costrutti linguistici utilizzando il linguaggio della logica e specificando pre e post condizioni.
  • odontoiatrico la semantica opera con concetti tipici della matematica - insiemi, corrispondenze, nonché giudizi, affermazioni, ecc.

Il paradigma di programmazione

Un linguaggio di programmazione è costruito in accordo con uno o l'altro di base modello di calcolo e paradigma programmazione.

Nonostante il fatto che la maggior parte delle lingue sia focalizzata su modello computazionale imperativo data dall'architettura del computer von Neumann, ci sono altri approcci. Possiamo citare i linguaggi con un modello computazionale impilato ( Forte , Fattore , PostScript ecc.), così come funzionale (Lisp , Haskell , , , REFAL basato sul modello di calcolo introdotto dal matematico sovietico A.A. Markov Jr.) e programmazione logica (Prologo).

Attualmente, si stanno anche sviluppando attivamente dichiarativo e linguaggi di programmazione visuale così come metodi e strumenti di sviluppo linguaggi specifici del problema(cm. Programmazione orientata al linguaggio).

Modi per implementare le lingue

I linguaggi di programmazione possono essere implementati come compilato , interpretato e inserito.

Un programma in un linguaggio compilato che utilizza compilatore(programma speciale) viene convertito in ( compila) in codice macchina (insieme di istruzioni) per un dato tipo di processore e poi assemblato in modulo eseguibile, che può essere eseguito come programma separato. In altre parole, il compilatore traduce il codice sorgente di un programma da un linguaggio di programmazione di alto livello in codici binari di istruzioni del processore.

Se il programma è scritto in un linguaggio interpretato, allora interprete esegue direttamente ( interpreta) il testo originale senza traduzione preliminare. In questo caso, il programma rimane nella lingua originale e non può essere lanciato senza un interprete. Un processore di computer, a questo proposito, può essere chiamato un interprete per il codice macchina.

La divisione in linguaggi compilati e interpretati è condizionale. Quindi, per qualsiasi linguaggio compilato tradizionalmente come Pascal, puoi scrivere un interprete. Inoltre, la maggior parte dei moderni interpreti "puri" non eseguono direttamente i costrutti del linguaggio, ma li compilano in una rappresentazione intermedia di alto livello (ad esempio, con dereferenziazione variabile ed espansione macro).

È possibile creare un compilatore per qualsiasi linguaggio interpretato, ad esempio un linguaggio Lisp interpretato in modo nativo può essere compilato senza alcuna restrizione. Il codice creato in fase di esecuzione può anche essere compilato dinamicamente in fase di esecuzione.

Di norma, i programmi compilati vengono eseguiti più velocemente e non richiedono programmi aggiuntivi, poiché sono già stati tradotti in linguaggio macchina. Allo stesso tempo, ogni volta che il testo del programma cambia, deve essere ricompilato, il che rallenta il processo di sviluppo. Inoltre, un programma compilato può essere eseguito solo sullo stesso tipo di computer e, di norma, con lo stesso sistema operativo per il quale è stato progettato il compilatore. Creare file eseguibile per un diverso tipo di macchina è necessaria una nuova compilazione.

Le lingue interpretate hanno alcune specifiche caratteristiche aggiuntive(vedi sopra), inoltre, i programmi su di essi possono essere avviati immediatamente dopo la modifica, il che facilita lo sviluppo. Spesso è possibile eseguire un programma in linguaggio interpretato tipi diversi macchine e sistemi operativi senza ulteriori sforzi.

Tuttavia, i programmi interpretati sono notevolmente più lenti da eseguire rispetto ai programmi compilati; inoltre, non possono essere eseguiti senza un programma interprete.

Questo approccio, in un certo senso, consente di sfruttare i vantaggi sia degli interpreti che dei compilatori. Va detto che ci sono lingue che hanno sia un interprete che un compilatore ( Forte).

Linguaggi di programmazione di basso livello

I primi computer dovevano essere programmati con codici macchina binari. Tuttavia, programmare in questo modo è un compito piuttosto lungo e ingombrante. Per semplificare questo compito, iniziarono ad apparire linguaggi di programmazione di basso livello che consentivano di impostare le istruzioni della macchina in una forma leggibile dall'uomo. Per convertirli in codice binario sono stati creati programmi speciali - traduttori.

Un esempio di linguaggio di basso livello è assemblatore... I linguaggi di basso livello sono specifici del tipo processore e tenendo conto delle sue peculiarità, quindi, per portare un programma in assembler su un'altra piattaforma hardware, va quasi completamente riscritto. Ci sono anche alcune differenze nella sintassi dei programmi per diversi compilatori. Verità, unità centrali di elaborazione per computer aziendali AMD e Intel praticamente compatibili e differiscono solo per alcuni comandi specifici. Ma i processori specializzati per altri dispositivi, ad esempio schede video e telefoni, contengono differenze significative.

I linguaggi di basso livello, di norma, vengono utilizzati per scrivere piccoli programmi di sistema, driver di dispositivo, moduli di interfaccia con apparecchiature non standard, programmazione di microprocessori specializzati, quando i requisiti più importanti sono compattezza, velocità e capacità accesso diretto alle risorse hardware.

Linguaggi di programmazione di alto livello

In esse non vengono prese in considerazione le peculiarità di specifiche architetture informatiche, pertanto le applicazioni create sono facilmente trasferibili da un computer all'altro. Nella maggior parte dei casi, è sufficiente ricompilare semplicemente il programma per una specifica architettura del computer e sistema operativo... È molto più facile sviluppare programmi in tali lingue e ci sono meno errori. Il tempo di sviluppo del programma è notevolmente ridotto, il che è particolarmente importante quando si lavora su progetti software di grandi dimensioni.

Ora si crede nella comunità di sviluppo che i linguaggi di programmazione che hanno accesso diretto alla memoria e ai registri o che hanno inserti in linguaggio assembly dovrebbero essere considerati come linguaggi di programmazione con un basso livello di astrazione. Pertanto, la maggior parte delle lingue che erano considerate lingue di alto livello prima del 2000 non sono più considerate lingue di alto livello.

Lo svantaggio di alcuni linguaggi di alto livello è grande taglia programmi contro programmi in linguaggi di basso livello. D'altra parte, per i programmi algoritmicamente e strutturalmente complessi quando si utilizza supercompilazione il vantaggio può essere dalla parte dei linguaggi di alto livello. Il testo dei programmi nel linguaggio di alto livello stesso è più piccolo, tuttavia, se lo prendiamo in byte, il codice originariamente scritto in linguaggio assembly sarà più compatto. Pertanto, i linguaggi di alto livello vengono utilizzati principalmente per sviluppare software per computer e dispositivi che dispongono di una grande quantità di memoria. E diversi sottotipi di assembler vengono utilizzati per programmare altri dispositivi, dove la dimensione del programma è fondamentale.

Simboli utilizzati

I moderni linguaggi di programmazione sono progettati per l'uso ASCII, cioè la disponibilità di tutti grafico I caratteri ASCII sono una condizione necessaria e sufficiente per registrare qualsiasi costrutto linguistico. manager caratteri ASCII utilizzato in misura limitata: sono consentiti solo il ritorno a capo CR, l'avanzamento riga LF e la linguetta orizzontale HT (a volte anche la linguetta verticale VT e il passaggio alla pagina successiva FF).

Prime lingue emerse durante l'era Caratteri a 6 bit utilizzato un insieme più limitato. Ad esempio, l'alfabeto Fortran contiene 49 caratteri (incluso lo spazio): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / (). , $ ":

Un'eccezione degna di nota è la lingua APL che utilizza molti caratteri speciali.

L'uso di caratteri non ASCII (come i caratteri KOI8-R o i caratteri Unicode) dipende dall'implementazione: a volte sono consentiti solo nei commenti e nelle costanti di caratteri/stringa, a volte sono consentiti solo negli identificatori. V l'URSS c'erano lingue in cui tutte le parole chiave erano scritte in lettere russe, ma tali lingue non hanno guadagnato grande popolarità (l'eccezione è Linguaggio di programmazione integrato 1C: Enterprise).

L'espansione del set di caratteri è limitata dal fatto che molti progetti di sviluppo software sono internazionali. Sarebbe molto difficile lavorare con un codice in cui i nomi di alcune variabili sono scritti in lettere russe, altre in arabo e altre ancora in caratteri cinesi. Allo stesso tempo, per lavorare con dati di testo, linguaggi di programmazione di nuova generazione ( Delfi 2006 , , Giava) sostegno Unicode.

Categorie di linguaggi di programmazione

Linguaggi di programmazione matematicamente validi

Queste sono lingue la cui semantica è diretto l'incarnazione di un certo modello matematico, leggermente adattato (senza rompere l'integrità) per essere un linguaggio più pratico per lo sviluppo di programmi reali. Solo poche lingue rientrano in questa categoria, la maggior parte delle lingue sono progettate come priorità in base alla possibilità di una traduzione efficace in macchina di Turing, e hanno solo un certo sottoinsieme nella sua composizione, incarnando l'uno o l'altro modello matematico- a partire dal