No momento, o único idioma totalmente suportado e o padrão de fato para manipulação de árvore DOM no navegador é o JavaScript. Parece que ele tem problemas profundos de design que o tornam um campo minado de bugs e falhas de segurança para iniciantes.
Você conhece alguma iniciativa existente ou planejada para introduzir uma linguagem melhor (redesenhada) de qualquer tipo (não apenas javascript) para manipulação de árvore DOM e solicitações HTTP em navegadores da próxima geração? Se sim, qual é o roteiro para sua integração no Firefox, por exemplo, e se não, por quais razões (além da interoperabilidade) o JavaScript deve ser o único idioma suportado na plataforma do navegador?
Eu já usei o jQuery e também li "javascript: the good parts". De fato, as sugestões são boas, mas o que não consigo entender é: por que apenas javascript? No lado do servidor (sua plataforma OS favorita), podemos manipular uma árvore DOM com todos os idiomas, até o fortran. Por que o lado do cliente (a plataforma do navegador) suporta apenas javascript?
fonte
Respostas:
O problema com o javascript não é a linguagem em si - é uma linguagem dinâmica e com bom protótipo. Se você é oriundo de OO, existe uma curva de aprendizado, mas a culpa não é do idioma.
A maioria das pessoas assume que o Javascript é como Java porque tem sintaxe e nome semelhantes, mas na verdade é muito mais parecido com o lisp. Na verdade, é bastante adequado para manipulação de DOM.
O verdadeiro problema é que ele é compilado pelo navegador e isso significa que ele funciona de uma maneira muito diferente, dependendo do cliente.
Não apenas o DOM real é diferente dependendo do navegador, mas há uma enorme diferença no desempenho e no layout.
Editar os seguintes esclarecimentos em questão
Suponha que vários idiomas interpretados sejam suportados - você ainda tem os mesmos problemas. Os vários navegadores ainda teriam erros e teriam diferentes DOMs.
Além disso, você precisaria ter um intérprete embutido no navegador ou de alguma forma instalado como um plug-in (que você pode verificar antes de exibir a página) para cada idioma. Demorou séculos para obter o Javascript consistente.
Você não pode usar linguagens compiladas da mesma maneira - então você está introduzindo um executável que não pode ser facilmente examinado pelo que faz. Muitos usuários optam por não deixá-lo funcionar.
OK, e quanto a algum tipo de sandbox para o código compilado? Parece Java Applets para mim. Ou ActionScript no Flash. Ou c # no Silverlight.
E algum tipo de padrão de IL? Isso tem mais potencial. Desenvolva no idioma que desejar e, em seguida, compile-o para IL, que o navegador então JITs.
Exceto que o Javascript já é o tipo de IL - basta olhar para o GWT . Permite escrever programas em Java, mas distribuí-los como HTML e JS.
Editar após mais esclarecimentos em questão
Javascript não é, ou melhor, não era, o único idioma suportado pelos navegadores: na era das trevas do Internet Explorer, era possível escolher entre Javascript ou VBScript para rodar no IE. Tecnicamente, o IE nem executava Javascript - ele executava JScript (principalmente para evitar ter que pagar à Sun pela palavra java , a Oracle ainda é dona do nome Javascript ).
O problema era que o VBScript era proprietário da Microsoft, mas também não era muito bom. Enquanto o Javascript estava adicionando funcionalidade e obtendo ferramentas de depuração de alto nível em outros navegadores (como FireBug), o VBScript permaneceu apenas no IE e praticamente não pode ser depurado (as ferramentas de desenvolvimento no IE4 / 5/6 não existiam). Enquanto isso, o VBScript também se expandiu para se tornar uma ferramenta de script bastante poderosa no sistema operacional, mas nenhum desses recursos estava disponível no navegador (e quando estavam se tornaram enormes falhas de segurança).
Ainda existem alguns aplicativos internos corporativos por aí que usam VBScript (e alguns dependem dessas falhas de segurança) e ainda estão executando o IE7 (eles apenas pararam o IE6 porque a Microsoft finalmente o eliminou).
Obter o Javascript no estado atual tem sido um pesadelo e levou 20 anos. Ele ainda não possui suporte consistente, com os recursos de idioma (especificados em 1999) ainda faltando em alguns navegadores e muitos shims sendo necessários.
A adição de um idioma alternativo para interpretação nos navegadores enfrenta dois grandes problemas:
Conseguir que todos os fornecedores de navegadores implementem o novo padrão de idioma - algo que eles ainda não gerenciam para Javascript há 20 anos.
Uma segunda linguagem potencialmente dilui o suporte que você já possui, permitindo (por exemplo) o IE ter suporte a Javascript de segunda taxa, mas ótimo VBScript (novamente). Eu realmente não quero escrever código em diferentes idiomas para diferentes navegadores.
Deve-se notar que o Javascript não está 'concluído' - ainda está evoluindo para se tornar melhor em novos navegadores. A versão mais recente está anos à frente das implementações dos navegadores e eles estão trabalhando na próxima.
fonte
Compilar para Javascript
Por enquanto, o uso de uma linguagem que compila para Javascript parece ser a única maneira realista de alcançar todas as plataformas enquanto escreve um código mais inteligente, e isso provavelmente continuará sendo o caso por um longo tempo. Com qualquer nova oferta, sempre haverá algumas razões pelas quais um ou mais fornecedores não se apressam em enviá-la.
(Mas eu realmente não acho que isso seja um problema. O Javascript já foi bastante otimizado. O código da máquina também não é seguro se for escrito à mão, mas funciona bem como um destino de compilação e linguagem de execução.)
Tantas opções
Existe um conjunto crescente de idiomas que são compilados para Javascript. Uma lista bastante abrangente pode ser encontrada aqui:
Notável
Mencionarei alguns que considero dignos de nota (embora sem dúvida negligencie algumas jóias que não conheço):
Spider apareceu em 2016. Ele afirma ter as melhores idéias de Go, Swift, Python, C # e CoffeeScript. Não é seguro, mas possui alguns recursos de segurança menores .
Elm : Haskell pode ser a linguagem mais inteligente de todas, e Elm é uma variante do Haskell para Javascript. É altamente sensível ao tipo e conciso, e oferece Programação Reativa Funcional como uma alternativa interessante para modelos reativos ou espaguete MVC. Mas pode ser um choque para programadores de procedimentos .
O Google's Go visa concisão, simplicidade e segurança. O código Go pode ser compilado em Javascript por GopherJS .
Dart foi a tentativa posterior do Google de substituir o Javascript. Oferece interfaces e classes abstratas por meio de uma sintaxe semelhante a C / Java com digitação opcional.
O Haxe é como o ActionScript do Flash, mas pode segmentar várias linguagens para que seu código possa ser reutilizado nos programas Java, C, Flash, PHP e Javascript. Oferece objetos dinâmicos e seguros para o tipo.
O Opalang adiciona açúcar sintático ao Javascript para fornecer acesso direto ao banco de dados , continuações inteligentes, verificação de tipo e auxiliar na separação cliente / servidor. (Vinculado ao NodeJS e MongoDB.)
GorillaScript , "uma linguagem de compilação para JavaScript projetada para capacitar o usuário enquanto tenta evitar alguns erros comuns". é semelhante ao Coffeescript, mas mais abrangente, fornecendo vários recursos extras para aumentar a segurança e reduzir os padrões repetitivos do padrão.
O LiteScript fica em algum lugar entre o Coffeescript e o GorillaScript. Oferece sintaxe async / yield para retornos de chamada "em linha" e verificação de erros de digitação variáveis.
O TypeScript da Microsoft é um pequeno superconjunto de Javascript que permite colocar restrições de tipo nos argumentos das funções, o que pode causar alguns bugs. Da mesma forma, o BetterJS permite aplicar restrições, mas em Javascript puro, adicionando chamadas extras ou especificando tipos nos comentários JSDoc. E agora o Facebook ofereceu o Flow, que também realiza inferência de tipos.
O LiveScript é um spin-off do Coffeescript que era popular por sua brevidade, mas não me parece muito legível. Provavelmente não é o melhor para as equipes.
Como escolher?
Ao escolher um idioma alternativo, existem alguns fatores a serem considerados :
Se outros desenvolvedores ingressarem no seu projeto no futuro, quanto tempo levará para eles se atualizarem e aprenderem esse idioma ou quais são as chances de eles já saberem?
O idioma possui poucos recursos (o código ainda estará cheio de clichê) ou muitos recursos (levará muito tempo para dominar e até então algum código válido pode ser indecifrável)?
Possui os recursos necessários para o seu projeto? (Seu projeto precisa de verificação de tipo e interfaces? Precisa de continuações inteligentes para evitar o inferno de retorno de chamada aninhado? Existe muita reatividade? Pode ser necessário direcionar outros ambientes no futuro?)
O futuro...
Jeff Walker escreveu uma série instigante de posts sobre "o problema do Javascript", incluindo o motivo pelo qual ele acha que nem o TypeScript , nem o Dart nem o Coffeescript oferecem soluções adequadas. Ele sugere algumas características desejáveis para uma linguagem aprimorada na conclusão .
fonte
Sim e não. Existe uma alternativa chamada Dart, do Google, que compila com JavaScript e, assim como o jQuery, tenta facilitar um pouco a manipulação do DOM. Pode ser divertido experimentar, confira.
Veja também
fonte
É verdade que o Javascript era notoriamente difícil de lidar, mas a comunidade de desenvolvimento da Web percorreu um longo caminho desde então. Em vez disso, eu encorajo você a dar uma olhada no jQuery . É fácil e abstrai todos os vários problemas.
E realmente não existem alternativas que funcionem de maneira geral. O Flash vem à mente, mas esse também é o script ECMA e provavelmente está acabando com a maioria das coisas.
fonte
Em curto prazo, usaria coisas como o jQuery para ocultar as incompatibilidades do navegador. A longo prazo, tecnologias como Silverlight ou Adobe AIR podem tornar esse campo minado muito diferente (mas ainda um campo minado) no futuro.
fonte
Doug Crockford falou com o Google detalhando as partes ruins e boas do JavaScript e seu futuro. Na verdade, ele não mudou muito desde 1999 - o que pode ser considerado uma coisa boa (praticamente todos os navegadores podem executar o mesmo código, desde que você esteja ciente de suas limitações) e Doug mostra onde as partes boas eram principalmente mal-entendidos que acabam sendo muito poderosos.
Para manipulação do DOM, observe o JQuery como uma biblioteca do lado do cliente que substitui a maior parte da terrível API do DOM por operações difíceis de escrever em pedaços de código bastante elegantes e fáceis de escrever.
fonte
Se você está pensando que o JavaScript tem problemas profundos, recomendo o livro de Doug Crockford, JavaScript: The Good Parts . (Ou no Google, para "Crockford JavaScript", para encontrar várias apresentações em vídeo que ele fez.) Crockford esboça um subconjunto e conjunto de práticas seguros e lista especificamente algumas partes do idioma a serem evitadas.
Tenho conhecimento de planos para substituir JavaScript como os de facto meios de manipular o DOM. Portanto, é melhor aprender a usá-lo com segurança e bem.
fonte
Em termos de cliente, o Javascript é a única maneira de manipular o DOM. Em termos de servidor, existem várias maneiras.
fonte
O Internet Explorer suporta linguagens de script conectáveis, embora o único incluído de maneira confiável no IE, além do JScript, seja o VBScript.
Até onde eu vi, parece haver um tipo geral de viés em relação às linguagens dinâmicas no navegador, e o JavaScript parece preencher essa necessidade de maneira adequada o suficiente para que os efeitos de rede tornem qualquer outra linguagem um não iniciador. A linguagem é realmente bastante poderosa, embora sua implementação nos navegadores deixe muito a desejar.
fonte
Se você deseja restringir seus clientes / visitantes a navegadores específicos e, possivelmente, exigir que eles instalem um plug-in, consulte o MS Silverlight - uma visão geral legível está na wikipedia . Com o Silverlight 2, você pode executar, no lado do cliente, o código que você escreveu em C #, IronPython, IronRuby, VB.NET, etc; o clone Moonlight gratuito do Silverlight, do projeto Mono, promete trazer a mesma funcionalidade para o Linux.
Na prática, a maioria dos desenvolvedores de aplicativos e sites da Web prefere atingir um público-alvo mais amplo do que o Silverlight (e eventualmente o Moonlight) pode oferecer atualmente - o que significa manter o Javascript ou possivelmente o Flash (que usa uma linguagem de programação semelhante, o Actionscript).
Portanto, ganhar participação substancial, adoção e tração para qualquer outra coisa está provando ser uma luta árdua até para a Microsoft, com seus grandes grupos de engenheiros e orçamentos de marketing e um projeto de software livre ao lado (para possivelmente diminuir as preocupações com o aprisionamento proprietário) ) - o que pode ajudar a explicar por que há muito pouco interesse, por exemplo, por parte da Mozilla Foundation, em avançar em direção a esse objetivo. "Além da interoperabilidade", você diz: mas claramente a questão da interoperabilidade é o maior aqui, dado o que observamos pelo progresso do Silverlight ...
fonte
Como já foi dito, você tem o Flash (ActionScript, que é uma linguagem derivada do Javascript) e o Silverlight / Moonlight (IronPython, IronRuby, JScript, VBScript, C #) que podem ser executados no navegador por meio de plug-ins (o primeiro é muito mais onipresente) .
Também há outra alternativa, se você gosta de Ruby: HotRuby , é uma implementação de ruby em javascript que será executada no navegador. Ainda não está muito maduro, mas você pode dar uma olhada.
fonte
Uma coisa que eu não vi mencionada (oh, eu vi Alcides mencionando o HotRuby enquanto eu escrevia e Nosredna mencionou o GWT e o Script #) e gostaria de jogar lá fora, existem várias implementações de [insert language] -on- JavaScript (por exemplo, tradutores que permitem converter Ruby , Python , C # , Java , Obj-J / Cappuccino [semelhante ao Obj-C / Cocoa] ou Processing [for Canvas] em JavaScript no cliente ou antes da implantação [e alguns dos quais também apresentam várias bibliotecas de abstração]). É claro que há uma sobrecarga de desempenho se estiver sendo traduzida no cliente, mas se você estiver mais confortável com outro idioma, isso permitirá uma certa flexibilidade.
Pessoalmente, eu recomendo aprender a amar o JavaScript. É uma linguagem excelente, poderosa e bastante elegante quando você a conhece. Estou enfrentando o dilema oposto, procurando um pouco de solução JavaScript / DOM capaz do servidor que atenda a todas as minhas necessidades. / opinião não solicitada
fonte
Não. O JavaScript é esse, mas ele evoluirá. A próxima versão é "JavaScript Harmony" e você pode saber mais se pesquisar no Google.
De vez em quando, alguém sugere colocar um interpretador de código de bytes nos navegadores ao lado do JavaScript. Provavelmente não vai acontecer, pelo menos por um tempo.
Eu amo JavaScript. Mas existem outras soluções, incluindo GWT, que compila Java para JavaScript e Script #, que compila C # para JavaScript.
fonte
Jquery (ainda em javascript, mas) realmente ajudará você a ter suporte para quase todos os navegadores e não é tão difícil de aprender :)
fonte
JavaScript é o idioma inglês da web. O inglês se espalhou historicamente porque tinha uma marinha forte conquistando vários países. Isso é comparável às grandes empresas que conquistaram a web com JavaScript. É uma língua que reúne várias fontes européias (grego, latim, idiomas germânicos, francês e até algumas palavras chinesas e indianas). O JavaScript emprestou muitos conceitos ao longo dos anos de outras linguagens (estrutural, OO, funcional). O inglês é falado em lugares diferentes, com pequenas variações de dialeto e sotaque, o que pode dificultar o entendimento. Assim como o JavaScript, diferentes navegadores o interpretam de maneira um pouco diferente.
Embora o inglês seja fácil de aprender inicialmente, ele possui uma pronúncia muito inconsistente e mais exceções do que regras. Assim como o JavaScript, está sempre lá para oferecer uma surpresa.
Apesar dos diferentes sotaques, o JavaScript é a língua franca da web. Assim como você pode não ser inglês e escrever aqui em inglês, todo navegador da web possui um certo grau de compreensão do inglês. O IE6 é como o cara que diz em seu currículo que é fluente, mas só estudou duas semanas em inglês como língua estrangeira.
Houve tentativas de suplantar o inglês como principal idioma do mundo, como o esperanto. Mas todos falharam, porque a maioria das pessoas na terra fala um pouco de inglês. Da mesma forma, será difícil introduzir melhores alternativas ao JavaScript.
fonte
Eu não acho que o Javascript será substituído tão cedo. Para uma abordagem completamente diferente para clientes ricos, convém investigar o Flex, que é uma tecnologia baseada em Flash.
fonte
Talvez algo como haxe (consulte haxe.org) possa ajudá-lo. É uma linguagem que parece mais limpa que o JavaScript e pode ser compilada em JavaScript, para que possa ser executada dentro de um navegador.
Sei que essa não é uma resposta direta à sua pergunta, mas achei que poderia ser interessante para você.
fonte
Muitas pessoas entendem que o Javascript não é a melhor e mais bonita linguagem de todos os tempos. No entanto, atualmente é suportado por navegadores e, portanto, será extremamente difícil introduzir um idioma diferente. Simplesmente não precisamos de outra guerra de navegadores.
Isso explica por que não conheço planos de mudar para um idioma diferente do lado do cliente.
Mas acho que o Javascript não é tão ruim se você começar a pensar no modelo DOM e em como trabalhar com ele. Muitas coisas complicadas com JS são o resultado da maneira como o modelo DOM funciona.
fonte