Ci sono paradigmi di programmazione non basata soprattutto la manipolazione di variabili e funzioni? [chiuso]

StackOverflow https://stackoverflow.com/questions/3656906

  •  01-10-2019
  •  | 
  •  

Domanda

Praticamente tutte le lingue che conosco è fondamentalmente una variazione sul tema: si crea variabili e funzioni, poi manipolarli usando i condizionali e altri costrutti. Capisco programmazione funzionale e simili sono un po 'diversa dalle lingue 'tradizionali', ma sotto sotto sono quasi la stessa cosa. Si sta ancora lavorando con le variabili (un po ', anche se sono immutabili e simili), e la creazione di funzioni.
Esiste un linguaggio o un sistema che elimina completamente con ciò che tendiamo ad usare ora e ha un approccio completamente diverso?

È stato utile?

Soluzione

Non è un linguaggio di per sé, ma analogici computer sono in qualche modo molto diverso da quello più calcolatori digitali.

Altri suggerimenti

Nonostante la tua prepotente licenziamento di programmazione funzionale , penso che hai bisogno di vedere le cose di nuovo solo che questa volta la lettura per la comprensione e l'apprendimento invece di utilizzare bias di conferma di respingere come "più dello stesso". La scrittura di codice in uno stile funzionale è profondamente diverso da quello di scrivere codice in un imperativo stile . Se non è abbastanza diverso per voi, però, perché non dare un'occhiata a uno di questi:?

  • logica di programmazione come caratterizzata da linguaggi come Prolog e (IIRC) Mercury .
  • concatenativa lingue come Forth sono abbastanza trippy.
  • programmazione a livello di funzione (al contrario di funzionale!) Sbarazzarsi di variabili, se questo è ciò che ti offende su calcolo. J è praticamente l'unica scelta possibile in questo regno in questi giorni.
  • programmazione Array è piuttosto strettamente legato a quanto sopra. Date un'occhiata a APL per il classico esempio di questo (anche se J e K entrambi hanno elementi di questo costruito in).

In sostanza, basta guardare una qualsiasi delle decine di paradigmi di programmazione disponibili e leggere le descrizioni per comprensione e illuminazione invece di rigetto attraverso bias di conferma. Imparare una lingua per ogni che appare sufficientemente diverso per la vaga definizione di "diverso" che si sta utilizzando e divertirsi.

Ci sono stati diversi tentativi di linguaggi grafici. Il sistema LabVIEW da National Instruments è probabilmente il maggior successo. Esso utilizza un grafico del flusso di dati con componenti che agiscono sui dati.

Un altro tentativo di un linguaggio grafico è UML . Direi che la giuria è fuori su questo. E 'stata probabilmente una buona idea davanti ad una commissione standard ha coinvolto e lo ha trasformato in qualcosa per tutti.

Una quantità enorme di sistemi elettromeccanici sono controllati da PLC s, che sono programmato con logica ladder . Si tratta essenzialmente di una disciplina per la creazione altamente affidabili macchine a stati finiti, ma non ha molto poco a che procedurale lingue.

Poi ci sono l'esoterico, oscurare, e le lingue alternative che servono in gran parte senza scopo pratico diverso da quello di ricordare alla gente che Turing-completo non richiede che il linguaggio sia sensibile. Alcuni potrebbero mettere una macchina di Turing stesso in questa categoria, ma Brainf * ck , e Piet distingua veramente per me in questa folla.

Il linguaggio esoterico ogni volta è anche un esercizio interessante in quanto non ha alcun controllo di flusso a tutti.

Modifica Ho quasi dimenticato di Befunge . Il suo testo di partenza è una griglia di caratteri ASCII, in cui ogni cella è un codice operativo. Esecuzione corre in una qualsiasi delle quattro direzioni, e così è possibile scorrere attraverso un unico opcode in quattro sequenze differenti. E 'un altro linguaggio esoterico, ed è stato progettato per essere il più difficile possibile (nel 1993) di scrivere un compilatore per. Non che questo sia effettivamente bloccato qualcuno di farlo.

