Esiste una teoria matematica o un modello dietro la progettazione dei linguaggi di programmazione

7

Sto cercando di capire se una progettazione di linguaggi di programmazione è basata su un modello teorico.
Mi sono imbattuto in alcuni link che descrivevano Teoria della lingua di programmazione , Lambda Calculus , Lingue formali e Turing machine .

Mi sono perso in tutta quella teoria, quello che ho capito da tutto ciò è che (qualsiasi ..?) linguaggio di programmazione è basato sul calcolo lambda, che si riduce a pochi costrutti linguistici.

  1. la mia comprensione è corretta?
  2. ci sono modelli diversi dal lambda calcolo?
  3. se le lingue condividono lo stesso modello, possiamo usarlo per convertire un codice sorgente da una lingua all'altra?
posta Mhd.Tahawi 22.11.2013 - 11:31
fonte

4 risposte

8

Hai parzialmente ragione.

Il calcolo Lambda è la base per capire come funziona la programmazione funzionale.

La macchina di Turing è la base per capire come funziona la programmazione imperativa.

Le lingue formali sono modi di scrivere i programmi.

Lambda calcolo e macchina di Turing sono totalmente diversi, ma entrambi in qualche modo fanno lo stesso della frase "se aggiungi due e tre, ottieni cinque" per la matematica.

Le lingue formali sono modi per dire "2 + 2 significa 'aggiungi due e due'".

PS. @ SK-logic: sì, hai ragione. Questo sopra è semplificazione, molto vicino ad essere falso. Tuttavia, la risposta è stata scritta per un principiante in argomento, l'idea era di dargli un'idea PIÙ LEGGERA, quindi può scegliere ciò che è più interessante per lui e dove vuole iniziare ad imparare.

    
risposta data 22.11.2013 - 11:40
fonte
1

I got lost in all that theory, what I understood from all that is that (any ..?) programming language is built on lambda calculus,

Non nel senso che un progettista di PL deve sapere e iniziare con il calcolo lambda, ma vedi sotto.

are there any models other than lambda calculus?

Sì, certo. Ad esempio, il calcolo del combinatore SKI. Oppure registra le macchine (in pratica, il modello di van Neumann).

Il punto è che qualsiasi sistema completo di turing potrebbe servire come base per i linguaggi di programmazione. O, per dirla in modo diverso, potresti spiegare qualsiasi linguaggio in termini di qualsiasi sistema computazionale completo.

if the languages shares the same model, can we use that to convert a source code from one language to the other?

Lo rende sicuramente più facile. Tuttavia, da quello che ho detto sopra, è piuttosto il caso che possiamo convertire qualsiasi lingua in qualsiasi altra lingua. (Non è pratico nella maggior parte dei casi farlo).

    
risposta data 22.11.2013 - 19:11
fonte
1

is my understanding correct?

Non proprio. La programmazione funzionale è più un insieme di caratteristiche originariamente ispirate al lambda calcolo che una base per un intero progetto linguistico. Alcuni linguaggi puramente funzionali potrebbero avvicinarsi, ma sospetto che debbano ancora avere delle regole che non si riferiscono direttamente al calcolo lambda. E naturalmente non tutte le lingue hanno le funzionalità richieste per la programmazione funzionale.

are there any models other than lambda calculus?

Se con ciò intendi serie di sceneggiature ispirate ad altri rami della matematica, allora assolutamente, senza dubbio. Le funzionalità di base implementate nella maggior parte delle lingue sono legate direttamente a tutti i tipi di rami specifici della matematica. Ma non tutte le funzionalità lo sono necessariamente. La programmazione orientata agli oggetti, ad esempio, è un concetto pensato per aiutare i programmatori a strutturare e modellare il codice in modo più intuitivo, evitando al contempo alcune delle insidie che le persone tendono a incorrere nella programmazione procedurale. Se ha un ramo diretto dell'analogo della matematica, non l'ho mai visto da nessuna parte.

if the languages shares the same model, can we use that to convert a source code from one language to the other?

Bene, cosa significa "stesso modello". Seguono tutte le stesse regole, variando leggermente solo nella sintassi? Sarebbe abbastanza facile. Ma una singola regola fondamentale potrebbe rendere la traduzione l'una dell'altra molto disordinata. Tipi rigorosi vs dinamici per esempio. Come scriveresti i metodi di un oggetto JavaScript per seguire tutte le stesse regole di un oggetto Java? Altre caratteristiche come il funzionamento dello scope, o l'assenza / presenza di chiusure richiederebbe un sacco di spese generali da emulare in modo universale tra i paradigmi linguistici.

Penso che la cosa più vicina a un collegamento comune che potresti trovare tra tutte le lingue sia che alla fine tutti devono ridursi a istruzioni che possono in qualche modo essere scomposte ed eseguite in termini di codice macchina su un dato sistema (e il codice macchina varia dipende anche dall'architettura). La complessità insita nel creare un traduttore di programmazione universale sarebbe al tempo stesso faticosamente difficile, se possibile, ma anche massicciamente non riuscire a produrre codice tradotto leggibile tra le lingue senza massaggiare e librerie speciali che farebbero fallire il test 'universale'. Non sarei scioccato se qualcuno avesse dimostrato che questa impresa è tecnicamente impossibile.

    
risposta data 22.11.2013 - 23:42
fonte
0

I'm trying to understand if a programming languages design is built on some a theoretical model.

Non è emersa alcuna teoria unificante, ma diversi aspetti dei linguaggi di programmazione vengono studiati separatamente e possono introdurre le proprie teorie. Per citarne alcuni:

  • Digita i sistemi
  • Meccanismi e modelli di gestione delle eccezioni
  • I co-routine
  • Materiale da concorrenza (modelli e meccanismi)
  • Macro
  • Rilegatura / composizione / estensioni (es: aspetti, orientato al soggetto, al contesto, prototipi, tratti, metodi multipli, invio di predicati, ecc.)

I came across few links that was describing Programming Language Theory, Lambda Calculus, Formal Languages and Turing machine.

Questi sono più usati e appropriati per investigare i limiti del calcolo, ecc. Sebbene il lambda calcolo (e altri calcoli) sia usato come meccanismo di programmazione da modello a modello da utilizzare nella pratica.

I got lost in all that theory, what I understood from all that is that (any ..?) programming language is built on lambda calculus, that boils down to few language constructs.

Dipende dal modo in cui interpreti "costruito sul calcolo lambda". Molti linguaggi non sono progettati da lambda calculus (o da qualsiasi altro sistema formale), cioè, un designer non inizia con il calcolo lambda e finisce con, per esempio, Go. Questi due condividono solo una corrispondenza teorica, e quando si vuole indagare sulla complessità computazionale, si va a questi sistemi che sono più adatti per tale studio.

    
risposta data 23.11.2013 - 00:35
fonte

Leggi altre domande sui tag