Linguagens dinâmicas x idiomas estáticos para sites [fechado]


13

Esta declaração sugere que idiomas de tipo estaticamente não são ideais para sites:

Vou contrastar isso com a construção de um site. Ao renderizar páginas da web, geralmente você tem muitos componentes interagindo em uma página da web. Você tem botões por aqui e pequenos widgets por lá, e há dezenas deles em uma página da Web, além de possivelmente dezenas ou centenas de páginas no seu site, que são dinâmicas. Com um sistema com uma área de superfície realmente grande como essa, o uso de uma linguagem de tipo estaticamente é realmente bastante inflexível. Acharia doloroso provavelmente programar no Scala e renderizar uma página da Web com ele, quando eu quiser apertar interativamente os botões e o que não estiver. Se todo o sistema precisa ser coerente, como o sistema inteiro, digite check apenas para poder mover um botão, acho que isso pode ser realmente inflexível.

Fonte: http://www.infoq.com/interviews/kallen-scala-twitter

Isso está correto? Por que ou por que não?


6
Parece-me que eles não consideraram um idioma / pacote com uma hierarquia de objetos adequada. Não é necessário verificar se o controle que você está movendo é Buttonquando WebControlcontém todas as informações necessárias e todos os controles são derivados.
Mateus Leia

5
Yup @Matthew - soa como alguém que não sabe realmente o polimorfismo
Nicole

8
Também - Twitter pode ser popular, mas é não porque o seu site é uma obra-prima de engenharia.
Nicole

Respostas:


39

Eu discordo totalmente. À medida que os sistemas crescem, as linguagens estaticamente garantidas garantem robustez no nível do componente e, portanto, flexibilidade no nível do sistema.

Além disso, o exemplo dado pelo autor realmente não faz sentido. Parece que esse cara não sabe que o polimorfismo pode ser alcançado por outros meios que não a digitação com patos.

Existem várias pessoas que afirmam que as linguagens dinâmicas são superiores, mas isso geralmente se baseia na falta de experiência com sistemas de tipos expressivos que, por exemplo, suportam subtipos estruturais, tipos de dados algébricos e funções de primeira ordem.


1
Como as funções de primeira ordem se enquadram na mesma categoria dos subtipos estruturais e dos tipos de dados algébricos? Você faz parecer que linguagens dinâmicas não têm funções de primeira ordem, o que claramente não é verdade (Esquema, Common Lisp, Erlang, Smalltalk, ...).
Frank Shearar

21
+1 para "Parece que esse cara não sabe que o polimorfismo pode ser alcançado por outros meios que não a digitação de patos".
Nicole

1
@ Frank Shearer: O que quero dizer é que eles são suportados com o mesmo tipo de segurança que qualquer outro valor. Há várias linguagens estritamente digitadas que suportam valores de função, mas não fazem distinção entre assinaturas.
back2dos

1
Também não concordo, e é por isso que estou selecionando isso como resposta.
Bradford


8

Primeiro, lembre-se de que o autor da declaração acima está falando sobre o desenvolvimento de sites. Então, ele está preocupado com o desenvolvimento da apresentação , e é aí que ele acha que Scala não seria uma boa escolha ...

Dito isto, eu tenho uma boa experiência com desenvolvimento web. Eu trabalhei por pelo menos 8 anos exclusivamente com ele, 5 dos quais em agências digitais.

E, sim, na minha experiência, uma linguagem compilada estaticamente na camada de apresentação pode ser um grande obstáculo. O conteúdo precisa ser alterado constantemente, com muito mais frequência do que os requisitos de negócios. E geralmente isso precisa ser feito por uma equipe distinta (os desenvolvedores "front-end"). Eles normalmente sabem muito sobre HTML, JavaScript, padrões da Web, CSS, mas não muito sobre linguagens do lado do servidor, como Java e C #. Eles também assumem que qualquer tipo de alteração em um modelo está disponível imediatamente ; eles não são usados ​​para compilar e digitar erros. E eles estão certos: linguagens de tipo estaticamente são muito boas para requisitos complexos e difíceis, como acesso a dados e regras de negócios, mas não tão boas para o desenvolvimento de interfaces.

Esse é, de fato, um dos principais benefícios do uso de uma linguagem de modelo especializada e interpretada como o Velocity . Seu fácil de usar, poder e flexibilidade são adequados para os desenvolvedores da camada de apresentação. E então os funcionários do lado do servidor são livres para usar uma linguagem séria e tipicamente estática em qualquer outro lugar ...

