Lessico

sm. [sec. XIII; dal provenzale lenguatge].

1) Facoltà propria dell'uomo di esprimersi per mezzo della parola: le origini, la funzione del linguaggio; l'espressione stessa, l'insieme dei suoni convenzionali mediante i quali l'uomo esprime i propri pensieri e sentimenti; un linguaggio incomprensibile; parlare lo stesso linguaggio, fig., capirsi perfettamente, avere le stesse idee e gli stessi gusti. Per estensione, facoltà di esprimere un concetto o un sentimento con altri mezzi convenzionali: gesti, simboli, ecc.; il particolare significato che convenzionalmente si attribuisce a certi oggetti, segni, ecc.: il linguaggio della mimica; il linguaggio dei sordomuti; il linguaggio della pittura, della musica; il linguaggio dei fiori. In particolare, modo di esprimersi, con riferimento a caratteri stilistici, gergali o propri di un determinato ambiente, discipline, autori, ecc.: linguaggio infantile, familiare; linguaggio filosofico; linguaggio burocratico, forense; il linguaggio del Boccaccio; linguaggio poetico, cinematografico; usare un linguaggio triviale; non mi piace questo tuo linguaggio. Per il linguaggio degli animali, vedi comunicazione.

2) Ant. e lett., e talora anche nell'uso comune attuale, lingua, idioma.

3) In informatica, sistema di simboli, di caratteri e di regole che permettono di formare il programma con il quale è possibile comunicare con un elaboratore e guidarne il funzionamento per i fini prestabiliti. Tra i diversi tipi di linguaggio si distinguono i linguaggi di programmazione o simbolici, con i quali l'operatore scrive i programmi di origine (source program) e i linguaggi di macchina, o assoluti o di base; ogni linguaggio di programmazione simbolico deve essere associato a uno più traduttori in grado di trasformare un programma scritto in quel linguaggio in uno equivalente espresso utilizzando codice macchina per permetterne l'esecuzione su un elaboratore. A seconda che la traduzione avvenga al momento dell'esecuzione (nel qual caso la traduzione di un'istruzione non viene memorizzata, ma il codice macchina prodotto viene immediatamente eseguito) o prima di essa (con il conseguente salvataggio su file del codice prodotto, che può quindi essere utilizzato più volte), questi programmi traduttori sono detti interpreti o compilatori.

Fisiologia

Il linguaggio è un'attività fisiologica complessa che richiede da un lato l'integrità delle vie sensitive e dall'altro un elevato grado di integrazione corticale e neuro-muscolare. Infatti, ai fini di una corretta capacità di espressione verbale occorrono: la facoltà di udire i suoni e di comprendere il loro significato, fatto che richiede l'integrità delle vie acustiche periferiche fino all'area sensoriale acustica e l'integrità dell'area psico-acustica; l'organizzazione degli impulsi trasmessi lungo le vie uditive; l'ideazione e la programmazione dei movimenti necessari per articolare le parole; tali processi si svolgono nel centro motore del linguaggio articolato, o centro di Broca, situato nel giro frontale inferiore dell'emisfero cerebrale dominante a sinistra nei destrimani, a destra nei mancini; la risposta verbale secondo la quale il programma di movimento viene inviato alla corteccia motoria e quindi, dopo opportune correzioni cerebellari, trasmesso ai motoneuroni che mettono in movimento i muscoli di tutti gli organi necessari per la corretta espressione delle parole (fonazione, respirazione, articolazione, risonanza). I disturbi del linguaggio verbale parlato vengono (particolarmente a livello di età infantile) contrassegnati con il termine disfasia. Si indica con il nome di dislessia il disturbo nell'acquisizione della lettura, e di disortografia il disturbo nell'acquisizione della scrittura. In questi casi sono spesso rilevabili lesioni cerebrali nelle aree dell'emisfero sinistro (nei destrimani) deputate alle funzioni linguistiche; a volte però tali lesioni non sono rilevabili (e si parla di deficit neurologici minimi), per cui le cause di tali disturbi non sono ancora chiare.

Psicologia