Molte delle lingue ho sottolineato sono stati lingue esoteriche. Questi sono generalmente lingue con piccoli (spesso solo uno o due) comunità di utenti. Essi sono creati per una serie di motivi, ed esplorare i confini di ciò che significa essere Turing completo e come si potrebbe rappresentare un programma sono le ragioni più gravi citati.

Il nonno di tutti i linguaggi esoterici è INTERCAL che è stato creato nel 1972. Si tratta di un linguaggio che superficialmente assomiglia COBOL, ma che tra le sue tante stranezze richiede che il programma sia sufficientemente educati (ma non troppo gentile) al fine di continuare l'esecuzione. A sostegno di buona educazione, PLEASE DO è una forma gentile di DO. Un notevole estensione è la dichiarazione COME FROM, che può causare il controllo di fluire a qui dalla posizione di nome.

Bene, c'è Piet . Questo è abbastanza diversa. (Di seguito è riportato Ciao World in Piet.) Anche se anche in questo caso, si potrebbe sostenere che hai a che fare con una struttura di dati (in questo caso una pila) che contiene un numero di interi e poi si sta aggiungendo e rimuovendo le cose dalla pila, manipolando i valori, ecc in modo in realtà è ancora un po 'la stessa.

alt text

Dipende da ciò che si sta chiedendo circa, ma la risposta è probabilmente no.

La ragione è che tutti gli attuali linguaggi di programmazione che sono Turing completi sono, beh, turing completo. Ciò significa che una di queste lingue possono essere simulati da uno qualsiasi degli altri in questo gruppo. Quindi qualsiasi linguaggio di programmazione può avere un compilatore o interprete che può essere eseguito sui nostri computer correnti (approssimazione). Questi architettonicamente hanno il concetto di codice e dati.

Quindi, se si pensa che la programmazione funzionale e imperativa ( 'tradizionale') di programmazione sono gli stessi perché sotto corrono su un computer, allora non ci sono altre opzioni.

Codice e dati si traducono in funzioni e strutture di dati (variabili). Essi consentono variazioni:

  1. L'immutabilità è il fattore principale per la programmazione funzionale.
  2. La differenza tra codice e dati può essere offuscata. Ad esempio homoiconicity significa che una funzione può essere usata come struttura dati. Vedi le lingue Lisp.
  3. A questo proposito è auto-modificare il codice .

D'altra parte, come express il programma può essere scritto anche un po 'diverso. Usando la funzione di composizione come base può portare nella direzione della programmazione concatenativa, anche se a flusso di dati di programmazione (tra cui molti linguaggi grafici) e la programmazione funzionale, anche in modo simile supportano.

L'ultimo gruppo di modi per esprimere una lingua sono quelli modellata come un'ottimizzazione o di processo di ricerca su una struttura di dati:

  1. Prolog .
  2. calcolo evolutivo uscite il programma in un linguaggio di programmazione standard. Ma presumibilmente un linguaggio descrittivo può essere scritto che può essere "giustiziato" per trovare il programma risultante ed eseguirlo. Questo può essere utilizzato anche per molti metodi di apprendimento automatico.

Questo è tutto un po 'accademica. Il mio consiglio è che cercare di individuare cosa si intende per diverso . Probabilmente, la programmazione funzionale è abbastanza diverso per i vostri scopi.

Modifica : ho appena notato il tuo uso dell'espressione "manipolare usando i condizionali e altri costrutti". Controllo costrutti di flusso non devono essere diversi costrutti di codice e dati. Ad esempio, un if condizionale può essere espresso come filter o un loop può essere espresso come map. Dato funzioni di ordine superiore e la valutazione pigra si può fare senza un if esplicita o for, utilizzando solo le funzioni e le strutture dati. Ciò non significa che effettivamente perso la capacità di farlo. Si potrebbe essere interessati a Haskell se volete vedere qualcosa di simile.

Inoltre, vedere le altre risposte per le lingue che aspetto diverso, come ad esempio linguaggi grafici e linguaggi esortic, pur utilizzando le funzioni applicate a strutture di dati con l'approccio di controllo le strutture.

