Seria prática uma alternativa de tipo estatístico ao JavaScript em páginas da web?

9

A preferência pela tipagem dinâmica e estática é em grande parte uma questão de gosto, e pessoas diferentes as acham mais ou menos adequadas em diferentes situações.

A minha pergunta é: seria tecnicamente possível ter uma alternativa de tipo estatístico ao JavaScript para aumentar a página da Web do lado do cliente etc.?

Armand
fonte
3
Por que não? `` ``
Josh K
2
Você está falando de uma linguagem hipotética de tipo estatístico que todo navegador teria que implementar ou de possibilidades já existentes?
user281377
2
Você poderia usar miniaplicativos Java, suponho.
David Thornley
@ammoQ que se você mencionar, hipotético
Armand
@ Josh não sei. @David LOL, obrigado por isso!
Armand

Respostas:

22

Certamente não há razão técnica para que tal coisa não possa existir. Não há nada específico no código do lado do cliente que exija o uso de linguagens digitadas dinamicamente.

GrandmasterB
fonte
11
O Dart possui digitação estática opcional, mas é compilado em Javascript comum. www.dartlang.com
Nishant George Agrwal
16

Como é altamente improvável que outro idioma encontre ampla adoção, sua melhor aposta seria criar uma versão estaticamente tipada de JavaScript (ou seja, uma linguagem próxima ao java) e um pré-processador que converta isso em JavaScript normal.

Por exemplo, seu script é assim:

<script type="text/staticjavascript">
   String foobar(int foo, String bar) {
      String result="";
      for (int i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

e o pré-processador verifica se todas as variáveis, funções, objetos etc. são usados ​​corretamente de acordo com seu tipo e altera o script para

<script type="text/javascript">
   function foobar(foo, bar) {
      var result="";
      for (var i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

com o qual todo navegador pode lidar.

user281377
fonte
5
+1 para uma abordagem pragmática
Gary Rowe
Realmente esta questão não é sobre pragmatismo - é sobre teoria. Atualizará.
Armand
2
Eu também sugeriria usar inferência de tipo.
Oliver Weiler
Método auxiliar: Muito boa sugestão, mas não mudo meu exemplo agora, pois a inferência de tipo tornaria a versão estática muito semelhante à versão dinâmica, pois o exemplo é muito simples.
user281377
4
Eu não acho que um javascript de tipo estatístico seria muito próximo ao java, além do sintaticamente. Javascript e Java têm muitas diferenças além da digitação estática versus dinâmica - OO baseado em classe vs. baseado em protótipo. Como seu código de exemplo parece ser baseado em classe, eu diria que "staticjavascript" é um nome impróprio para esse idioma e deveria ser chamado de algo como "java do lado do cliente". +1 para compilar em javascript (no entanto, o Google Web Toolkit compila java para javascript).
sepp2k
8

A minha pergunta é: seria tecnicamente possível ter uma alternativa de tipo estatístico ao JavaScript para aumentar a página da Web do lado do cliente etc.?

Certo. O Google Web Toolkit compila Java para JavaScript estaticamente ... Pense nisso: toda a beleza e flexibilidade do Java, com todo o desempenho do JavaScript gerado por máquina!

Sério, porém, você pode fazer isso para todos os tipos de idiomas, e muitos tentaram (existem ou existem compiladores para C e C # também). Se o resultado final é prático ou não depende do que você está tentando realizar: o Google está atrás de uma plataforma consistente para o desenvolvimento de aplicativos muito grandes do lado do cliente e possui seu próprio mecanismo JavaScript para inicializar; você pode achar que adotar um animal desses para efeitos de pairar e a chamada estranha de AJAX introduz muito mais dor do que simplesmente aprender a viver com um pouco de código não digitado ...

Shog9
fonte
3
Não sei dizer se você está brincando sobre os "benefícios" do GWT. Se você é bravo. Trabalhar com a GWT foi uma das experiências mais enlouquecedoras da minha vida.
Nicole
@ Renesis: Como se trabalhar com Javascript e compatibilidade com navegadores já não fosse enlouquecedor? Mas ele tem recursos elegantes, como baixar várias imagens em uma única imagem e depois cortá-las no cliente.
Macneil
11
@ Macneil Eles podem ter corrigido isso até agora, mas quando eu estava trabalhando com o Sprites, quase negava todos os benefícios, porque escrevia automaticamente outras propriedades de background CSS que você talvez não desejasse, então você precisava desordenar seu CSS toda vez para substituí-lo .
Nicole
6

A maioria dos benefícios das linguagens de tipo estatístico é realizada em tempo de compilação. Se o idioma for interpretado no cliente, muitas dessas vantagens serão perdidas. Se você os compilar no servidor, precisará descobrir como carregá-los e executá-los no cliente (pense em controles ActiveX). Você pode optar por uma abordagem híbrida (compilar para alguma forma tokenizada intermediária), mas basicamente voltará aos applets Java.

TMN
fonte
2
+1 por explicar uma possível razão pela qual não , e não apenas responder se for possível.
4

Já existe.

O ActionScript 3 (a linguagem de script por trás do Flash e Flex) é um dialeto do ECMAScript que implementa tipos fortes, e você pode usá-lo mais ou menos da mesma maneira do lado do cliente que o JavaScript (a diferença é que o AS3 requer um plug-in flash e é compilado). Eu, pessoalmente, tento me afastar dela hoje em dia, mas se você estiver no campo "estático", tente.

Isso responde à pergunta principal e, agora que a temos, sua pergunta secundária se torna "O Flash é prático?" A resposta é "sim", com alguns "se" se "mas" s

  • ... se você precisar ocultar seu código por qualquer motivo.
  • ... se você deseja um nível muito alto de interatividade (no nível jQuery passado)
  • ... mas mesmo sem HTML5, as compatibilidades entre navegadores estão melhorando ultimamente.
  • ... mas o HTML5 estará disponível em breve.
  • ... mas um dos grandes atrativos da digitação / compilação estática (em oposição à interpretação) é a velocidade adicional que ela permite através de otimizações (e o Flash realmente não tem uma velocidade muito boa, apesar do sistema de tipos)
Inaimathi
fonte
O AS3 é baseado no ES4 abandonado.
gsnedders
3

Em teoria, você pode colar qualquer script na página que desejar. A <script>tag tem um typeatributo, afinal.

A única barreira é obter participação de mercado suficiente em termos de implementação em diferentes navegadores para que valha a pena usar.


Então sim, é meio improvável neste momento.

Anon.
fonte
Então, não há problema com a digitação estática, então? Não estou muito preocupado com os aspectos práticos disso.
Armand
11
@ Alison: Você pode colocar qualquer conteúdo de texto que desejar em uma tag de script (com uma exceção - não pode conter a sequência de caracteres </script>). Você poderia inserir o código Brainf * ck lá, se realmente quisesse. Tudo o que você precisa fazer é implementar um intérprete para o idioma escolhido no navegador que você deseja usar.
Anon.
@Anon. obrigado, muito interessante. Se é assim tão fácil, provavelmente já foi feito em algum lugar. Eu me lembro <script type="vbscript">de uma vez ...
Armand
Alison: vbscript era apenas para o IE, e algumas pessoas o usavam quando a participação de mercado do IE era> 90%. Hoje, com a participação de mercado do IE em torno de 50%, provavelmente menos em algumas partes do mundo, é um grande impedimento; e enquanto nenhum navegador tiver tanta participação de mercado novamente, não espere que algo como uma nova linguagem de script do lado do cliente aconteça.
user281377
@Alison: Internet Explorer ainda suporta VBScript como uma linguagem de script ... Eu deveria saber, temos sites de intranet aqui que usá-lo (e, portanto, requerem Internet Explorer - urgh!)
Dean Harding
2

Seria prático? Não.

É possível? Sim!

Desenvolver sua própria alternativa estaticamente tipada ao JavaScript seria demorado, na melhor das hipóteses. Na pior das hipóteses, você não seria capaz de convencer os navegadores existentes a implementar a linguagem de script do cliente e precisaria escrever o seu próprio.

Marcie
fonte
Gostaria de explicar?
back2dos
Adicionado um parágrafo de acompanhamento.
Marc12
Eu apenas acrescentaria que a única razão pela qual isso pode não ser prático é a situação atual. Se estivéssemos de volta ao ponto imediatamente antes do lançamento do Javascript, as coisas seriam diferentes.
yakiv 18/07/12
1

Você pode usar idiomas como o haXe para escrever seu código de maneira estática e exportá-lo para javascript. O JavaScript está se tornando muito rápido, portanto é suficiente como idioma de saída. Tentar impor uma linguagem de tipo estaticamente como padrão da Web é quase impossível. As tentativas de introduzir a digitação estática no JavaScript falharam por razões amplas de discussão.

back2dos
fonte
1

Seria tecnicamente possível? Se for para ser implementado em Java, eu diria "muito, muito difícil, mas possível" sem perda significativa de desempenho.

Na verdade, estou escrevendo uma DSL de tipo estaticamente em Java agora, e a única maneira que encontrei para evitar a verificação de tipo em tempo de execução é usar genéricos e suprimir avisos "não verificados" ... ou seja, até a hora de implementar matrizes multidimensionais (parâmetros de classe devem ser conhecidos em tempo de compilação e, portanto, são inerentemente finitos, enquanto matrizes multidimensionais representam um número infinito de tipos ...) Ainda tentando descobrir isso, infelizmente-- tenho certeza de que encontrará problemas semelhantes com as classes definidas pelo usuário.

O problema é que continuo tropeçando nesses tipos de problemas, mas depois de ficar um tempo pensando nisso, encontro uma boa solução. Portanto, para fazer isso e ter os benefícios de desempenho da digitação estática (sem verificação de tipo de tempo de execução), eu diria que é extremamente difícil, mas não impossível. Menos o desempenho, eu diria difícil, mas muito possível.

Eu sei que é uma pergunta antiga, apenas pensei que minha experiência poderia ser valiosa para alguém.

Philip
fonte
0

É tecnicamente possível escrever scripts do lado do cliente em qualquer linguagem de script suportada pelo agente do usuário (navegador). Na prática, a única linguagem amplamente suportada é JavaScript / ECMAScript. Convencer os fabricantes de navegadores a implementar e dar suporte a um novo idioma nesse estágio provavelmente não terá sucesso; portanto, se você deseja usar um novo idioma do lado do cliente com estaticamente digitado, será necessário traduzir o novo idioma para JavaScript ou implementar um intérprete para ele em JavaScript.

Existem vários projetos que já fazem algo assim; por exemplo, Google Web Toolkit , conforme mencionado em uma das outras respostas.

mithrandi
fonte
0

Como você não tem esperança de obter todos os navegadores usados ​​no mundo real para oferecer suporte a um novo idioma; o idioma terá que ser compilado para jscript.

Como todos os exemplos da web estão em jscript, a linguagem deve se parecer principalmente com jscript.

Eu acho que existe um escopo com um "subconjunto" de jscript que é verificado por um verificador estático, mas também é válido. Por exemplo:

  • Todas as variáveis ​​devem ter um comentário que diga que há tipos antes do primeiro uso.
  • Todos os usos de variáveis ​​devem ser válidos com o descrito acima.
  • Funções / classe não podem ser usadas se não tiverem sido declaradas em um comentário #
  • Um comentário na parte superior do arquivo js deve listar todos os outros arquivos js dos quais depende.
Ian
fonte