No entanto, também concordo que Scala é um pouco diferente. Sendo ao mesmo tempo muito menos detalhado e muito mais expressivo que o Java, acredito que poderia ser usado para o desenvolvimento de apresentações - então talvez possa ser usado com sucesso como uma linguagem de modelo. E se também pudesse ser combinado a uma estrutura como o Play (que compila o site automaticamente após cada alteração), poderia ser um IMHO vencedor. Ainda assim, mesmo o Play optou por uma linguagem de modelo do tipo Groovy (dinâmica), o que não é um bom sinal.

Resumindo: o problema com o Scala está muito mais relacionado ao fato de ele ser compilado. De fato, seu mecanismo de inferência de tipo faz com que você quase esqueça que também é digitado estaticamente.

(E desculpe pelo meu inglês. Deixe-me saber se algo não estiver claro, vou tentar consertar.)


1
Eu gostaria disso - basta olhar para a bagunça JSP / STRUTS quando eles tentaram fazer do Java uma linguagem da web!
James Anderson

8

Eu acho que o texto (e a maioria das respostas) está misturando idiomas tipicamente estatísticos e idiomas excessivamente detalhados . Obviamente, a interseção é muito grande (especialmente quando se considera apenas os idiomas mais populares); mas existem alguns exemplos interessantes de linguagens não verbais e de tipo estatístico: Go, Haskell, Scala, Rust…


2
Defina "excessivamente". À medida que os programas se tornam cada vez mais complexos e seus ciclos de vida e manutenção aumentam, a probabilidade de alguém que não seja o autor original precisar depurar ou modificar qualquer parte do código continua a aumentar. Quando você está nessa situação, geralmente está sob controle, e mais informações ficam disponíveis imediatamente sobre exatamente com quais dados você está lidando e o que pode fazer melhor. Eu depurei o Delphi de outras pessoas e o JavaScript de outras pessoas, e o Delphi é muito mais fácil por causa da informação detalhada e do tipo.
Mason Wheeler

1
Apenas uma observação: algo como o TypeScript (JavaScript, com informações estáticas do tipo) pode ser uma maneira direta de testar a teoria do OP. Minha curta exposição a ele tem sido bastante agradável - uma vez, ao converter algum JavaScript em TypeScript, ele realmente me ajudou a descobrir que não havia maneira possível de chamar um determinado método e não produzir um erro .
precisa saber é o seguinte

5

Encorajo-vos a ler Strong Typing vs. Strong Testing de Bruce Eckel . Seu principal argumento é que a qualidade do software se resume a testes. Você pode testar de várias maneiras diferentes. Os compiladores testam algumas coisas no momento da compilação: tente armazenar uma string em uma variável int e ela provavelmente latirá para você. Em linguagens dinâmicas, muitos testes ocorrem em tempo de execução. Por fim, não importa quando o teste ocorre. Isso só tem que acontecer. O tempo que você ganha ao não compilar em idiomas dinâmicos perde o teste em tempo de execução. Você testou tudo de forma robusta, certo?

Dado isso, uma preferência por linguagens compiladas com sistemas de tipos rígidos versus linguagens dinâmicas é exatamente isso - uma preferência. Como boxeadores versus cuecas ou tangas versus calcinhas francesas. Não há resposta certa ou errada. Vesti-los com a atitude certa e só é incrível.


1
"Os compiladores testam algumas coisas em tempo de compilação: tente armazenar uma string em uma variável int e provavelmente latirá para você. Em linguagens dinâmicas, muitos testes ocorrem em tempo de execução.": Verdade, ao usar uma linguagem dinâmica, acontece para escrever muitos testes que substituem a verificação de tipo. Usando uma linguagem estática, meus testes podem se concentrar mais na lógica de negócios.
Giorgio

@Giorgio Interessante, raramente tenho lógica de verificação de tipo nos meus testes.
pllee

@ pllee: Às vezes, não é diretamente a lógica de verificação de tipo, mas os testes verificam algum comportamento que um sistema de tipo estático teria aplicado de qualquer maneira.
Giorgio

Bruce Eckel parece ser apenas mais uma pessoa que passou anos lidando com linguagens excessivamente verbais (Java, C ++, ...) e depois pulando no primeiro trem diferente (Python) que encontra. Ele está gastando metade do artigo elogiando o quão grande é a sintaxe do Python. Ele não tem nada a contribuir para este debate devido à falta de conhecimento.
Ziggystar

