"Lingue vincolate" di Fernando J. Corbató


13

Per il suo discorso del premio Turing del 1990 , Fernando J. Corbató ha elencato le ragioni per cui i sistemi complessi falliranno inevitabilmente. Nelle sue conclusioni, fornisce alcuni suggerimenti per ridurre la probabilità di fallimento. Elenca un'idea come segue:

L'uso di linguaggi vincolati per la progettazione o la sintesi è una metodologia potente. Non consentendo a un programmatore o designer di esprimere idee irrilevanti, il dominio dei possibili errori diventa molto più limitato.

Cosa intende per "linguaggio limitato?"

Per un momento ho considerato la programmazione dei vincoli . Tuttavia, la programmazione dei vincoli riguarda la limitazione dello spazio della soluzione del programma. È uno strumento che abilita un programmatore. La caratteristica a cui Corbató si riferisce sembra essere qualcosa che limita effettivamente il programmatore, o almeno la rende più incline a scrivere codice terser.

Il mio secondo pensiero è che si sta riferendo a linguaggi di programmazione conservativi . Corbató ha ricevuto il premio Turing per il lavoro svolto negli anni '60 e '70. Comprendo che ha affrontato molte carte perforate. Non ho mai visto una scheda perforata, quindi certamente non so come programmarne una, ma potrei immaginare che la programmazione della scheda perforata sia estremamente liberale. Ho il sospetto che le nozioni di controllo del tipo, analisi statica e così via semplicemente non esistessero. Quindi, Corbató si sta forse riferendo all'idea di lingue che impediscono allo sviluppatore di commettere errori stupidi? Neanche questo sembra essere il caso. Il controllo di sicurezza e la modellizzazione dei dati non hanno nulla a che fare con la terseness, che è ciò di cui sembra parlare quando menziona "non consentire ... idee irrilevanti".


@jweyrich Grazie per avermi inviato a Programmers.SE. Tuttavia, quando vado al tag dei linguaggi di programmazione su StackOverflow, trovo molte domande altrettanto generali della mia, come "Esiste un linguaggio tipicamente staticamente debole?" dove l'autore fa anche riferimento a materiali di lettura generali
Xander Dunn,

5
@thoughtadvances Controlla le date delle domande che dici, sono disposto a scommettere che la maggior parte di esse sono piuttosto vecchie. SO ha 4 anni, le cose cambiano e in generale diventiamo più rigorose col passare del tempo. La tua domanda va bene per i programmatori (sono un mod lì), ma sarebbe stato più semplice se avessi appena segnalato questo per l'attenzione alla moderazione e chiedessi che fosse migrata invece di ripubblicare. La migrazione ti avrebbe risparmiato il problema di ripubblicare e avrebbe portato la risposta ai programmatori insieme alla domanda. Non preoccuparti adesso, ci penserò io.
yannis,

3
Ad esempio, se (nota: if ) l'idea di malloc è "irrilevante" per una particolare applicazione per qualche motivo, quindi la scelta di Java ("vincolato dal non avere malloc) su C (c'è malloc) limiterebbe" il dominio dei possibili errori "che potrebbe essere associato a malloc
moscerino il

@YannisRizos Grazie mille per averlo migrato. Non sapevo che questa funzione esistesse. Forse gli utenti più esperti su StackOverflow avrebbero potuto suggerire questo percorso piuttosto che semplicemente chiuderlo.
Xander Dunn,

3
" Codificare su schede perforate " era solo un altro modo di scrivere un programma. Alla fine degli anni '60 e all'inizio degli anni '70, avevamo lingue altrettanto sofisticate di quelle che abbiamo oggi. Molti dei concetti chiave dei linguaggi di programmazione erano già ben consolidati e ALGOL 60 aveva già fissato lo standard per gli strumenti di programmazione entro il 1963.
Ross Patterson

Risposte:


8

Un "linguaggio di programmazione vincolato" è semplicemente uno che non fornisce modi (facili) per fare cose che non sono pertinenti allo scopo delle lingue.

