La programmazione funzionale è rilevante per lo sviluppo web? [chiuso]


88

Ho visto così tanto di recente sulla programmazione funzionale e Clojure sembra particolarmente interessante. Anche se "capisco" la descrizione di base di cosa sia, non riesco a capire come lo userei giorno per giorno come sviluppatore web, se possibile. Molto di quello che ho letto si concentra sul lato matematico della programmazione funzionale piuttosto che sulle tipiche situazioni di programmazione che si trovano nella normale OO.

Ho la parte sbagliata del bastone? La programmazione funzionale è totalmente estranea allo sviluppo web? In caso contrario, ci sono esempi di utilizzo "per il web"?

Risposte:


31

Alcuni esempi fuori dalla mia testa:

  • Yahoo! Il negozio è alimentato da Lisp (originariamente chiamato Viaweb prima dell'acquisizione)
  • Reddit è stato completamente prototipato in Lisp, sebbene siano passati a Python nel 2005
  • Hacker News è scritto interamente in Arc (un dialetto Lisp)

7
Yahoo! Store è stato riscritto in c ++ alcuni anni fa.
apg

5
linguaggio! = paradigma di programmazione.
phkahler

58
Strana scelta di esempi ... Yahoo! Store è stato scritto da Paul Graham, che è un grande sostenitore del Lisp. Ha anche scritto Hacker News, che è, effettivamente, un clone di Reddit. Presumibilmente, HN è stato scritto in qualche modo in risposta al passaggio di Reddit da Lisp a Python mentre i ragazzi di Reddit facevano parte di YCombinator: un programma acceleratore gestito da Paul Graham. Lo considero UN esempio, non tre.
Brandon Bloom

Anche la configurazione del server @ShermPendley, la configurazione della rete e l'accesso al database sono fattori importanti per le prestazioni. I tempi di esecuzione degli script delle app Web sono in genere una piccola frazione del costo complessivo.
AgmLauncher

62

La programmazione funzionale si abbina molto bene alle app web. L'app Web riceve una richiesta HTTP e produce un risultato HTML. Questa potrebbe essere considerata una funzione dalle richieste alle pagine.

Confronta con le app desktop, dove in genere abbiamo un processo a lunga esecuzione, un'interfaccia utente con stato e un flusso di dati in diverse direzioni. Questo è più adatto a OO che si occupa di oggetti con passaggio di stato e messaggio.


20

Non vedo perché no - fintanto che fornisci HTML conforme agli standard ai browser, a loro non importa cosa hai usato per produrlo, che sia un linguaggio funzionale, un linguaggio imperativo o scimmie addestrate.


20

La programmazione funzionale pura potrebbe non mappare molto bene nell'ambiente di programmazione web. Ma il principale ostacolo è proprio la mancanza di infrastrutture (framework e API). Ci vorrà molto tempo (probabilmente mai, onestamente) prima che un linguaggio funzionale abbia un ambiente di programmazione web così ricco come Java, Python o Ruby.

Detto questo, ci sono alcune opzioni.

Non ho alcuna esperienza con nessuno di questi. Forse i commentatori possono valutare ciò che ha funzionato bene per loro.



4

Per Clojure, c'è una startup interessante (TheDeadline) che si è sviluppata utilizzando Clojure e Google App Engine. Hanno un buon ppt su Slideshare e un'intervista su InfoQ.

Per una buona discussione sulla distribuzione di Clojure con GAE: http://news.ycombinator.com/item?id=1239788

Per quanto ne so, Clojure ha alcune librerie di sviluppo web. Compojure Ring Conjure

Spero che questo risponda ad alcune delle tue domande =) (anch'io sto appena iniziando ..)

Il migliore, Ryan


3

Non è totalmente estraneo allo sviluppo web. L'app che si trova sul server può sfruttare molto bene caratteristiche funzionali come chiusure, funzioni di ordine superiore, immutabilità, trasparenza referenziale ... ad esempio, sei sicuro di avere raccolte che devi trasformare o manipolare in qualsiasi modo. La programmazione funzionale aiuta qui, ed è per una ragione che i suoi idiomi stanno penetrando nei linguaggi tradizionali. Le caratteristiche funzionali aiutano in termini di concisione, testabilità, parallelizzazione e possono anche fornire soluzioni native a problemi che altrimenti risolveresti con i modelli.

Aggiornamento: esistono anche framework web per linguaggi funzionali. Weblock per Common Lisp, Lift per Scala. Questi sono quelli di cui ho sentito parlare, potrebbero essercene altri ... tuttavia non devi necessariamente essere puramente funzionale - per esempio Scala non è puro e dovrebbe funzionare con qualsiasi framework Java, saresti comunque in grado utilizzare la programmazione funzionale per il livello aziendale, ecc.


3

Dai un'occhiata a Ur / Web . È molto veloce e il suo sistema di tipi statici conosce cose come HTML e SQL, quindi può garantire ogni sorta di cose carine sulla sicurezza.


3

Erlang sembra essere molto utilizzato in alcune delle infrastrutture per le app web scalabili. i database CouchDB e Riak sono scritti principalmente in Erlang, così come il server di accodamento messaggi RabbitMQ. Una delle chiavi del suo successo è che gestisce la concorrenza tramite il passaggio di messaggi, senza uno stato mutabile condiviso. È questo modo di pensare ai problemi che è utile, più di qualsiasi particolare linguaggio di programmazione funzionale.

Oppure guarda MapReduce. È un modo molto funzionale di guardare al calcolo, anche se la tua mappa e le funzioni di riduzione sono state internamente con stato - e per questo motivo, è molto adatto per interrogare grandi set di dati in modo distribuito e tollerante agli errori.

Con tutti i mezzi, vai con ciò che ti sembra più pratico. Ma tieni sempre la programmazione funzionale nella parte posteriore della tua mente, perché non sai mai quando potrebbe tornare utile.



2

La lingua e il paradigma non contano per le app Web, sono tutte ugualmente buone e cattive. Se stai cercando un motivo per imparare un nuovo paradigma, immergiti. Il mio consiglio sarebbe quello di analizzare il problema che stai cercando di risolvere e selezionare il set di strumenti appropriato.


2

Javascript (il linguaggio della porzione FE del web e sempre più anche BE) non è funzionale di per sé ma le funzioni sono funzionali al primo ordine


2

Abbiamo appena lanciato un foglio di calcolo online in cui il backend è scritto interamente in Erlang.

http://hypernumbers.com

Secondo tutti gli standard, questa è una delle app web più complesse che puoi costruire con una GUI enorme con complessità mentale.


2

Ecco un'esperienza di sviluppatore web nella creazione di app web utilizzando Haskell . Sebbene i linguaggi funzionali siano molto sicuri per i tipi e abbiano una buona concorrenza, sono sempre mancati delle migliori API della razza poiché è stato il tesoro del mondo accademico da molto tempo e tuttavia deve essere fortemente abbracciato nel mondo reale. Spero non sia troppo lontano. Erlang ci era già entrato.


1

Il motivo per cui la programmazione funzionale è popolare con la programmazione web è che esplicita lo stato condiviso e mutevole e consente al programmatore di esprimere le parti puramente funzionali come pure funzioni. Le funzioni pure hanno il vantaggio di essere molto semplici da eseguire in parallelo, poiché non hanno effetti collaterali.

Almeno questa è la mia ragione.


1

Un'altra breve risposta: http://www.mlstate.com - una piattaforma di sviluppo web completa, basata su FP. La semantica pulita del linguaggio consente tutti i tipi di analisi automatizzate di sicurezza e protezione, ottimizzazioni, ecc.

Avvertenza: io lavoro lì.


1

I linguaggi funzionali potrebbero non essere direttamente utili per la creazione di grandi app, ma utilizziamo ampiamente il paradigma di programmazione funzionale per creare le nostre app. La programmazione funzionale pura pone il vincolo di "nessun effetto collaterale". Ciò garantisce che le chiamate funzionali pure produrranno lo stesso risultato nell'ordine in cui vengono chiamate. Questo non è l'ideale per lo sviluppo web, ma se la programmazione funzionale è combinata con un sistema che cambia lo stato, è possibile creare un'app Web robusta. Dai un'occhiata al mio articolo per maggiori dettagli: FAST Server Anche queste diapositive .


0

Sì, poiché la programmazione funzionale può essere eseguita in qualsiasi linguaggio, è possibile utilizzarla quotidianamente come sviluppatore web.

Dovresti? dipende dal problema che stai risolvendo. La programmazione funzionale è un paradigma di programmazione e dove dovresti usarlo dipende dal problema che stai risolvendo.

Per rendere la decisione più semplice, pensa se è più facile risolvere qualche problema utilizzando i concetti OOP, dove l'incapsulamento, il polimorfismo, l'ereditarietà come le caratteristiche possono semplificarti la vita?

Se sì, non andare per la programmazione funzionale lì e usa semplicemente gli OOP. Se la tua applicazione eseguirà calcoli / calcoli / logiche aziendali complesse e coinvolgerà un'elaborazione fortemente concorrente, la programmazione funzionale può offrire molti strumenti e vantaggi in questi casi.

Questi sono solo diversi stili di costruzione della struttura e degli elementi dei programmi, quindi si tratta solo di usare lo strumento giusto per il lavoro giusto. Rest tutto può essere fatto usando qualsiasi cosa.

Programmazione funzionale nello sviluppo web:

JavaScript supporta la programmazione funzionale ed è molto di supporto quando siamo nel contesto dello sviluppo web.React framework è fortemente influenzato dai principi di programmazione funzionale e utilizzato in molte applicazioni web là fuori.

Inoltre, puoi trovare molte applicazioni web costruite e funzionanti con framework sviluppati sui linguaggi di programmazione funzionali elencati di seguito:

• WebSharper (F #)

• Snap (Haskell)

• Ascensore (Scala)

• Ocsigen (OCaml)

• Chicago Boss, Zotonic (erLang)

Spero che la mia risposta possa aiutare chiunque.


-2

Probabilmente non lo userai e non dovresti usarlo ma quando dici che qualcuno troverà sempre un'eccezione alla regola (Viaweb, ecc.). Fondamentalmente non esiste un "super linguaggio" ci sono solo righe di codice funzionanti, di solito in "Blub". Persino Paul Graham afferma che il vantaggio principale (in effetti l'unico) di un Lisp è la capacità di creare rapidamente prototipi.

Anche i "super linguaggi" di solito influiscono piuttosto che aumentare la leggibilità del codice, il che significa che l'unico "genio" che lo ha scritto deve mantenerlo per sempre poiché nessun altro può capirlo, soprattutto perché è probabile che lo scriva nel suo dialetto modificato. Ciò riduce la possibile portata di qualsiasi progetto, il che significa che anche se si possono fare cose nuove e innovative, non sono estensibili e quindi rimangono su scala relativamente piccola (come Hacker News in Arc).

Questo non vuol dire che qualcuno non possa avere un'idea geniale e implementarla in uno stile incomprensibile che poi può essere riscritto in Blub ed esteso in modo che molte persone possano trarne beneficio. In realtà, è esattamente quello che è successo in tutte le storie di successo del Lisp, per non parlare di ogni famoso filosofo che sia mai vissuto. Ma ovviamente, se sei un "genio" potresti anche essere in grado di prototipare il tuo prodotto in qualche altro modo.

Per quanto riguarda FP sulla JVM, ci sono cose limitate ma interessanti possibili. Anche se personalmente lo userei solo per la prototipazione, è possibile che tu abbia un caso d'uso (di solito qualcosa a che fare con il multi-threading) in cui fornisce qualche miglioramento.


1
In realtà, Paul Graham afferma che il grande vantaggio di Lisps è che è "il linguaggio più potente" disponibile. Sostiene la sua tesi dicendo che qualcosa come un quarto di viaweb (per righe) era macro Lisp. La meta-programmazione nella maggior parte dei linguaggi (in particolare quelli disponibili a metà degli anni '90) è difficile. Non è un prototipo se viene inviato al server di produzione.
nmichaels
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.