A programação funcional é relevante para o desenvolvimento web? [fechadas]

88

Tenho visto muito recentemente sobre programação funcional e Clojure parece particularmente interessante. Embora eu 'entenda' a descrição básica do que é, não consigo descobrir como eu iria usá-lo no dia a dia como um desenvolvedor web, se é que posso. Muito do que li se concentra no lado matemático da programação funcional, em vez de situações de programação típicas encontradas em OO regular.

Eu peguei o lado errado da vara? A programação funcional é totalmente desvinculada do desenvolvimento web? Se não, há exemplos de uso 'para a web'?

Hates_
fonte

Respostas:

31

Alguns exemplos em cima da minha cabeça:

  • Yahoo! A loja é alimentada por Lisp (originalmente chamada Viaweb antes da aquisição)
  • Reddit foi totalmente prototipado em Lisp, embora tenha mudado para Python em 2005
  • Hacker News é escrito inteiramente em Arc (um dialeto Lisp)
Greg Case
fonte
7
Yahoo! Store foi reescrito em c ++ alguns anos atrás.
apg
5
linguagem! = paradigma de programação.
phkahler
58
Escolha estranha de exemplos ... Yahoo! Store foi escrita por Paul Graham, que é um grande defensor do Lisp. Ele também escreveu Hacker News, que é, efetivamente, um clone do Reddit. Presumivelmente, o HN foi escrito em resposta à mudança do Reddit de Lisp para Python enquanto os caras do Reddit faziam parte do YCombinator: um programa acelerador executado por Paul Graham. Eu contaria isso como UM exemplo, não três.
Brandon Bloom,
A configuração do servidor @ShermPendley, a configuração da rede e o acesso ao banco de dados também são fatores importantes no desempenho. Os tempos de execução do script de aplicativos da web são normalmente uma pequena fração do custo geral.
AgmLauncher
62

A programação funcional combina muito bem com os aplicativos da web. O aplicativo da web recebe uma solicitação HTTP e produz um resultado HTML. Isso pode ser considerado uma função das solicitações às páginas.

Compare com os aplicativos de desktop, onde normalmente temos um processo de longa execução, uma IU com estado e fluxo de dados em várias direções. Isso é mais adequado para OO, que se preocupa com objetos com passagem de estado e mensagem.

JacquesB
fonte
20

Não vejo por que não - contanto que você forneça HTML compatível com os padrões aos navegadores, eles não se importam com o que você usou para produzi-lo, seja uma linguagem funcional, uma linguagem imperativa ou macacos treinados.

Sherm Pendley
fonte
20

A programação funcional pura pode não ser mapeada muito bem no ambiente de programação da web. Mas o principal impedimento é apenas a falta de infraestrutura (frameworks e APIs). Passará muito tempo (provavelmente nunca, honestamente) antes que uma linguagem funcional tenha um ambiente de programação da Web tão rico como Java, Python ou Ruby.

Dito isso, existem algumas opções.

Não tenho nenhuma experiência com nenhum desses. Talvez os comentaristas possam opinar sobre o que funcionou bem para eles.

Chris Conway
fonte
4

Para Clojure, há uma inicialização interessante (TheDeadline) que foi desenvolvida usando Clojure e Google App Engine. Eles têm um bom ppt no Slideshare e uma entrevista no InfoQ.

Para uma boa discussão sobre como implantar Clojure com GAE: http://news.ycombinator.com/item?id=1239788

Pelo que eu sei, Clojure tem algumas bibliotecas de desenvolvimento web. Conjure Anel Compojure

Espero que isso responda a algumas de suas perguntas =) (também estou começando ..)

Atenciosamente, Ryan

Ryan Teo
fonte
3

Não está totalmente alheio ao desenvolvimento web. O aplicativo no servidor pode muito bem tirar proveito de recursos funcionais como fechamentos, funções de ordem superior, imutabilidade, transparência referencial ... por exemplo, você com certeza tem coleções que precisa transformar ou manipular de qualquer maneira. A programação funcional ajuda aqui, e é por uma razão que seus idiomas estão penetrando nas linguagens convencionais. Os recursos funcionais ajudam na concisão, testabilidade, paralelização e também podem fornecer soluções nativas para problemas que, de outra forma, você resolveria com padrões.

