6

Sembra che ci sia un forte movimento per la convergenza dei linguaggi matematici e di programmazione, questo è notevolmente evidenziato dall'influenza del calcolo lambda sulle lingue moderne. La maggior parte delle volte non penso con la matematica, penso con la logica. Mi sembra che molti dei fenomeni che possono essere modellati matematicamente possano essere modellati logicamente.Convergenza di linguaggi matematici e di programmazione

Non credo che vedremo mai un linguaggio puramente logico o un linguaggio puramente matematico guadagnare trazione per la programmazione generica, ma mi piacerebbe fare un inventario dei vantaggi di ogni paradigma. Mi piacerebbe sapere:

  • Quali sono i vantaggi della modellazione dei linguaggi di programmazione o delle funzionalità linguistiche in matematica?
  • Quali sono i vantaggi della modellazione di un linguaggio sui principi della logica formale?
  • Un linguaggio generico può rinunciare alla logica o alla matematica?
  • Quali sono alcune delle lingue che mostrano realmente i vantaggi di entrambi gli approcci?
  • Quali caratteristiche hardware rendono un approccio più attraente rispetto all'altro?
+14

La logica è matematica. In realtà, è un componente chiave per la matematica discreta. E se sei un informatico o un ingegnere del software, dovresti lavorare almeno in qualche modo con la matematica discreta. –

+0

Capisco la relazione al livello più elementare, sono molto più curioso dell'espressione a livello di utente. – jessecurry

+3

Non riesco a vedere la chiara distinzione tra logica e matematica che si vede chiaramente. Ovviamente, le cose banali che implicano calcoli numerici sono più matematiche che logiche, ma per argomenti più avanzati, in cui gli oggetti di studio sono astrazioni complesse, inserirle nei cesti "logici" o "matematici" sembra una scelta arbitraria. – harms

risposta

8

Prima di tutto, non vedo molta distinzione tra logica e matematica; quest'ultimo è solo il primo applicato sistematicamente a costrutti specifici.

Inoltre, non sono convinto che la bellezza teorica dei linguaggi di programmazione basati su matematica/logica valga davvero molto quando si tratta di ottenere risultati scrivendo codice efficiente e gestibile.

Quanto a domande specifiche.

Quali sono i vantaggi della modellazione linguaggi di programmazione o la lingua caratteristiche di matematica? Quali sono i vantaggi della modellazione di un linguaggio sui principi della logica formale?

Le prove di correttezza diventano molto più facili, anche se è discutibile se arriveremo mai al punto in cui diventeranno pratici per i sistemi di vita reale.

Una lingua per uso generico può rinunciare alla logica o matematica?

Dipende da cosa intendi con "rinunciare".Puoi avere una lingua senza operazioni matematiche (anche se devi essere abbastanza esoterica, le macchine di Turing sono l'unica a cui posso pensare che non abbia nemmeno un incremento o decremento), e puoi certamente averne una che non si preoccupi dei formalismi (Assemblatore, C). Ma io non credo che sia possibile avere un linguaggio di programmazione senza logica (anche se può essere una logica perversa, cfr Malbolge)

Quali sono alcune delle lingue che mostrano davvero fuori i vantaggi di entrambe le soluzioni?

Beh, se si considera lambda calcolo di una forma di logica, quindi Lisp è stato in mostra i suoi benefici abbastanza bene per essere dal 1958 la lingua la cui potenza espressiva altra lingua Aspire (ma non gestire) per raggiungere.

Poi c'è Prolog, l'unica altra lingua "seria" che conosco che cerca di essere esplicitamente basata sulla logica formale. E - quelle sorpresa - è bravo a cose logiche e poco altro.

Quali caratteristiche hardware rendono un approccio più attraente rispetto all'altro?

Nessuno. L'errore di Lisp Machines dimostra IMO in modo abbastanza conclusivo che i compilatori + l'hardware generale sono più potenti dell'hardware specializzato. Tuttavia, si potrebbe dire che il potere bestiale del sistema odierno sta rendendo le lingue che ignorano completamente i vincoli dell'hardware pratici dove in precedenza non lo erano.

+1

Direi che Haskell è altrettanto serio nell'essere esplicitamente radicato nella logica, così come lo è (Standard) ML. Altrimenti, ottimo commento. – harms

2

poiché l'informatica è una branca speciale della matematica - non c'è convergenza di matematica e linguaggio di programmazione. Un linguaggio di programmazione viene applicato matematica. È uno strumento creato da persone con profonda conoscenza della matematica da utilizzare da altri (il più delle volte con una conoscenza meno profonda). Puoi confrontarlo con un interruttore della luce: puoi usarlo senza aver studiato fisica, ma è ancora applicato alla fisica. A volte (soprattutto se hai un problema) è necessario avere la "conoscenza". Allora hai bisogno dello sfondo speciale.

+0

ma anche coloro che accendono le luci (scrivono PHP) non saranno probabilmente assunti per lavorare come scienziati missilistici (scrivono Haskell), e penso che questa divisione aumenterà di come influirà sul settore in futuro, proprio come i medici delle caverne avevano medici ma ora hanno bisogno di gradi e 9+ anni - quindi immagino che la convergenza qui significhi la convergenza della * professione * con la matematica non tanto CS (perché CS già * è * matematica). –

1

Bene, per essere onesti molti di questi cosiddetti "linguaggi di programmazione moderni" stanno semplicemente implementando cose che sono state in vari linguaggi di programmazione per oltre 50 anni.

+0

Infatti. Lisp è stato originariamente specificato nel 1958, basato sul calcolo lambda. L'APL, che è fortemente orientata verso le operazioni con le matrici, è diventato disponibile per IBM 1130 nel 1967. –

+0

Quali parti di Haskell, OCaml e altri sistemi di tipi erano disponibili 50 anni fa o da nessuna parte anche vicino? –

1

Quali sono i vantaggi della modellazione dei linguaggi di programmazione o delle funzionalità linguistiche in matematica? Quali sono i vantaggi della modellazione di un linguaggio sui principi della logica formale?

Questi sono la stessa cosa: la logica formale è solo una branca della matematica. I due principali vantaggi dell'uso della matematica formale sono l'ottimizzazione e la sicurezza. Quando un algoritmo non ha effetti collaterali (vale a dire referenzialmente trasparenti), ed è espresso esclusivamente utilizzando semplici matematici, i compilatori possono ristrutturare l'algoritmo secondo le regole della matematica. Ciò rende più facile per i compilatori ottimizzare il codice e sfruttare le architetture parallele. Un altro vantaggio importante è la capacità di provare alcune proprietà del codice.

Una lingua per uso generico può rinunciare alla logica o matematica?

No. Come eseguire operazioni booleane o aritmetiche senza logica o matematica. Potresti dire qualcosa qui che non capisco.

Quali sono alcune delle lingue che mostrano realmente i vantaggi di entrambi gli approcci?

Haskell, ML, OCaml, Miranda, Alice, Oz, Erlang, Twelf, Coq, Prolog, tutti dimostrano le applicazioni più rigorose della matematica alla programmazione.

Quali caratteristiche hardware rendono un approccio più attraente rispetto all'altro?

Non credo che l'hardware cambi le cose molto in termini di vantaggi di approcci matematici rigorosi alla programmazione.I vantaggi del codice referentially trasparente sono per lo più al livello del compilatore.