Il termine viene usato in psicologia per indicare soprattutto il linguaggio verbale, sia parlato, sia scritto. Alcuni autori utilizzano però tale termine per designare ogni comportamento comunicativo, anche non verbale. Per ciò che riguarda il linguaggio verbale, le ricerche psicologiche si sono rivolte soprattutto a indagare l'apprendimento del linguaggio. A tale proposito si sono delineati due indirizzi contrapposti di ricerca, che fanno capo il primo al comportamentismo (e si riferisce in buona misura allo strutturalismo linguistico, da de Saussure a Bloomfield); il secondo alla psicologia cognitiva (e si riferisce direttamente alle grammatiche generative derivate dagli studi di N. Chomsky). Secondo i comportamentisti, il linguaggio viene appreso attraverso un processo di condizionamento operante. I cognitivisti ritengono invece che esistano delle strutture innate nell'uomo (il LAD di Chomsky, o dispositivo per l'acquisizione del linguaggio) che differenziano questo da tutti gli altri animali, consentendogli di apprendere il linguaggio verbale come elemento caratteristico specie-specifico. In questi ultimi anni sono stati effettuati da diversi psicologi statunitensi interessanti esperimenti sugli scimpanzè, che hanno consentito di dimostrare come questi Primati siano in grado di apprendere in larga misura il linguaggio verbale, con particolari metodiche. Così i coniugi Gardner hanno insegnato allo scimpanzè Washoe più di 180 vocaboli con l'alfabeto gestuale dei muti, e risultati altrettanto sorprendenti sono stati ottenuti con tecniche diverse da Premack, Glazersfeld e da altri. Tali ricerche non consentono però ancora di smentire l'ipotesi che il linguaggio sia un tratto specifico dell'uomo. Importanti ricerche sono state anche svolte sui rapporti, dimostratisi strettissimi, tra linguaggio e pensiero, anche se gli psicologi sono divisi tra chi reputa (sulla scia delle concezioni dello psicologo russo Vygotskij) che il linguaggio sia una premessa indispensabile al pensiero, e chi crede invece (come lo psicologo svizzero Piaget) che il pensiero si sviluppi autonomamente e solo in un secondo tempo sia rilevabile un'influenza reciproca tra queste due funzioni. Tra i linguaggi non verbali, intendendo con ciò tutte le forme di comunicazione indipendenti dalla parola detta o scritta, si parla di linguaggio mimico, intendendo con ciò la comunicazione che si ha con l'espressione del volto, e di linguaggio gestuale, riferendosi soprattutto ai movimenti del corpo o di alcuni segmenti di questo. Sono stati però studiati altri linguaggi non verbali, quali la direzione dello sguardo, la distanza tra persone che interagiscono, la collocazione reciproca (per esempio i posti a tavola), l'uso del tempo (per esempio far attendere), ecc.

Linguistica

Nell'uso comune il termine è talvolta confuso con quello di lingua, ma propriamente il linguaggio è la facoltà umana, universale e immutabile, di esprimersi che si realizza e si attua nelle lingue, sempre particolari e variabili; il linguaggio è quindi un'attività spirituale o enérgeia rispetto alla quale le varie lingue sono l'attuazione pratica o érgon. Rendendo possibile l'oggettivazione di un contenuto di coscienza attraverso simboli fonici finalizzati alla funzione del significare, il linguaggio appare come l'espressione simbolica per eccellenza, supporto del pensiero e strumento della sua comunicazione. È questo il linguaggio grammaticale o articolato, tipico ed esclusivo dell'uomo, dal quale si differenzia profondamente quello che impropriamente è detto linguaggio animale, semplice codice di segnali che trasmettono un messaggio globale non scomponibile e analizzabile in singole unità significanti e queste a loro volta in singoli fonemi, come avviene invece negli enunciati espressi dal linguaggio umano. Il problema delle origini del linguaggio, lungamente e ampiamente studiato anche da psicologi, filosofi e sociologi, non ha trovato finora una soluzione soddisfacente, ma ha portato a due risultati diametralmente opposti: quello della monogenesi e quello della poligenesi del linguaggio.

Filosofia

Nell'antichità, la filosofia presocratica della natura appuntò la propria indagine principalmente sul problema dell'origine del linguaggio. Parmenide – e successivamente i suoi discepoli –, occupandosi del rapporto fra soggetto e predicato in relazione alla conoscenza della realtà, mise in rilievo l'importanza del linguaggio nella comunicazione fra gli uomini. Platone dedicò al linguaggio un intero dialogo (Cratilo). Egli sostenne che il linguaggio è come una pittura, un'immagine delle cose, ciò che le manifesta: la verità è nelle cose e non nel linguaggio, che è uno strumento per conoscere e assume natura oggettiva solo quando è formalmente corretto in tutte le sue parti. Aristotele indagò il linguaggio da un punto di vista logico e formale analizzando i rapporti del linguaggio stesso con la conoscenza; per quanto concerne la sua natura, egli sostenne che esso è un suono della voce, significativo proprio in quanto simbolo delle affezioni dell'anima dell'uomo. Solo in età ellenistica, grazie allo stoicismo, si avviò lo studio grammaticale e sintattico del linguaggio. La ricerca posteriore si muove su due posizioni: convenzionalità o naturalità del linguaggio. Nel Medioevo Dante, nel De vulgari eloquentia, considera la parola segno della realtà; Duns Scoto studia il rapporto tra pensiero e parola. Il Rinascimento introduce nel problema l'elemento estetico e questo rimane anche nel Seicento, accanto però a un carattere pratico, per cui la natura del linguaggio viene estrapolata dal campo logico e, liberandosi dall'intellettualismo, approda alla concezione vichiana del linguaggio come spontaneità. Nell'Ottocento il problema fondamentale è dato dal contrasto fra “unicità logica della lingua e molteplicità dei linguaggi”: A. Humboldt sostenne l'esistenza di un linguaggio fondamentale che si diversifica poi nei vari linguaggi nazionali. Con l'idealismo il linguaggio s'identificò con l'espressione e tutto si risolveva nell'estetica. Con il sorgere della logica simbolica nacque il linguaggio formalizzato. Sempre nell'Ottocento, fondamentale per la filosofia del linguaggio è stata l'opera di F. de Saussure per la sua analisi del segno linguistico, impostata definitivamente su basi scientifiche. Egli scompone il segno linguistico, pur facendone sempre salva l'unità funzionale nel sistema linguistico stesso, in due ambiti distintamente analizzabili: il significante, l'immagine acustica (cioè la rappresentazione che ci viene data dai nostri sensi riguardo a ciò che si vuole denominare), e il significato, da identificarsi con il concetto. Il legame che unisce queste due facce del segno è, secondo de Saussure, del tutto arbitrario, risultando così, allo stesso modo, convenzionale il segno linguistico nel suo insieme. In tempi più recenti la problematica sul linguaggio è andata allargandosi per il confluire di altri orientamenti di pensiero. Un suo primo momento può considerarsi il neopositivismo o positivismo logico, che ebbe origine dalle ricerche sul tema dei rapporti tra filosofia e scienza, iniziate tra il 1922 e il 1925 dal circolo di Vienna, cui si sovrappose l'influenza dell'analisi logica della matematica condotta nel frattempo da B. Russell e da L. Wittgenstein nel suo Tractatus logico-philosophicus (1921). L'iniziale problema della “verificabilità” delle proposizioni sui “fatti di esperienza”, agitato da M. Schlick, diventa decisamente con O. Neurath problema del linguaggio, in quanto solo nell'ambito del linguaggio si compiono le operazioni logiche e ha senso una verifica delle proposizioni. Con R. Carnap finalmente la scienza diventa “costruzione logica del mondo” e la filosofia si esaurisce nell'analisi del linguaggio scientifico, che finisce per assumere il carattere di un radicale “formalismo” con Logische Syntax der Sprache (1934; Sintassi logica del linguaggio), perché si risolve nella pura analisi dei simboli adoperati senza alcun riferimento ai dati reali. Dal positivismo logico si può distinguere, malgrado le strette relazioni e affinità, la cosiddetta “filosofia analitica”, con cui la problematica del linguaggio si estende dal linguaggio scientifico a quello ordinario o meglio alla varietà dei linguaggi umani. Ricollegandosi sia all'insegnamento di G. E. Moore sia alle riflessioni dell'ultimo Wittgenstein, i filosofi “analisti” attribuiscono all'analisi del linguaggio un compito di chiarificazione che elimini le oscurità, gli equivoci e le confusioni che stanno alla base dei falsi problemi e faciliti l'uso puramente pratico delle proposizioni. Due pensatori rappresentativi di questo indirizzo sono gli inglesi A. Ayer e G. Ryle. Nello stesso tempo fanno la loro comparsa indirizzi e sviluppi di pensiero che vanno oltre l'analisi puramente formale del linguaggio per occuparsi della sua funzione significativa: Ch. Morris, dell'Università di Chicago, tenta di costruire una teoria generale dei segni o “semeiotica” (Foundations of the Theory of Signs, 1938, Fondamenti di una teoria generale dei segni), in cui si dà rilievo alla dimensione pragmatica del linguaggio e quindi alle sue implicazioni psicologiche, sociologiche e pedagogiche. L'analisi del significato o semantica è anche l'oggetto dell'ulteriore ricerca di Carnap (Introduction to Semantic, 1942). Una ricerca orientata in questa direzione si può considerare, sempre negli Stati Uniti, la semantica generale di A. Korzybsky. L'interesse per la problematica del linguaggio, intensificandosi, non ha mancato di comunicarsi anche ad altre correnti di pensiero (fenomenologia, materialismo storico, strutturalismo filosofico e corrente ermeneutica), dando luogo a feconde integrazioni e ampliamenti di prospettive.

Logica matematica

In concomitanza con il sorgere della logica simbolica si ebbe la nascita e lo sviluppo dei linguaggi non naturali, o artificiali, o formalizzati e ciò soprattutto a partire da G. Frege, quando si avvertì appieno l'esigenza di disporre di uno strumento che fosse adeguato a esprimere determinate strutture logiche e che nel contempo non presentasse quelle ambiguità di varia natura proprie dei linguaggi naturali. Un linguaggio formale deve essere in grado di esprimere ogni enunciato della teoria per la quale viene costruito. Pertanto un linguaggio L deve essere composto da un numero di segni fondamentali, compresi i segni di interpunzione necessari, che costituiscono l'alfabeto di L, e da una o più regole di formazione che consentano di costruire, a partire dai segni fondamentali, quelle sequenze lineari finite di segni che costituiscono i termini e le formule di L. Deve essere comunque sempre possibile stabilire se una successione di segni appartiene o no al linguaggio. Quando si studia un linguaggio (formalizzato o non formalizzato) si dice che questo è un linguaggio oggetto, mentre il linguaggio utilizzato per questo studio viene chiamato metalinguaggio. I linguaggi formali in uso oggi nella logica si possono classificare in base al tipo di nessi tra proposizioni che permettono di esprimere. Si hanno così linguaggi enunciativi, in cui, a parte i simboli ausiliari, si hanno solo lettere che denotano enunciati e simboli per i connettivi; linguaggi del primo ordine, che oltre ai connettivi avranno costanti predicative individuali, funzionali e variabili individuali più i quantificatori; linguaggi del secondo ordine, che oltre all'alfabeto del primo ordine avranno anche variabili predicative e così via. Tutti questi tipi di linguaggi considerano come termini e formule successioni finite di segni. Sono stati introdotti anche linguaggi infinitari, in cui si ammette la possibilità di formule di lunghezza infinita, per esempio linguaggi in cui è ammessa la possibilità di congiunzioni e disgiunzioni infinite e quelli in cui, oltre alle congiunzioni e alle disgiunzioni infinite, si possono quantificare insiemi infiniti di variabili. Naturalmente per i linguaggi infinitari vien meno quel carattere di dominabilità effettiva che si ha con i linguaggi finitari.

Informatica: generalità

Ogni elaboratore dispone di un linguaggio proprio, il linguaggio di macchina, costituito da una serie di istruzioni contraddistinte da codici numerici alla cui presentazione la macchina effettua l'operazione corrispondente. I programmi eseguibili da un calcolatore si presentano quindi come successioni di istruzioni elementari, a cui è associato un insieme di dati su cui esso deve operare. Nei programmi cosiddetti interattivi non tutti i dati sono presenti in memoria all'inizio dell'esecuzione, ma possono essere ottenuti attraverso dialoghi con un utente o con altri programmi, eventualmente residenti su altri elaboratori. In ogni caso, il programma deve contenere istruzioni che consentano di recuperare questi dati e codificarli in un formato corretto. Le istruzioni e i dati sono entrambi codificati in forma binaria e mantenuti nella memoria dell'elaboratore. Ogni elemento, dato o istruzione, è memorizzato in un certo numero di byte, definito dalle caratteristiche dell'elemento, e univocamente interpretabile dall'elaboratore. Esso può essere rappresentato in modo comprensibile a un utente umano attraverso nomi mnemonici, numeri e stringhe di caratteri. Nel momento in cui il programma deve essere eseguito, l'elaboratore immagazzina in una porzione della memoria principale i dati e in un'altra porzione le istruzioni, nello stesso ordine in cui sono state presentate; successivamente, salvo istruzioni esplicitamente contrarie, passa a eseguire le istruzioni in quello stesso ordine. Come esempio di istruzione scritta in linguaggio di macchina, si consideri la seguente rappresentazione, costituita da una sequenza di tre numeri: 10.1251.0090. Il primo numero, nel codice operativo della macchina, indica, per esempio, l'operazione di trasferimento; i due numeri successivi sono gli indirizzi di due celle di memoria. Nel linguaggio di macchina, l'istruzione rappresenta l'operazione di trasferire il numero contenuto nella cella il cui indirizzo è 1251 nella cella il cui indirizzo è .0090. Ancora un'altra istruzione in linguaggio di macchina può essere la seguente: 12.1049.0094; il numero 12 indica, per esempio, l'operazione di moltiplicazione; il contenuto della cella 1049 viene allora moltiplicato per il contenuto della cella .0094 e il risultato viene immagazzinato nella .0094. Le istruzioni del linguaggio di macchina possono essere a uno, a due e a tre indirizzi. Nelle istruzioni a tre indirizzi, oltre all'operazione da effettuare, devono essere indicati gli indirizzi degli operandi e quello in cui immagazzinare il risultato, mentre in quelli a un indirizzo si possono usare codici diversi per indicare in quale registro andrà caricato l'operando specificato nell'indirizzo. Il numero di istruzioni elementari costituenti il linguaggio di macchina può variare dalle decine, negli elaboratori più semplici, alle centinaia, negli elaboratori più complessi; esse possono essere classificate nei seguenti tipi: istruzioni aritmetiche, comprendenti operazioni di somma, moltiplicazione, sottrazione e divisione (quest'ultima non è però prevista negli elaboratori per usi limitati e speciali); istruzioni di trasferimento, per trasferire il contenuto di una cella di memoria a un'altra cella, o a un accumulatore, o a un registro; istruzioni di diramazione, che permettono di non eseguire le istruzioni del programma nell'ordine in cui sono state presentate all'elaboratore. Nel corso dell'esecuzione del programma, in seguito a una di queste istruzioni, l'elaboratore confronta i valori di due dati, per esempio sistemati in due registri, e, secondo il risultato, continua l'esecuzione del programma nell'ordine assegnato oppure salta a un altro punto di esso. Il salto può essere anche incondizionato, cioè l'elaboratore passa all'esecuzione di una istruzione al di fuori dell'ordine di presentazione senza effettuare alcun confronto; istruzioni logiche, per effettuare le operazioni dell'algebra di Boole, cioè somma logica, prodotto logico, complementazione, ecc.; istruzioni di indirizzamento, che permettono di modificare l'indirizzo di operandi quando si esegue più volte una sequenza di operazioni; istruzioni di entrata-uscita, per accedere alle risorse che gestiscono la comunicazione con l'esterno, quali per esempio la registrazione di informazioni in memorie esterne, la stampa di risultati, la registrazione, la produzione di opportune visualizzazioni, la connessione alla rete, ecc.; istruzioni di servizio, variabili per numero e tipo da elaboratore a elaboratore, comprendenti, per esempio, istruzioni che impongono la trasformazione di un codice in un altro o la soppressione di zeri non significativi in dati da stampare. I limiti della scrittura diretta dei programmi in linguaggio macchina, che era la pratica corrente negli anni dell'introduzione dell'informatica, appaiono oggi evidenti: programmi minimamente complessi richiedevano lunghe e tediose sessioni di scrittura e di correzione degli errori, diventavano presto incomprensibili ai loro stessi autori e richiedevano una conoscenza delle caratteristiche delle specifiche macchine, rendendo impossibile il riutilizzo dello stesso programma su macchine diverse. Tali inconvenienti hanno quindi portato alla definizione di linguaggio molto più vicini a quello umano e alla costruzione di programmi traduttori per ogni tipo di elaboratore in modo che uno stesso programma scritto in tale linguaggio possa essere tradotto automaticamente nei vari linguaggi di macchina. Un primo livello di astrazione dal codice macchina è stato raggiunto mediante l'introduzione dei cosiddetti linguaggi di assemblatore, in cui i codici binari delle istruzioni erano rimpiazzati da codici mnemonici, che ricordano il significato dell'istruzione, e le posizioni di istruzioni e di dati in memoria potevano essere rappresentate con etichette, anziché dovere utilizzare il loro indirizzo assoluto. Anche questa soluzione, pur alleviando lo sforzo di programmazione, non risolveva né il problema della comprensione della struttura logica del programma, né quello della portabilità di un programma su diverse macchine, essendo i linguaggi assemblatore ancora tipici di ogni diverso elaboratore. La soluzione a questi problemi è stata la nascita dei linguaggi cosiddetti di terza generazione, che hanno permesso al programmatore di esprimere non più solamente sequenze di singole istruzioni di basso livello, ma costrutti che potevano venire tradotti ognuno in una complessa struttura di istruzioni di basso livello. La cosiddetta quarta generazione di linguaggi ha poi mirato a integrare il linguaggio in quanto tale con sofisticati ambienti per la gestione di data base e per la generazione di programmi.

Informatica: i linguaggi simbolici di alto livello

I linguaggi simbolici si classificano, in primo luogo, secondo che siano studiati in funzione della macchina che si deve utilizzare, cioè abbiano una sintassi che rispetti, punto per punto, le caratteristiche del linguaggio di macchina, oppure abbiano una struttura più evoluta, cioè più vicina a quello umano e siano indipendenti dal linguaggio di macchina di un qualsiasi elaboratore. I primi sono detti linguaggi orientati alla macchina, o di tipo assemblativo, i secondi costituiscono i linguaggi di alto livello, oggi generalmente intesi come linguaggio di programmazione tout court. Essi si distinguono in linguaggio general purpose, cioè di utilizzo generale, che possono essere impiegati per realizzare programmi di qualsiasi tipo, e in linguaggi studiati per applicazioni molto specializzate, detti anche linguaggi speciali o linguaggi orientati ai problemi. Tutti i programmi scritti in linguaggio simbolico di alto livello debbono essere tradotti in quello di macchina per poter essere compresi ed eseguiti dall'elaboratore. A questa traduzione provvede un particolare programma, detto programma assemblatore (o, semplicemente, assemblatore) nel caso di traduzione da linguaggi di tipo assemblativo, e programma compilatore (o, semplicemente, compilatore) nel caso di traduzione da un linguaggio simbolico evoluto. In pratica i programmi assemblatori sono programmi compilatori del tipo più semplice. Il programma scritto in linguaggio di programmazione viene detto programma sorgente, il programma tradotto in linguaggio di macchina viene detto programma oggetto. Quelli di tipo assemblativo sono anche detti linguaggi uno a uno in quanto esiste una corrispondenza biunivoca quasi senza eccezioni tra le istruzioni di tale linguaggio e quelle del linguaggio di macchina; le eccezioni consistono nel fatto che alcune istruzioni del programma origine hanno interesse solo per il programma traduttore e non danno luogo ad alcuna istruzione del programma oggetto, e inoltre altre istruzioni del programma origine danno luogo a più istruzioni del programma oggetto. In generale, nell'ambito dei linguaggi simbolici, si distinguono diversi livelli: considerando il linguaggio di macchina come di livello zero, i linguaggi di tipo assemblativo sono detti di livello uno, i comuni linguaggi algoritmici sono detti di livello due, mentre i linguaggi algoritmici orientati ai problemi sono detti di livello tre. In pratica, per passare da un linguaggio orientato ai problemi a un linguaggio algoritmico è necessario effettuare una traduzione preliminare mediante un programma traduttore detto precompilatore. Lo schema complessivo dei passi necessari per passare dal programma sorgente, scritto in uno qualsiasi dei linguaggi suddetti, al programma oggetto è illustrato nello schema. Il linguaggio simbolico più usato nella scrittura di programmi in ambito scientifico è stato per lungo tempo il FORTRAN. Esso ha come caratteristiche fondamentali quella di consistere in un numero relativamente limitato di frasi molto potenti e quella di poter rappresentare formule matematiche di qualsiasi grado di complessità, con operazioni elementari, funzioni logaritmiche, trigonometriche, esponenziali, ecc. Il FORTRAN ha subito diverse evoluzioni, mentre è diminuita la sua rilevanza a favore di altri linguaggi, in particolare il C. Il FORTRAN 90 ha introdotto la possibilità di esprimere operazioni su array, quali per esempio la somma elemento per elemento senza dover ricorrere a cicli sui singoli elementi, e risulta quindi adatto alla programmazione di macchine parallele. Simili capacità, ma con primitive computazione ancora più potenti, sono possedute dall'APL, nato come sistema notazionale per l'architettura del mainframe IBM 360 e poi associato a un interprete che lo rende eseguibile. Fra i linguaggi di particolare diffusione va anche ricordato è il COBOL, di larghissimo uso nelle applicazioni commerciali e la cui sintassi consente la formulazione dei problemi nel modo più aderente possibile all'inglese parlato. Largo impiego, soprattutto a scopi didattici, ha trovato il Pascal che ha introdotto nella pratica comune i concetti di tipizzazione forte e di programmazione strutturata. Il Pascal infatti richiede di specificare esattamente il tipo di tutte le strutture usate nella dichiarazione dei dati, così che il compilatore può controllare più facilmente gli eventuali errori del programma cui si riferiscono. Esso, inoltre, consente ai programmatori l'uso di strutture dati e di controllo sofisticate, eliminando la possibilità di effettuare salti da un'istruzione di programma a un'altra, pratica ritenuta dannosa, in quanto porta rapidamente il programmatore a perdere di vista il significato complessivo del programma. Vasta diffusione ha avuto il C, un linguaggio di programmazione di uso generale, caratterizzato dalla sinteticità, dal controllo del flusso di informazioni, da strutture dati avanzate e da un vasto insieme di operatori. Definito un “linguaggio di programmazione di sistema” perché adatto alla stesura di compilatori e sistemi operativi, è stato impiegato con profitto anche nella realizzazione di grossi programmi operanti negli ambienti più disparati. Esso si presta a scrivere programmi “portatili”, che possono essere eseguiti senza modifiche su categorie di elaboratori diverse. Nell'ambito dell'intelligenza artificiale, uno dei primi linguaggi sviluppati è stato il LISP, particolarmente adatto all'elaborazione di liste (cioè sequenze di elementi che possono essere simboli alfanumerici o, ricorsivamente, liste di livello inferiore). Questo linguaggio, che sfrutta al massimo il concetto di ricorsività, è caratterizzato dal fatto che sia i programmi sia i risultati delle elaborazioni sono liste di tipo LISP e che di conseguenza è possibile progettare programmi in grado di scrivere altri programmi LISP. Questa possibilità è di notevole importanza nel progetto di sistemi di programmazione automatica nell'ambito dell'intelligenza artificiale, come pure nella gestione di interfacce basate su interazione linguistica. Un'importante evoluzione del LISP è rappresentata dal CLOS, che ha incorporato nel LISP aspetti della programmazione a oggetti. Pure importante è Scheme, che, basandosi su una struttura sintattica molto semplice, permette una completa estendibilità del linguaggio stesso. Tra i primi linguaggi speciali a essere sviluppati vi sono stati quelli di simulazione: il DYNAMO permette di simulare eventi continui (che variano cioè uniformemente nel tempo e devono quindi essere aggiornati continuamente), mentre il SIMULA permette di simulare eventi discreti (che variano cioè in modo non uniforme dopo intervalli d'attesa variabili). Per il controllo di macchine utensili da parte di un calcolatore sono stati appositamente studiati vari linguaggi tra i quali riveste una certa importanza l'APT. Vi sono poi linguaggi in grado di descrivere e simulare il funzionamento di un calcolatore, in modo che sia possibile definirne la struttura e provarne il funzionamento addirittura prima di costruirlo: tra essi ricordiamo il già citato APL, il PMS, l'ISP, l'AHPL e lo SCANG. Per lo sviluppo dei temi propri dell'intelligenza artificiale sono stati infine progettati linguaggi di programmazione non deterministici fra cui ricordiamo il PLANNER per la definizione di strategie di soluzione di problemi in mondi virtuali e il PROLOG, che permette di esprimere le regole logiche attraverso cui si può arrivare alla soluzione di un problema, particolarmente utilizzato per la costruzione di sistemi esperti, come pure l'OPS5. Mentre il PROLOG è basato sulla logica del primo ordine, e quindi il processo di calcolo procede secondo le regole della deduzione logica, in OPS5 il programmatore programma scrivendo regole del tipo SE … ALLORA …, ma può anche, nelle premesse delle regole, descrivere le condizioni per il loro utilizzo, riducendo quindi il non determinismo, per esempio stabilendo le priorità nell'utilizzo delle regole, per risolvere eventuali conflitti nel momento in cui più regole siano ugualmente applicabili. L'importanza del non determinismo è in generale legata alla possibilità di definire le caratteristiche di una soluzione senza prescrivere il modo in cui l'elaboratore eseguirà i passaggi algoritmici. Questo ha il vantaggio di non precludere la ricerca di soluzioni non previste dal programmatore, ma in alcuni casi porta a inefficienze nel processo di calcolo. La proliferazione dei linguaggi successivamente agli anni Settanta è stata esponenziale, da proposte di nuovi linguaggi di uso generale, a linguaggi per ambiti particolari, a linguaggi dimostrativi di nuovi paradigmi di computazione. In particolare, fra quelli di uso generale, vanno ricordati i linguaggi a oggetti, small talk, Java e C++, e quelli funzionali, ML e Haskell, mentre per quanto riguarda i linguaggi di uso speciale, vanno considerati quelli sviluppati dalla Microsoft per la programmazione di integrazioni alle applicazioni e per l'interoperabilità fra diverse applicazioni, quali il VisualBasic, per lo sviluppo di macro all'interno dei programmi Office e C# per la programmazione di applicazioni che utilizzino l'ambiente di comunicazione .NET. Sono poi ormai diffusi linguaggi ristretti che permettono di stabilire protocolli di comunicazione fra applicazioni diverse, quali il KQML, linguaggio di comunicazione fra agenti, o l'IDL, linguaggio per la descrizione di interfacce di programmi che devono comunicare attraverso il protocollo CORBA. La diffusione del web ha portato alla nascita di decine di linguaggi di markup, in genere basati su XML, per la descrizione di dati o comandi in particolari domini. In generale, la progettazione di un nuovo linguaggio richiede la definizione del suo lessico e delle regole sintattiche secondo cui gli elementi lessicali possono essere combinati, associate a eventuali vincoli sulle loro relazioni reciproche. Stabilito questo livello, detto della sintassi concreta, occorre definire la struttura astratta di cui quella concreta è una rappresentazione adatta a essere compresa dagli utenti umani. La struttura astratta può quindi essere interpretata per produrre azioni di calcolo, generazione di rappresentazioni, creazione di documenti in formati diversi da quello generale, ecc.

Bibliografia

Per la psicologia

L. S. Vygotsky, Pensiero e linguaggio, Firenze, 1966; L. Pizzamiglio, I disturbi del linguaggio, Milano, 1968; D. Parisi, Il linguaggio come processo cognitivo, Torino, 1972; P. Fletcher, M. Garman (a cura di), Acquisizione del linguaggio, Milano, 1991.

Per la linguistica

A. Martinet, La considerazione funzionale del linguaggio, Bologna, 1965; L. Hjelmslev, Il linguaggio, Torino, 1970; E. Sapir, Il linguaggio, Torino, 1971; L. Bloomfield, Il linguaggio, Milano, 1974; B. Malmberg, L'analisi del linguaggio nel XX secolo, Bologna, 1985; N. A. Chomsky, La conoscenza del linguaggio, Milano, 1989.

Per la filosofia

G. Preti, Linguaggio comune e linguaggi scientifici, Roma-Milano, 1953; M. White, The Age of Analysis, Boston, 1955; A. Pasquinelli, Introduzione alla logica simbolica, Torino, 1957; G. J. Warnock, English Philosophy since 1900, Londra, 1958; F. Barone, Motivi linguistici nella filosofia contemporanea, Torino, 1960; D. Campanile, Problemi epistemologici da Hume all'ultimo Wittgenstein, Bari, 1961; P. Piovesan, Analisi filosofica e fenomenologica linguistica, Padova, 1961; F. Waismann, The Principles of Linguistic Philosophy, Londra, 1965; D. Antiseri, Dal neopositivismo alla filosofia analitica, Roma, 1966; A. Pasquinelli, Linguaggio, scienza e filosofia, Bologna, 1967; O. K. Apel, Il logos distintivo della lingua umana, Napoli, 1989.

Per l'informatica

J. A. N. Lee, The Anatomy of a Compiler, New York, 1967; D. W. Barron, Assemblers and Loaders, Londra, 1969; J. E. Sammet, Programming Languages: History and Fundamentals, Englewood Cliffs, 1969; J. E. Skelton, An Introduction to the Basic Language, New York, 1971; K. London, Introduzione agli elaboratori elettronici, Milano, 1973; M. Heller, Programming Languages, Englewood Cliffs, 1986.

Quiz

Mettiti alla prova!

Testa la tua conoscenza e quella dei tuoi amici.

Fai il quiz ora