Mas se você tentar armazenar uma string em uma variável int em um idioma dinâmico - verifique se você não perceberá até executar / testar o aplicativo e vê-lo em ação. Mas na prática do mundo real (mais de 17 anos de desenvolvimento) raramente vejo isso como a principal causa de um bug! Sempre! Mas mesmo que seja - você percebe e conserta? Qual é o grande problema? É como se todo o argumento fosse baseado em um caso muito raro e muito técnico. Não é um grande problema! Por outro lado, o benefício da digitação dinâmica é o desenvolvimento, que é muito mais rápido.
Manachi 18/09/17

2

Concordo com isso na maioria dos casos, porque, se você lida com clientes em uma plataforma da Web, a flexibilidade é essencial.

As linguagens de tipo estático são mais robustas e seguras que as de tipo dinâmico, mas quando você começa a adaptar o código para agir de uma maneira que não deveria ser e você precisa rápido, as soluções parecem um pouco complexas e rígidas.

Portanto, se você tiver a alteração para mesclar tecnologias, recomendo criar um núcleo em uma linguagem de tipo estaticamente (o núcleo não muda muito) e usá-lo dinamicamente para a interação do usuário.


O acoplamento frouxo é bom. Mas linguagens dinâmicas não são necessárias para alcançá-lo. Veja, a Web tem tudo a ver com acoplamentos soltos feitos via HTTP, e a maioria dos servidores e navegadores da Web são escritos em linguagens estáticas. Linguagens dinâmicas brilham em aplicativos de script quando você precisa de um pedaço de código facilmente modificável em tempo de execução, sem chamar uma grande cadeia de ferramentas.
9000

2

Eu acho que o autor deste post não analisou o próprio Scala. Embora eu concorde que Java e C # tenham limitações e sejam um pouco inflexíveis para o desenvolvimento da Web, o Scala é uma linguagem de tipo estaticamente bastante diferente do que você normalmente pensa quando ouve isso. O Scala permite a digitação de patos, bem como uma versão segura do tipo de aplicação de patches de macaco (através de conversões implícitas). Isso torna as bibliotecas de programação um pouco mais complexas, porque você terá que pensar em tipos, mas se você usar uma biblioteca como o Lift, ela se parecerá com uma linguagem dinâmica, exceto que o compilador informará sobre erros óbvios nos quais você não a usa. certo. Pessoalmente, acho que a estrutura da web de elevação não precisa se esconder do ruby ​​on trilhos ou similar. Dê uma olhada nos exemplos de código aqui ou aquie decida por si mesmo. Eu desenvolvo o elevador por um bom tempo agora e nunca tive uma situação em que tive um erro de tipo e pensei "Ah, cara, se isso fosse dinâmico, funcionaria" ... porque se fosse dinâmico, simplesmente não teria me dito que houve um erro até travar durante o tempo de execução.


1

Pessoalmente, acho que o que eles dizem é verdade para qualquer sistema, não apenas para sites. Você precisará digitar estática quando falar com o hardware, pois todo o resto a digitação dinâmica tem as mesmas desvantagens e benefícios, independentemente do que você faz, e o que é melhor depende do gosto e dos problemas específicos de cada projeto.


Eu acho que vale a pena notar que o Scala é um pouco especial porque usa inferência de tipo e, portanto, não pertence à mesma categoria de digitação estática que Java.
Winston Ewert

1

Resposta rápida prática: depende do tamanho e da complexidade do tamanho da web. Site pequeno, programa dinâmico. lang., site grande e complexo, programa estático lang.

Resposta chata estendida: Muitos desenvolvedores insistem que um site deve ser feito com um progresso dinâmico. langr. mas a verdade é que, eventualmente, as ferramentas de desenvolvimento da Web tendem a usar ou emular linguagens estáticas de tipo.

Eu trabalhei com PHP várias vezes e, mais cedo ou mais tarde, tivemos que adicionar muito código que verifica os tipos dos dados fornecidos, que estão implícitos em um programa de tipo estático. lang.

Lagn digitado. também ajuda o uso de IDE (s), que requer muita verificação de tipo.

(apresentado por seu vizinho programador & designer de compiladores ;-))


0

Eu meio que concordo. Quando eu olho para a maioria dos códigos C # front-end da Web, há muitas transmissões de strings e serialização de dados para strings. Basicamente, o HTTP como protocolo é um bom ajuste para linguagens dinâmicas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.