Quali sono i diversi concetti dei linguaggi di programmazione e quali linguaggi li mostrano in modo puro
-
28-09-2019 - |
Domanda
Non sono un esperto di lingue, ma di recente mi sono interessato alle lingue e sto cercando di ottenere una panoramica dei concetti principali e delle "loro" lingue.Questo è simile a un'altra domanda sui libri.Quindi, in primo luogo, quali sono i principali concetti del linguaggio di programmazione, ad es.
- strutturato
- procedurale
- orientato agli oggetti
- orientato agli oggetti - basato su prototipi (ad es.JavaScript)
- funzionale (es.Haskell)
- orientato alla logica (es.Prologo)
- meta (se è un puro concetto a sé stante?)
- basato su stack (ad es.Via)
- basato sulla matematica/orientato agli array (ad es.APL)
- dichiarativo
- concatenativo (es.PostScript)
- (elenco sicuramente incompleto...)
e in secondo luogo, per avere una buona idea di questi concetti, quale sarebbe il linguaggio di programmazione che si basa/implementa il suo concetto centrale nel modo più naturale e puro?
- Ad esempio Java è OO, ma non è un buon esempio perché non è puro OO a causa degli atomi.
- Il Lisp è noto per essere un linguaggio funzionale, ma è multi-paradigma, quindi non è puro.Ma Lisp potrebbe essere una pura implementazione di "list-based" (se conta come concetto).
- Esiste un linguaggio strutturato (no GOTO) ma non procedurale?(Forse XSLT v1.x)
Soluzione 3
Grazie a solo la mia corretta PARERE 's risposta mi è stato fatto nella giusta direzione. Darò l'elenco dei paradigmi insieme con i loro linguaggi puri per quanto ho scoperto fino ad ora:
- imperativo
- non strutturata --- presto BASIC, Assemblea
- strutturata ---?
- procedurale ---?
- modulare --- Modula-2, forse Pascal
- orientato agli oggetti
- class-based --- Smalltalk
- prototipi basati --- Sé, forse Java Script, Lua
- dichiarativa --- SQL, espressioni regolari, CSS
- logica --- Mercury, forse Prolog
- funzionale --- Scheme, Haskell
- tacita / punto-libera
- concatenativa --- Gioia, Cat
- tacita / punto-libera
Su un diverso "asse" dobbiamo
- scalare --- maggior parte di loro
- array --- APL
Non so dove metterlo:
- impilare basato --- Forth, Postscript
Altri suggerimenti
Il termine che stai cercando qui è "paradigma di programmazione" e ci sono un sacco di loro là fuori.Puoi ottenere un elenco di lingue che supportano ciascuna da quella pagina Wikipedia e dai suoi collegamenti successivi.
Per le interpretazioni "pure" di uno qualsiasi di questi, è più difficile perché dipende dal livello di purezza che stai cercando.
- Per strutturato puro (sotto qualsiasi definizione sufficientemente ampia di "puro" qui) puoi guardare, ad esempio, a Modulo-2.
- Stai guardando principalmente per il puro orientamento agli oggetti Chiacchiere ed è simile se vuoi che assolutamente tutto sia trattato in modo uniforme (in realtà non necessario secondo le definizioni più comuni!) o stai guardando lingue come Giava E Eiffel se accetti i tipi primitivi sotto quella voce.
- Per la funzionalità che stai cercando molto probabilmente Haskell.
- Per la programmazione logica il linguaggio archetipico è Prologo, ma non è veramente puro.L'unico linguaggio logico (per lo più) puro che conosco è Mercurio, e questo solo se si considerano i suoi blocchi funzionali come essenzialmente compatibili con i suoi blocchi logici.
...e così via.Hai capito.
Credo che Pascal è la lingua processuale canonico.
Credo anche che Lisp (ironia della sorte, non ML) è la canonica linguaggio "meta".
Per uno, una macro è un frammento di programma che modifica una struttura dati che rappresenta un frammento di programma --- in modo da utilizzare la lingua per modificare la lingua. In secondo luogo, è considerato pratica comune di scrittura interpreti self-hosting, tradizionalmente chiamata valutatori metacircular:. Sono programmi quali programmi e li gestiscono
Naturalmente, qualsiasi altra lingua può farlo. In Python si ha accesso al compilatore python, e PyPy è un'implementazione pitone in python. Ma Lisp ha, a mio avviso, la tradizione più forte di fare questo.
Ma io sono un estraneo Lisp, in modo che ne so io ... 'speranza-questo-aiuta; -)