La separazione delle lingue umane deriva dall'evoluzione (darwiniana?) In comunità isolate. La separazione dei linguaggi di programmazione deriva dalle variazioni delle necessità tecniche, dell'ideologia tecnica, dai cambiamenti nella comprensione tecnica e teorica, dai cambiamenti nella nostra capacità tecnica di attuazione. È un processo un po 'più consapevole, credo.
I linguaggi informatici potrebbero essere più simili ai linguaggi naturali? Probabilmente un po ', fino a un certo punto. Immagino che gran parte della complessità del linguaggio naturale derivi da una varietà di fenomeni di evoluzione simultanea che non hanno motivo di produrre un risultato coerente in un dato momento, anche se è probabile che le vecchie incongruenze vengano probabilmente eliminate progressivamente mentre ne appare una nuova . Non sono un esperto di linguistica diacronica. Ma vogliamo quel tipo di complessità nei linguaggi di programmazione.
La questione dell'ambiguità è importante, ma non come affermato dalla maggior parte delle persone. Un linguaggio è un mezzo di comunicazione e deve essere analizzato nel contesto di quella comunicazione (uomo-uomo, uomo-macchina, entrambi, tra luoghi o tra tempi, ... per dirlo un po 'semplicisticamente). Ciò che conta non è se puoi fare solo affermazioni non ambigue nella lingua, ma se puoi sempre assicurarti che la comunicazione sia chiara nel contesto previsto. Esiste un linguaggio di programmazione ben noto e ampiamente utilizzato, che consente di scrivere programmi ambigui (beh, lo ha fatto, ma non ho guardato le ultime versioni per un po '). In questo caso, il compilatore è abbastanza intelligente da rilevare l'ambiguità e chiedere chiarimenti, che possono essere incorporati nel programma per eliminare l'ambiguità. Si noti che il rilevamento dell'ambiguità non significa che solo una delle possibili scelte abbia un significato, lo fanno tutti. Il problema è se una delle entità comunicanti può rilevare l'ambiguità in modo che il mittente possa chiarirla. Gli esseri umani sono cattivi in questo, ma i computer possono essere piuttosto bravi.
Formalismi e linguaggi di programmazione potrebbero avere una sintassi più ricca e flessibile. Credo che il motivo principale per cui non lo fanno sia il semplice conservatorismo. Gli strumenti sintattici utilizzati sono ancora molto spesso strumenti progettati trenta anni fa o più, per soddisfare i limiti dei computer di quel tempo. L'efficienza di analisi non è più un problema così critico nella compilazione e esistono tecniche più potenti.
È interessante notare che la base più ampiamente usata per la sintassi dei linguaggi di programmazione deriva dalla ricerca sul linguaggio naturale: la grammatica senza contesto. Gran parte della ricerca tecnica passò all'informatica / tecnica negli anni sessanta, per essere in qualche modo riscoperta nei primi anni ottanta da persone di linguaggio naturale (sto semplificando). Da allora, sono stati fatti molti progressi per la sintassi nei linguaggi naturali, mentre l'informatica sembra in gran parte bloccata con vecchi strumenti sintattici. Il pendolo del linguaggio naturale ora sta di nuovo oscillando verso tecniche statistiche, ma gli approcci algebrici per la sintassi non vengono dimenticati. Molto probabilmente, buoni approcci verranno da una combinazione di tecniche algebriche e statistiche.
La mia sensazione è che l'area critica sia la semantica e la transizione tra sintassi e semantica. Questo è ancora molto difficile da formalizzare per il linguaggio naturale, mentre abbiamo molte tecniche precise nel caso dei linguaggi di programmazione e dei sistemi formali. Poiché il gioco è lungi dall'essere giocato per i linguaggi naturali, è difficile dire quale impatto potrebbe avere sui linguaggi di programmazione in futuro.
Un altro punto è che molti progettisti di linguaggi di programmazione stanno provando a provare qualcosa o applicare un'ideologia tecnica. Così diventano estremamente prescrittivi nella loro progettazione per impedire agli utenti di discostarsi dai paradigmi previsti. Questo è purtroppo estremamente controproducente per la creatività. Il linguaggio più creativo mai progettato fu tra i primi: Lisp (1958). La libertà e la flessibilità che ha permesso è stata la fonte di notevole creatività. Il prezzo era che richiedeva autodisciplina e comprensione. Ma Lisp era davvero un metalinguaggio, una lingua per la creazione di lingue.
Ora, per prendere un'altra prospettiva, i programmi sono in realtà prove della loro specifica vista come una dichiarazione matematica (beh, sto semplificando di nuovo). Alcune persone (non ricordo riferimenti, mi dispiace) hanno giocato con dimostratori di teoremi per produrre prove che sembravano essere state scritte da un matematico in linguaggio naturale. Quindi immagino che l'idea di avere programmi che sembrano scritti in linguaggio naturale potrebbe non essere del tutto assurda.
Si può tuttavia notare che, anche se scritto in modo informale da un matematico, il discorso matematico sembra molto diverso dal discorso ordinario o da un libro di storia. Ciò è dovuto a una differenza significativa nell'universo del discorso interessato, i domini semantici di cui si parla. Quindi, mentre puoi immaginare linguaggi di programmazione che assomigliano più ai linguaggi naturali, c'è una limitazione naturale che è il dominio del discorso e le sue proprietà desiderabili. Molto probabilmente rimarrà essenzialmente superficiale, cioè prevalentemente sintattica. Il matematico può parlare di sistemi formali e di politica. Spero che i due discorsi non sembrino simili. I computer non possono (ancora?) Parlare di politica o capirla. Il giorno in cui lo faranno non sarà più programmazione.
Guardando indietro alla storia, le lingue di alto livello erano, fin dal primo (FORTRAN) un tentativo di avvicinarsi a una forma più naturale per esprimere compiti computazionali, ma questi compiti erano intesi come matematici o logici (Fortran 1957, Algol 1958, Lisp 1958 ) o più orientato al business (Cobol 1959). Entro 10 anni le persone si preoccupavano delle lingue più vicine, meglio adattate al problema attuale, e c'erano ricerche significative nel cosiddetto extensible
languages
, che copriva sia la sintassi che la semantica. Uno dei principali percorsi per esprimere i problemi in modo più naturale è stato l'emergere object
orientation
(a volte con altri nomi). Sebbene sia sempre difficile assegnare la genitorialità, probabilmente è emerso dal lavoro sull'intelligenza artificiale, principalmente in Lisp, e dalla linguaSimula
67
(Famiglia Algol) che era stata concepita per esprimere problemi del mondo reale più naturali che dovevano essere simulati su un computer. Sembra tutto storicamente coerente.