Domanda

1) I linguaggi funzionali sono adatti allo sviluppo di applicazioni web?

2) Sono linguaggi funzionali adatti al business / ERP / CRM tipo di applicazioni?

È stato utile?

Soluzione

I linguaggi funzionali del tipo che descrivi sono linguaggi di programmazione generici, sono utilizzati per ogni genere di cose, incluse app Web e app aziendali. (Uso Haskell).

Come suggerisce gabor, alla fine si tratta di biblioteche. Scala ha un framework web: ascensore. Haskell ha happstack , nonché 2100 4400 (in 2010 2012) librerie su Hackage per tutti i tipi di cose.

In realtà non è tanto una questione di lingua, quanto la toolchain, quando si considerano particolari domini specializzati.

Altri suggerimenti

I linguaggi funzionali sono utili per qualsiasi cosa tu voglia usarli.

Tuttavia, lo sviluppo di applicazioni in questi giorni non è così semplice come l'utilizzo di un linguaggio di programmazione. Il vantaggio di Java, C #, ecc. È che vengono forniti con librerie di grandi dimensioni e altri aspetti ambientali necessari per la creazione di software aziendale. La maggior parte dei linguaggi funzionali non ha quel grande supporto (ancora?).

F # potrebbe essere promettente poiché si trova nell'ambiente .NET e può sfruttare gli strumenti disponibili lì (correggimi se sbaglio).

Questo articolo descrive come Lisp, un primo linguaggio funzionale, è stato usato per creare un web based applicazione correttamente.

I linguaggi funzionali sono adatti allo sviluppo di applicazioni web, in particolare Scala.

Dai un'occhiata al Lift per ulteriori informazioni.

  

2) I linguaggi funzionali sono adatti per applicazioni di tipo aziendale / ERP / CRM?

Per affrontare il secondo punto sulle app aziendali / ERP / CRM: personalmente non le implementerei in un "puro" linguaggio funzionale come Haskell o un linguaggio funzionale dinamico come Clojure. D'altra parte, sto sto attualmente implementando un ERP in Scala, che ovviamente è ibrido OOP / FP e compilato staticamente.

Il motivo per cui dico questo è che un'app aziendale come un ERP è fondamentalmente orientata ai record: esiste uno schema di dati che esprime i diversi tipi di record e la logica dell'app viene quindi progettata quasi interamente attorno al CRUDing di quei record e all'applicazione di flussi di lavoro aziendali personalizzati a loro. E fondamentalmente, non credo che questo tipo di app aziendali incentrate sui dati si adattino perfettamente al modello funzionale.

Le persone possono parlare della discrepanza relazionale con OOP tutto ciò che vogliono, ma alla fine sia OOP che i database sono orientati ai record: un linguaggio OOP con un buon ORM consente di mappare quei diversi modelli di dati nel codice e quindi allegare il codice da gestire ciascuno dei modelli. E avere questo tipizzato staticamente (idealmente con un ORM fortemente tipizzato come lo squeryl di Scala) riduce massicciamente le possibilità di un errore di runtime o ad es. una modifica a uno dei modelli di dati non correttamente applicati tramite il codice.

Non fraintendetemi: sono un grande fan di FP (sto facendo sempre più programmazione dei miei sistemi in Haskell), ma per me l'approccio orientato ai record di OOP ha più senso della funzione approccio orientato al FP per combattere gli oggetti dati di un ERP aziendale o simili. (Scala è una bella eccezione alla regola perché puoi usare il paradigma OOP con ORM di qualità per la manipolazione dei record, ma anche la bontà di FP per la tua programmazione generale di app.)

  1. Sì, l'azoto è un buon esempio di un framework web funzionale. Ridimensiona anche.

http://nitrogenproject.com/

Yaws è un fantastico server web per Erlang.

Anche se non direi che particolari linguaggi funzionali sono fatti su misura per lo sviluppo web, non direi nemmeno che non puoi fare sviluppo web con un linguaggio funzionale. Penso che dipenda interamente da quali framework web potrebbero essere disponibili per la lingua scelta e se ci sono server web che supporteranno la lingua.

Ad esempio, sono sicuro che puoi usare F # insieme ad ASP.Net su IIS per fare lo sviluppo web. Dubito che ci sia supporto per F # nel motore di template, ma puoi sicuramente scrivere la logica di business in F #.

Allo stesso modo, c'è mod_haskell per Apache, che dovrebbe rendere relativamente facile avere un output dinamico con haskell. Anche se non l'ho mai usato personalmente. Allo stesso tempo, se esiste un mod_ (erlang o scala) per Apache, sarebbe altrettanto facile per quelle lingue.

In definitiva, penso che la natura apolide dei linguaggi funzionali dovrebbe renderlo adatto per un framework web senza stato in stile MVC. Tuttavia, penso che dipenda davvero da quali strumenti e strutture sono disponibili per semplificarti la vita quando lavori con queste lingue. Ad esempio, Ruby non è stato molto popolare per lo sviluppo web fino a quando le rotaie non sono diventate popolari, e non mi è piaciuto fare nulla di intricato con Python fino a quando non ho trovato Django.

I linguaggi funzionali offrono nuovi tipi di astrazioni che possono essere utilizzate per lo sviluppo web. I server Web basati sulla continuazione sono ad esempio popolari tra i linguaggi funzionali. Il server web dello schema PLT supporta questo tipo di sviluppo di applicazioni web. Puoi leggere di più sulle continuazioni e il loro utilizzo nello sviluppo web su wikipedia

La maggior parte delle lingue funzionali, in particolare quelle che hai incluso, sono considerate lingue di uso generale. Per lo sviluppo web, prenderei in seria considerazione l'utilizzo di Clojure o Scala. Entrambi hanno ottimi framework web ed entrambi funzionano sulla JVM. Consiglio vivamente Clojure e Scala, ma non tanto per gli altri.

Haskell ha un framework web, ma non l'ho mai usato.

Applicazioni aziendali? Certo, perché no. I linguaggi funzionali sono l'ideale per qualsiasi cosa.

Uno dei maggiori vantaggi dichiarati dai sostenitori dei linguaggi funzionali è che facilitano la scrittura di programmi che possono essere eseguiti in parallelo. Ma le applicazioni web in genere non hanno problemi con il parallelismo. In genere, il server Web / il server delle applicazioni mantiene un pool di thread e ogni richiesta dell'utente viene assegnata a un thread diverso, che può essere eseguito su un diverso processore fisico. Quindi, puoi sfruttare più processori senza troppi problemi. Il trucco è che le app Web sono caratterizzate da un gran numero di piccole richieste e che thread e linguaggi imperativi funzionano bene lì. Il punto in cui le lingue imperative iniziano a decomporsi è quando hai un numero limitato di richieste computazionalmente costose.

Un altro grande vantaggio dei linguaggi funzionali è che poiché le funzioni non hanno effetti collaterali, i test sono più facili. Ogni funzione viene testata separatamente su alcuni dei suoi input e si sa che il sistema funzionerà. Ma c'è un problema. Se la tua operazione comporta input o output, usi una monade anziché una funzione e perdi questo vantaggio di testabilità per quella parte del tuo codice.

Ma, in genere, le applicazioni Web implicano la lettura di informazioni da una richiesta, l'invio di richieste a un database, la lettura della risposta dal database e la formattazione di una risposta. Questo è un sacco di IO, o monadi, e pochissime opportunità per le funzioni.

Date queste caratteristiche delle applicazioni Web, quali vantaggi apportano i linguaggi funzionali alla programmazione delle applicazioni Web?

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