Buona domanda. Facciamo un passo indietro. Nel mio primo risponderti, cercherò di explein, che quello che stai cercando non è una lingua nuova, ma una nuova architettura, e sono sicuro che, sai almeno quelli più importanti.

20 anni fa, i programmi per computer sono stati costruiti usando la logica "seriale", come un programma di base:

10 INPUT "PASSWORD: ";A$
20 IF A$="PASSWORD" THEN GOTO 40
30 PRINT "TRY AGAIN" : GOTO 10
40 PRINT "WELCOME"
programmi

??MS-DOS sono gli stessi: corrono per un Wile, quindi in attesa di input da parte dell'utente, quindi eseguire di nuovo. Sui sistemi Unix, anche si tratta di un sistema multitasking, il gioco è molto simile, più di un utente può eseguire programmi in questo modo.

Ci sono stati due onde berakthrough:

  • sistemi di event-driven: il flusso del programma è cambiata radicalmente (gestori di eventi, richiamata, di ascolto);
  • sistemi web, in particolare AJAX:. Il programma è in esecuzione su macchine diverse (l'elaborazione distribuita, architettura client-server, servizi)

Nel frattempo, la compilazione e la costruzione del programma è cambiato, ma credo che un po 'meno:

  • metaprogrammazione (generatore di codice IDE-based, preprocessore),
  • pluging thecnique,
  • librerie dinamiche.

sacco Inoltre, ambienti di destinazione programmazione cambiati:

  • macchine virtuali (Java),
  • piattaforme interprete (PHP),
  • servizi di sistema,
  • quadri,
  • sistemi di portale (Drupal).

Alcuni grandi, programmi di grasso è diventato la piattaforma:

  • di Lotus Notes (propria lingua, e ora: Java),
  • MS Excel (Visual Basic).

I non ha menzionato alcun nuovo laguage, ma può essere di programmazione in modo diverso anche nella stessa lingua, per esempio, la scrittura di un gioco J2ME per il telefono cellulare e la scrittura di stored procedure per Oracle SQL, sia in JAVA.

Forse quello che stai cercando non è linguaggi di programmazione. Dire, il compito è quello di visualizzare un elenco di dati, alcuni un po tavolo in un browser. L'applicazione web dovrebbe essere:

  • Un PHP esegue la query SQL di script, e un sistema di template inserti i dati ottenuti in un modello HTML preparato.
  • Un PHP mette di script i dati ottenuti da SQL ad un XML, e le converte in HTML del browser è finale utilizzando XSLT trasformazione.
  • Un JavaScript app richiede i dati frm script PHP, che invia il risultato SQL nel formato JSON, quindi l'applicazione JS rende il codice HTML finale.

HTML + XSLT è un linguaggio di programmazione? Non. Fanno lo stesso compito che il PHP fa sul lato server, o JS fa sul lato client? Absolutelly. Si tratta di una piattaforma comune? Sì, tutti i supporti del browser esso.

Credo che, ci sono di gran lunga i linguaggi di programmazione abbastanza di basso livello, voglio dire procedurale, programmazione orientata agli oggetti o altri linguaggi di Turing-completo. L'obiettivo di nuove (meno-che-programmazione) lingue è quello di essere più efficace :. Generazione di codice più veloce, le applicazioni più flessibili, supporto lavoro di comunità, la scalabilità, maintanence più facile, riusabilità etc

(ho diviso la mia risposta qui; nella parte successiva, vi mostrerò uno, che sto giocando con un po '.)

Leggere attentamente http://en.wikipedia.org/wiki/Programming_paradigm e tutti le pagine collegate nel box link a destra. A seconda di come la si guarda, alcune sono piuttosto diverso o sono tutti fondamentalmente la stessa.

Forth , si tratta di un sistema piuttosto diverso, dove più o meno tutto è di manipolare una pila. E 'quasi come un piccolo molto primitivo VM.

Come ho detto, ci sono molte piattaforme o ambienti di oggi, che può essere programmato. In caso di qualche piattaforma, è possibile scegliere da una lunga lista di lingue, per esempio Microsoft .NET, che può essere programmato in VisualBasic, C # ecc .; altri casi, piattaforme molto differenti usano la stessa lingua, ad esempio JAVA, che viene utilizzato in Android, Oracle SQL Server stored procedure e così via.

Inoltre, ci sono lingue non di programmazione, che copre un dominio o si articolano un qualche tipo di configurazione, che è molto semplice come un vero e proprio linguaggio di programmazione, ma possono essere utilizzati meglio di un linguaggio di programmazione. Un esempio:. Programmazione logica ladder PLC

La programmazione Dataflow è uno di questo tipo di programmazione. Vediamo Wikipedia, qual è Dataflow programmazione (detta anche di programmazione Flow-Based):

  

In informatica, basata su flusso   programmazione (FBP) è una programmazione   paradigma che definisce applicazioni   reti di processi di "black box",   che lo scambio di dati attraverso predefinito   collegamenti con passaggio di messaggi, in cui   le connessioni sono specificati   esternamente ai processi. Questi   processi scatola nera possono essere ricollegati   all'infinito per formare differente   applicazioni senza dover essere   cambiato internamente. FBP è quindi   naturalmente orientato ai componenti.

da: http://en.wikipedia.org/wiki/Flow-based_programming, vedi anche http://en.wikipedia.org/wiki/Dataflow_programming

articoli

??La Wikipedia sono grandi, e ho risposto ad alcune altre domande, in modo da non voglio ripetermi. Invece, sto descrivendo la lingua che sto usando per la mia Asynchronous Dataflow Server.

Ci sono 3 elementi del linguaggio.

  • dichiarazione dei componenti

    cmp: Confronto

Si riferisce di un'istanza del componente, denominato "CMP", che è un tipo di Confronto.

  • definizione del messaggio

    >> src.out cmp.value   cmp.gt >> dst1.in   cmp.lt >> dst2.in   cmp.eq >> dst3.in

Le parole prima i punti sono i nomi delle istanze dei componenti, le parole dopo il punto sono nomi di porta, la coppia componente porta a sinistra è la fonte, il diritto è la destinazione. (Le porte sono i punti pin di componenti per l'invio o la ricezione di messaggi. Articoli See Wkikpedia.)

  • Proprietà

    cmp.base = 8

Questo definisce il valore di una porta del componente.

(Mettendo insieme queste linee, si ottiene un breve programma flusso di dati, il che significa: un valus viene da src, controlli CMP il suo valore, e lo passa al DST1, se si tratta di più di 8, dst2, se è inferiore a 8, e dst3 se è esattamente 8.)

Credo che, questa lingua corrisponde ai tuoi criteri, non è procedurale, non esistono nemmeno le variabili tradizionali, senza subroutine, nessun ciclo.

E 'divertente che ci sono alcuni progetti seri, che implementa flusso di dati di programmazione, ma non hanno nemmeno ne parla:

(non ho nessuna pagina web per il mio progetto flusso di dati ancora, è in fase di costruzione).

programmi Dataflow possono essere visualizzati, oppure possono essere modificati come grafico (vedi SynthEdit).

Non si tratta di linguaggio, è ciò che si fa con esso che fa la maggior parte della differenza. Molte lingue spingerà voi in una certa direzione, puro linguaggi funzionali come Haskell renderà praticamente impossibile da programmare imperativamente, ad esempio, ma fino a quando non si prendono il tempo per imparare i paradigmi maggior parte delle lingue avranno lo stesso aspetto come la macchina lingua che in realtà è in esecuzione, la valutazione condizionali e assegnando valori di spazi di memoria.

I paradigmi ti danno le astrazioni che stai cercando. Buona object oriented o codice funzionale sarà nulla come ciò che si descrive. E non c'è bisogno di fare questo lingue. Ho visto grande codice orientato agli oggetti scritto in C puro e codice funzionale in C ++. Anche se utilizzando il linguaggio giusto per il lavoro giusto aiuta molto. Purtroppo le cose funzionano al contrario troppo. Se non prende il tempo per capire i paradigmi si continua a scrivere il codice imperativo nello Schema o Smalltalk.

Studio sul Turing Machine . L'articolo di Wikipedia sono elencati alcuni simulatori è possibile eseguire programmi su. Sarà almeno esteticamente diverso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top