Atualização: existem frameworks para linguagens funcionais também. Weblocks para Common Lisp, Lift para Scala. Esses são os que eu já ouvi, pode haver mais ... no entanto, você não precisa necessariamente ser puramente funcional - por exemplo, Scala não é puro e deve funcionar com qualquer estrutura Java, você ainda será capaz usar programação funcional para a camada de negócios, etc.

Alemão
fonte
3

Confira Ur / Web . É muito rápido e seu sistema de tipo estático sabe sobre coisas como HTML e SQL para que possa garantir todos os tipos de coisas boas sobre segurança.

Cyrus Omar
fonte
3

Erlang parece estar sendo muito utilizado em algumas das infraestruturas para aplicativos da web escaláveis. os bancos de dados CouchDB e Riak são escritos principalmente em Erlang, assim como o servidor de enfileiramento de mensagens RabbitMQ. Uma das chaves para seu sucesso é que ele lida com a simultaneidade por meio da passagem de mensagens, sem nenhum estado mutável compartilhado. É essa maneira de pensar sobre os problemas que é útil, mais do que qualquer linguagem de programação funcional em particular.

Ou, olhe para MapReduce. É uma maneira muito funcional de ver a computação, mesmo que suas funções map e reduza sejam internamente stateful - e por esse motivo, é uma boa opção para consultar grandes conjuntos de dados de forma distribuída e tolerante a falhas.

De qualquer forma, escolha o que parecer mais prático para você. Mas sempre mantenha a programação funcional em mente, porque você nunca sabe quando ela pode ser útil.

Peter Scott
fonte
2

Linguagem e paradigma não importam para aplicativos da web, eles são todos igualmente bons e ruins. Se você está procurando um motivo para aprender um novo paradigma, mergulhe nele. Meu conselho seria analisar o problema que você está tentando resolver e selecionar o conjunto de ferramentas apropriado.

Chuck McKnight
fonte
2

Javascript (a linguagem da parte FE da web e cada vez mais o BE também) não é funcional por si só, mas as funções são funcionais de primeira ordem

Marcus Westin
fonte
2

Acabamos de lançar uma planilha on-line em que o back-end é escrito inteiramente em Erlang.

http://hypernumbers.com

Por qualquer padrão, este é um dos aplicativos da web mais complexos que você pode construir com uma GUI enorme com complexidade mental.

Gordon Guthrie
fonte
2

Aqui está uma experiência de desenvolvedor web na construção de aplicativos web usando Haskell . Embora as linguagens funcionais sejam muito seguras quanto a tipos e tenham boa concorrência, sempre faltou a melhor API da raça, uma vez que tem sido a queridinha da academia por muito tempo e ainda deve ser fortemente adotada no mundo real. Espero que não esteja muito longe. Erlang já havia entrado nisso.

A_Var
fonte
1

A razão pela qual a programação funcional é popular com a programação da web é que ela explicita o estado compartilhado e mutável e permite ao programador expressar as partes puramente funcionais como funções puras. As funções puras têm a vantagem de serem muito simples de executar em paralelo - pois não têm efeitos colaterais.

Pelo menos esse é o meu motivo.

Rbanffy
fonte
1

Outra resposta curta: http://www.mlstate.com - uma plataforma de desenvolvimento web completa, baseada em FP. A semântica limpa da linguagem permite todos os tipos de análises automatizadas de proteção e segurança, otimizações, etc.

Advertência: eu trabalho lá.

Yoric
fonte
1

Linguagens funcionais podem não ser diretamente úteis para construir ótimos aplicativos, mas usamos o paradigma de programação funcional fortemente para construir nossos aplicativos. A programação funcional pura impõe a restrição de "sem efeitos colaterais". Isso garante que chamadas funcionais puras produzirão o mesmo resultado em qualquer ordem em que forem chamadas. Isso não é ideal para desenvolvimento web, mas se a programação funcional for combinada com um sistema de mudança de estado, um aplicativo web robusto pode ser construído. Dê uma olhada no meu artigo para mais detalhes: FAST Server Também estes slides .