Nota che è "irrilevante", non "stupido", "stupido" o "errato".

Un buon esempio di ciò potrebbe essere ISO / ANSI SQL (prima di SQL-92), che nel linguaggio delle query non aveva modo di esprimere molti artefatti di programmazione di tipo procedurale come ricorsione o loop. (Tuttavia, li ha ora e i fornitori hanno comunque aggiunto estensioni personalizzate per loro in precedenza).


6
Questo è esattamente il punto di Corbató. È entrato in molti dettagli in un articolo del Datamation del 1969 chiamato PL / I come strumento per la programmazione del sistema (con il fantastico sottotitolo " cinque anni con un compilatore temporaneo "!).
Ross Patterson,

Grazie, questa risposta è molto utile. Questa idea ha implicazioni interessanti. Ciò sembrerebbe indicare che un programmatore vorrebbe avere accesso a una pletora di lingue diverse con abilità diverse piuttosto che avere una lingua per dominarle tutte, che è ciò che molti programmatori vorrebbero supporre che C, C ++ o Java possano essere.
Xander Dunn,

@RossPatterson Excellent! Grazie! Stavo cercando un'elaborazione sull'argomento di Corbató, ma non ho trovato molto.
Xander Dunn,

1
Una grande citazione sommaria da quell'articolo di Datamation: "Il nostro scopo nel fare il sistema ... è stato quello di esplorare la frontiera e vedere come mettere insieme un sistema efficace che raggiunga e soddisfi gli obiettivi stabiliti. Stiamo cercando di trovare le idee chiave di progettazione e comunicarle ad altri, indipendentemente dal sistema con cui hanno familiarità. Pertanto, un linguaggio che supera i dettagli specifici dell'hardware è sicuramente desiderabile, ... In altre parole, costringe a progettare, non giocherellare con il codice. E questo si è rivelato essere uno dei suoi punti di forza . "
Ross Patterson

2
@thoughtadvances " Questo sembra indicare che un programmatore vorrebbe avere accesso a una pletora di lingue diverse con abilità diverse piuttosto che avere una lingua per dominarle tutte " - questa è una delle differenze tra un programmatore junior e un senior. Nessun falegname ha un solo martello :-)
Ross Patterson


0

Innanzitutto, devi capire l'era dell'informatica quando è stato pronunciato il suo discorso (1990). Inoltre, renditi conto che sta parlando a un pubblico accademico e il MIT è la sua base di partenza.

In quell'epoca, le lingue per scrivere le lingue (meta-lingue) erano un argomento caldo. Il protocollo Art of the Meta-Object è appena uscito e sta ispirando la progettazione di nuovi linguaggi. Tuttavia, tutto questo lusso ha un prezzo: complessità.

Per aiutare a ridurre la complessità dei sistemi e per consentire il controllo di questi sistemi, sono stati creati meta-linguaggi come Z per fare una specifica verificabile. Suppongo che si riferisca a questo tipo di lingue.


2
Corbató non è solo un accademico del MIT della fine del XX secolo. È uno dei pionieri del nostro campo. Il suo lavoro su CTSS è stato fondamentale, portando direttamente a Multics, Unix, CP / 67 e ai sistemi Linux e z / VM di oggi. E l'affermazione in questione è collegata a un principio che ha apertamente esposto 20 anni prima di The Art of the Meta-Object Protocol e la sua lezione di Turing.
Ross Patterson,

0

Forse significa che una lingua che ha un numero abbastanza basso di concetti da comprendere. Controlla qui i diagrammi che mostrano le rappresentazioni grafiche dei concetti in Coffescript, Ruby e C ++. Può essere Tuner significa che meno concetti hai in una lingua, minori sono le possibilità di esprimere idee irrilevanti.


"... O una lingua" - è un commento su qualcosa?
moscerino del

Modificato il post, in modo da non sembrare un commento.
Manoj R,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.