gopi
fonte
0

Sim, como a programação funcional pode ser feita em qualquer linguagem, você pode usá-la como um desenvolvedor web no dia a dia.

Você deveria? depende do problema que você está resolvendo. A programação funcional é um paradigma de programação e onde você deve usá-la depende do problema que está resolvendo.

Para tornar a decisão mais simples, pense se é mais fácil resolver algum problema usando conceitos de OOPs, onde encapsulamento, polimorfismo, herança como recursos podem tornar sua vida mais fácil?

Se sim, não vá para a programação funcional lá e simplesmente use OOPs. Se seu aplicativo vai realizar cálculos / cálculos / lógicas de negócios complexas e envolver processamento altamente simultâneo, a programação funcional pode oferecer muitas ferramentas e vantagens em tais casos.

Esses são apenas estilos diferentes de construção da estrutura e dos elementos dos programas, portanto, trata-se de usar a ferramenta certa para o trabalho certo. Resto, tudo pode ser feito usando qualquer coisa.

Programação funcional em desenvolvimento web:

JavaScript oferece suporte à programação funcional e é muito favorável quando estamos no contexto de desenvolvimento da web. A estrutura do Reat é fortemente influenciada por princípios de programação funcional e é usada em muitos aplicativos da web por aí.

Além disso, você pode encontrar muitos aplicativos da web criados e em execução com estruturas desenvolvidas em linguagens de programação funcionais listadas abaixo:

• WebSharper (F #)

• Snap (Haskell)

• Elevação (Scala)

• Ocsigen (OCaml)

• Chicago Boss, Zotonic (erLang)

Espero que minha resposta ajude alguém.

Amit Agrawal
fonte
-2

Você provavelmente não vai usar e não deve usá-lo, mas quando disser que alguém sempre encontrará uma exceção à regra (Viaweb, etc.). Basicamente, não existe uma "super linguagem", existem apenas linhas de código de trabalho, geralmente em "Blub". Até mesmo Paul Graham diz que o principal (na verdade, único) benefício de um Lisp é a capacidade de prototipar rapidamente.

Além disso, "super linguagens" geralmente interferem em vez de aumentar a legibilidade do código, significando que o único "gênio" que o escreveu deve mantê-lo para sempre, já que ninguém mais pode entendê-lo, especialmente porque é provável que ele o escreva em seu próprio dialeto modificado. Isso diminui o escopo possível de qualquer projeto, o que significa que, mesmo que coisas novas e inovadoras possam ser feitas, elas não são extensíveis e, portanto, permanecem em uma escala relativamente pequena (como Hacker News in Arc).

Isso não quer dizer que alguém não possa ter uma ideia genial e implementá-la em um estilo incompreensível que então pode ser reescrito em Blub e estendido para que muitas pessoas possam se beneficiar com isso. Na verdade, isso é exatamente o que aconteceu em todas as histórias de sucesso do Lisp, sem mencionar todos os filósofos famosos que já viveram. Mas é claro que, se você for um "gênio", também poderá criar um protótipo de seu produto de outra maneira.

Quanto ao FP na JVM, existem coisas limitadas, mas interessantes, possíveis. Embora eu o usasse pessoalmente apenas para prototipagem, é possível que você tenha um caso de uso (geralmente algo relacionado a multi-threading) em que ele forneça algumas melhorias.

Joel
fonte
1
Na verdade, Paul Graham diz que a grande vantagem do Lisps é que ela é "a linguagem mais poderosa" disponível. Ele apóia seu argumento dizendo que algo como um quarto de viaweb (por linhas) eram macros Lisp. Metaprogramação na maioria das linguagens (particularmente aquelas disponíveis em meados dos anos 90) é difícil. Não é um protótipo se for enviado para o servidor de produção.
nmichaels