Não faria sentido oferecer suporte a um conjunto de linguagens (Java, Python, Ruby etc.) por meio de uma máquina virtual padronizada hospedada no navegador, em vez de exigir o uso de uma linguagem especializada - na verdade, um paradigma especializado - somente para scripts de cliente?
Para esclarecer a sugestão, uma página da Web conteria código de bytes em vez de qualquer idioma de nível superior, como JavaScript.
Entendo a realidade pragmática com a qual temos de trabalhar agora com JavaScript devido a razões evolutivas, mas estou pensando mais no longo prazo. No que diz respeito à compatibilidade com versões anteriores, não há razão para que o JavaScript embutido não possa ser suportado simultaneamente por um período de tempo e, claro, que o JavaScript possa ser um dos idiomas suportados pela máquina virtual do navegador.
fonte
Respostas:
Bem, sim. Certamente, se tivéssemos uma máquina do tempo, voltar e garantir que muitos dos recursos Javascript fossem projetados de maneira diferente seria um passatempo importante (isso e garantir que as pessoas que projetaram o mecanismo CSS do IE nunca entrassem em TI). Mas isso não vai acontecer, e estamos presos a isso agora.
Eu suspeito que, com o tempo, ela se tornará a "linguagem de máquina" da Web, com outras linguagens e APIs melhor projetadas para compilar (e atender a diferentes pontos fracos do mecanismo de tempo de execução).
No entanto, não acho que nenhuma dessas "linguagens melhor projetadas" seja Java, Python ou Ruby. Javascript é, apesar da capacidade de ser usado em outro lugar, uma linguagem de script de aplicativo da Web. Dado esse caso de uso, podemos fazer melhor do que qualquer um desses idiomas.
fonte
Acho que o JavaScript é uma boa linguagem, mas gostaria de ter uma opção ao desenvolver aplicativos da Web do lado do cliente. Por motivos legados, estamos presos ao JavaScript, mas há projetos e idéias que procuram mudar esse cenário:
Acho que teremos JavaScript por um longo tempo, mas isso mudará mais cedo ou mais tarde. Existem muitos desenvolvedores dispostos a usar outros idiomas no navegador.
fonte
Respondendo à pergunta - Não, não faria sentido.
Atualmente, as coisas mais próximas que temos de uma VM multilíngue são a JVM e o CLR. Essas não são bestas exatamente leves, e não faria sentido tentar incorporar algo desse tamanho e complexidade em um navegador.
Vamos examinar a ideia de que você poderia escrever uma nova VM multilíngue que seria melhor que a solução existente.
Então, não, não faz sentido.
Lembre-se de que, para oferecer suporte a esses idiomas, você terá que reduzir suas APIs de forma feroz, cortando partes que não fazem sentido no contexto de um script do navegador. Há um grande número de decisões de design a serem tomadas aqui e uma enorme oportunidade de erro.
Em termos de funcionalidade, provavelmente estamos realmente trabalhando com o DOM de qualquer maneira, então isso é realmente um problema de sintaxe e idioma, e nesse ponto faz sentido perguntar: "Isso realmente vale a pena?"
Tendo em mente, a única coisa sobre a qual estamos falando é o script do lado do cliente, porque o script do lado do servidor já está disponível no idioma que você quiser. É uma arena de programação relativamente pequena e, portanto, o benefício de trazer vários idiomas é questionável.
Que idiomas faria sentido trazer? (Atenção, material subjetivo a seguir)
Trazer um idioma como C não faz sentido, porque ele é feito para trabalhar com metal, e em um navegador não há muito metal disponível.
Trazer uma linguagem como Java não faz sentido, porque a melhor coisa são as APIs.
Trazer uma linguagem como Ruby ou Lisp não faz sentido porque o JavaScript é uma poderosa linguagem dinâmica muito próxima do Scheme.
Por fim, qual fabricante de navegadores realmente deseja oferecer suporte à integração DOM para vários idiomas? Cada implementação terá seus próprios erros específicos. Nós já enfrentamos problemas relacionados às diferenças entre o MS Javascript e o Mozilla Javascript e agora queremos multiplicar essa dor em cinco ou seis vezes.
Isso não faz sentido.
fonte
No Windows, você pode registrar outros idiomas no host de scripts e disponibilizá-los para o IE. Por exemplo, o VBScript é suportado imediatamente (embora nunca tenha ganhado muita popularidade, pois na maioria dos casos é ainda pior que o JavaScript).
As extensões win32 do Python permitiram adicionar Python ao IE dessa maneira com bastante facilidade, mas não era realmente uma boa ideia, pois o Python é bastante difícil de sandbox: muitos recursos de linguagem expõem ganchos de implementação suficientes para permitir que um aplicativo supostamente restrito saia .
É um problema geral que, quanto mais complexidade você adicionar a um aplicativo voltado para a rede, como o navegador, maior será a probabilidade de problemas de segurança. Um monte de novos idiomas certamente se encaixaria nessa descrição, e esses são novos idiomas que também estão se desenvolvendo rapidamente.
O JavaScript é uma linguagem feia, mas através do uso cuidadoso de um subconjunto seletivo de recursos e do suporte de bibliotecas de objetos adequadas, ele geralmente pode ser tolerado. Parece que acréscimos práticos e incrementais ao JavaScript são a única maneira de os scripts da Web seguirem adiante.
fonte
Definitivamente, eu gostaria de receber uma VM independente de idioma padrão nos navegadores (eu preferiria codificar em um idioma digitado estaticamente).
(Tecnicamente) É bastante viável gradualmente: primeiro, um grande navegador suporta e o servidor tem a possibilidade de enviar bytecode se a solicitação atual for de um navegador compatível ou traduzir o código para JavaScript e enviar JavaScript em texto sem formatação.
Já existem algumas linguagens experimentais que são compiladas para JavaScript, mas ter uma VM definida (talvez) permitiria um melhor desempenho.
Eu admito que a parte "padrão" seria bastante complicada, no entanto. Também haveria conflitos entre os recursos de linguagem (por exemplo, tipagem estática versus digitação dinâmica) relacionados à biblioteca (assumindo que a nova coisa usaria a mesma biblioteca). Portanto, acho que não vai acontecer (em breve).
fonte
Se você sente que está sujando as mãos, foi submetido a uma lavagem cerebral ou ainda está sentindo os efeitos posteriores dos "anos da DHTML". O JavaScript é muito poderoso e é adequado para sua finalidade, que é o script do lado do cliente da interatividade. É por isso que o JavaScript 2.0 teve um rap tão ruim. Quero dizer, por que pacotes, interfaces, classes e afins, quando esses são claramente aspectos das linguagens do lado do servidor. O JavaScript é excelente como uma linguagem baseada em protótipo, sem ser totalmente orientado a objetos.
Se houver falta de uniformidade para seus aplicativos, porque o lado do servidor e o cliente não estão se comunicando bem, convém reconsiderar como você arquiteta seus aplicativos. Eu trabalhei com sites e aplicativos da Web extremamente robustos e nunca disse uma vez: "Hum, eu realmente gostaria que o JavaScript pudesse funcionar (xyz)". Se pudesse fazer isso, não seria JavaScript - seria ActionScript ou AIR ou Silverlight. Não preciso disso e a maioria dos desenvolvedores também não. São tecnologias legais, mas tentam resolver um problema com uma tecnologia, não uma ... bem, uma solução.
fonte
Não acho que uma VM Web padrão seja tão inconcebível. Há várias maneiras de introduzir um novo padrão de VM da Web normalmente e com suporte completo legado, desde que você garanta que qualquer formato de bytecode da VM usado seja rapidamente descompilado em javascript e que a saída resultante seja razoavelmente eficiente ( Eu chegaria ao ponto de adivinhar que um descompilador inteligente provavelmente geraria javascript melhor do que qualquer javascript que um ser humano pudesse produzir por si próprio.
Com essa propriedade, qualquer formato de VM da Web pode ser facilmente descompilado no servidor (rápido), no cliente (lento, mas possível nos casos em que você tem controle limitado do servidor) ou pode ser pré-gerado e carregado dinamicamente por o cliente ou o servidor (mais rápido) para navegadores que não oferecem suporte nativo ao novo padrão.
Os navegadores que oferecem suporte nativo ao novo padrão se beneficiariam do aumento da velocidade do tempo de execução para aplicativos baseados na Web vm. Além disso, se os navegadores basearem seus mecanismos javascript legados no padrão web vm (ou seja, analisar o javascript no padrão web vm e depois executá-lo), eles não precisarão gerenciar dois tempos de execução, mas isso depende do fornecedor do navegador .
fonte
Embora o Javascript seja a única linguagem de script bem suportada da qual você possa controlar a página diretamente, o Flash possui alguns recursos muito bons para programas maiores. Ultimamente, ele possui um JIT e também pode gerar bytecode on the fly (consulte a avaliação da expressão em tempo de execução para obter um exemplo em que eles usam o flash para compilar expressões matemáticas de entrada do usuário até o binário nativo). A linguagem Haxe fornece digitação estática com inferência e com as habilidades de geração de bytecode, você pode implementar praticamente qualquer sistema de tempo de execução de sua escolha.
fonte
Atualização rápida sobre essa pergunta antiga.
Todo mundo que afirmou que uma "página da web conteria código de bytes em vez de qualquer linguagem de nível superior como o JavaScript" "não acontecerá".
Em junho de 2015, o W3C anunciou o WebAssembly que é
Isso ainda é experimental, mas já existe alguma implementação prototípica no Firefox noturno e no Chrome Canary e já há algumas demonstrações funcionando .
Atualmente, o WebAssembly é projetado principalmente para ser produzido em C / C ++, no entanto
Eu deixo você dar uma olhada na página oficial do projeto, é realmente emocionante!
fonte
essa pergunta ressurge regularmente. minha posição sobre isso é:
A) não vai acontecer e B) já está aqui.
perdão, o que? deixe-me explicar:
anúncio A
uma VM não é apenas algum tipo de dispositivo mágico universal. a maioria das VMs é otimizada para um determinado idioma e alguns recursos de idioma. use o JRE / Java (ou LLVM): otimizado para tipagem estática, e há definitivamente problemas e desvantagens ao implementar tipagem dinâmica ou outras coisas que o java não suportava em primeiro lugar.
portanto, a "VM multiuso geral" que suporta muitos recursos de idioma (otimização de chamada de cauda, digitação estática e dinâmica, foo bar boo, ...) seria colossal, difícil de implementar e provavelmente mais difícil de otimizar para obter um bom desempenho isto. mas eu não sou designer de linguagem ou vm guru, talvez eu esteja errado: é realmente muito fácil, só que ninguém teve a ideia ainda? hum, hum.
anúncio B
já está aqui: pode não haver um compilador de bytecode / vm, mas você realmente não precisa de um. O afaik javascript está completo, portanto deve ser possível:
anúncio C
que? não havia um ponto C em primeiro lugar !? porque não há ... ainda. google NACL. se alguém puder fazer isso, é o google. assim que o google fizer funcionar, seus problemas serão resolvidos. só que talvez nunca funcione, eu não sei. a última vez que li sobre isso, houve alguns problemas de segurança não resolvidos do tipo realmente complicado.
além disso:
o javascript está presente desde ~ 1995 = 15 anos. ainda assim, as implementações do navegador diferem hoje (embora pelo menos não seja mais insuportável). portanto, se você iniciar algo novo ainda, poderá ter uma versão trabalhando em vários navegadores por volta de 2035. pelo menos um subconjunto em funcionamento. isso só difere sutilmente. e precisa de bibliotecas e camadas de compatibilidade. não faz sentido não tentar melhorar as coisas.
Além disso, e o código fonte legível? Eu sei que muitas empresas preferem não veicular seu código como "tipo de" código aberto. pessoalmente, estou muito feliz por poder ler a fonte se suspeitar de algo suspeito ou quiser aprender com ela. viva o código fonte!
fonte
De fato. O Silverlight é efetivamente exatamente isso - uma VM baseada em .Net do lado do cliente.
fonte
Existem alguns erros no seu raciocínio.
Uma máquina virtual padrão em um navegador padrão nunca será padrão. Temos quatro navegadores, e o IE tem interesses conflitantes em relação ao 'padrão'. Os outros três estão evoluindo rapidamente, mas a taxa de adoção de novas tecnologias é lenta. E os navegadores em telefones, pequenos dispositivos, ...
A integração do JS nos diferentes navegadores e seu histórico passado leva você a subestimar o poder do JS. Você promete um padrão, mas desaprova o JS porque o padrão não funcionou nos primeiros anos.
Como dito por outros, JS não é o mesmo que AIR / .NET / ... e similares. JS em sua encarnação atual se encaixa perfeitamente em seus objetivos.
A longo prazo, Perl e Ruby poderiam muito bem substituir o javascript. No entanto, a adoção dessas linguagens é lenta e sabe-se que elas nunca assumirão o JS.
fonte
Como você define melhor? Melhor para o navegador ou melhor para o desenvolvedor? (Além disso, o ECMAScript é diferente do Javascript, mas isso é um detalhe técnico.)
Acho que o JavaScript pode ser poderoso e elegante ao mesmo tempo. Infelizmente, a maioria dos desenvolvedores que conheci o trata como um mal necessário, em vez de uma linguagem de programação real.
Alguns dos recursos que eu gosto são:
É divertido lidar e está estabelecido. Aproveite enquanto estiver disponível, porque, embora possa não ser o "melhor" para scripts de clientes, é certamente agradável.
Concordo que é frustrante ao criar páginas dinâmicas devido a incompatibilidades do navegador, mas isso pode ser mitigado pelas bibliotecas da interface do usuário. Isso não deve ser mantido contra o próprio JavaScript mais do que o Swing deve ser contra o Java.
fonte
JavaScript é a máquina virtual padrão do navegador. Por exemplo, OCaml e Haskell agora têm compiladores que podem gerar JavaScript. A limitação não é o idioma do JavaScript, a limitação são os objetos do navegador acessíveis via JavaScript e o modelo de controle de acesso usado para garantir que você possa executar o JavaScript com segurança sem comprometer sua máquina. Os controles de acesso atuais são tão ruins que o JavaScript só tem acesso muito limitado aos objetos do navegador por razões de segurança. O projeto Harmony está tentando consertar isso.
fonte
É uma ideia legal. Por que não dar um passo adiante?
Em seguida, podemos adicionar recursos aos navegadores sem precisar enviar novos navegadores para todos os clientes - os novos bits relevantes seriam carregados dinamicamente da web. Também poderíamos publicar novas versões do HTML sem toda a complexidade ridícula de manter a compatibilidade com versões anteriores de tudo que já funcionou em um navegador - a compatibilidade é de responsabilidade do autor da página. Também experimentamos linguagens de marcação diferentes do HTML. E, é claro, podemos escrever compiladores JIT sofisticados nos mecanismos, para que você possa escrever suas páginas da Web em qualquer idioma que desejar.
fonte
Gostaria de receber qualquer linguagem além do javascript como possível linguagem de script.
O que seria legal é usar outras linguagens além do Javascript. Provavelmente o Java não seria um ótimo ajuste entre as tags, mas linguagens como Haskell, Clojure, Scala, Ruby e Groovy seriam benéficas.
Eu vim um Rubyscript cruzado há algum tempo ... http://almaer.com/blog/running-ruby-in-the-browser-via-script-typetextruby e http://code.google.com/p/ruby- no navegador /
Ainda experimental e em andamento, mas parece promissor.
Para o .Net, acabei de encontrar: http://www.silverlight.net/learn/dynamic-languages/ Acabei de descobrir o site, mas também parece interessante. Funciona até no meu Apple Mac .
Não sei como as alternativas acima funcionam em fornecer uma alternativa para Javascript, mas parece bem legal à primeira vista. Potencialmente, isso permitiria usar qualquer estrutura Java ou .Net nativamente do navegador - dentro da caixa de proteção do navegador.
Quanto à segurança, se o idioma for executado dentro da JVM (ou mecanismo .Net), a VM cuidará da segurança, para que não tenhamos que nos preocupar com isso - pelo menos, não mais do que deveríamos por qualquer coisa que seja executada dentro do navegador.
fonte
Provavelmente, mas, para fazer isso, precisaríamos que os principais navegadores os suportassem. O suporte do IE seria o mais difícil de obter. O JavaScript é usado porque é a única coisa em que você pode contar com a disponibilidade.
fonte
A grande maioria dos desenvolvedores com quem conversei sobre ECMAScript et. al. acabam admitindo que o problema não é a linguagem de script, é o ridículo DOM HTML que ele expõe. Conflitar o DOM e a linguagem de script é uma fonte comum de dor e frustração em relação ao ECMAScript. Além disso, não se esqueça, o IIS pode usar o JScript para scripts do lado do servidor, e coisas como o Rhino permitem criar aplicativos independentes no ECMAScript. Tente trabalhar em um desses ambientes com o ECMAScript por um tempo e veja se sua opinião muda.
Esse tipo de desespero já existe há algum tempo. Sugiro que você edite isso para incluir ou republicar problemas específicos. Você pode ser agradavelmente surpreendido por um pouco do alívio que recebe.
Um site antigo, mas ainda um ótimo lugar para começar: o site de Douglas Crockford .
fonte
Bem, nós já temos VBScript, não temos? Espere, apenas o IE suporta!
O mesmo vale para a sua boa ideia de VM. E se eu criar um script na minha página usando Lua e o seu navegador não tiver o analisador para convertê-la em bytecode? Claro, poderíamos imaginar uma tag de script aceitando um arquivo de bytecode, que até seria bastante eficiente.
Mas a experiência mostra que é difícil trazer algo novo para a Web: levaria anos para adotar uma nova mudança radical como essa. Quantos navegadores suportam SVG ou CSS3?
Ao lado, não vejo o que você acha "sujo" em JS. Pode ser feio se codificado por amadores, propagando más práticas copiadas em outros lugares, mas os mestres mostraram que também pode ser uma linguagem elegante. Um pouco como o Perl: geralmente se parece com uma linguagem ofuscada, mas pode ser perfeitamente legível.
fonte
Verifique isso http://www.visitmix.com/Labs/Gestalt/ - permite usar python ou ruby, desde que o usuário tenha o silverlight instalado.
fonte
Esta é uma pergunta muito boa.
Não é o problema apenas em JS, pois está na falta de bons IDEs gratuitos para o desenvolvimento de programas maiores em JS. Eu conheço apenas um que é gratuito: Eclipse. O outro é o Visual Studio, da Microsoft, mas não é gratuito.
Por que seria grátis? Se os fornecedores de navegadores da Web desejam substituir aplicativos de desktop por aplicativos on-line (e desejam), eles precisam fornecer a nós, programadores, boas ferramentas de desenvolvimento. Você não pode criar 50.000 linhas de JavaScript usando um editor de texto simples, JSLint e depurador interno do Google Chrome. A menos que você seja um maco-histórico.
Quando a Borland criou um IDE para o Turbo Pascal 4.0 em 1987, foi uma revolução na programação. 24 anos se passaram desde então. Vergonhosamente, no ano de 2011, muitos programadores ainda não usam a conclusão de código, a verificação de sintaxe e os depuradores apropriados. Provavelmente porque existem tão poucos IDEs bons.
É do interesse dos fornecedores de navegadores da Web criar ferramentas (GRATUITAS) adequadas para os programadores, se eles quiserem que construamos aplicativos com os quais eles possam combater o Windows, Linux, MacOS, iOS, Symbian, etc.
fonte
Realisticamente, o Javascript é a única linguagem que qualquer navegador usará por um longo tempo; portanto, seria muito bom usar outras linguagens, mas não vejo isso acontecendo.
Essa "VM padronizada" de que você fala seria muito grande e precisaria ser adotada por todos os principais navegadores, e a maioria dos sites continuaria usando o Javascript de qualquer maneira, pois é mais adequada para sites do que muitos outros navegadores.
Você precisaria colocar em sandbox cada linguagem de programação nesta VM e reduzir a quantidade de acesso que cada linguagem possui ao sistema, exigindo muitas alterações nos idiomas e remoção ou reimplementação de muitos recursos. Considerando que o Javascript já tem isso em mente, e faz isso há muito tempo.
fonte
Talvez você esteja procurando pelo cliente nativo do Google.
fonte
Em certo sentido, ter uma linguagem mais expressiva como Javascript no navegador, em vez de algo mais geral como Java bytecode, significou uma Web mais aberta.
fonte
Eu acho que isso não é questão tão fácil . Podemos dizer que estamos presos ao JS, mas é realmente tão ruim com jQuery, Prototype, scriptaculous, MooTools e todas as bibliotecas fantásticas?
Lembre-se de que o JS é leve , ainda mais com V8, TraceMonkey, SquirrelFish - novos mecanismos Javascript usados em navegadores modernos.
Também está provado - sim, sabemos que há problemas, mas temos muitos deles resolvidos, como problemas de segurança iniciais. Imagem que permite ao seu navegador executar o código Ruby ou qualquer outra coisa. O sandbox de segurança teria que ser feito para raspar. E sabe de uma coisa? O pessoal do Python já falhou duas vezes.
Acho que o Javascript será revisado e aprimorado ao longo do tempo, assim como o HTML e o CSS. O processo pode ser longo, mas nem tudo é possível neste mundo.
fonte
Eu não acho que você "entenda a questão pragmática com a qual o JavaScript é simplesmente o que temos para trabalhar agora". Na verdade, é uma linguagem muito poderosa. Você teve seu applet Java no navegador por anos, e onde está agora?
De qualquer forma, você não precisa "se sujar" para trabalhar no cliente. Por exemplo, tente o GWT.
fonte
... Você quer dizer...
Java e Java applet Flash e Adobe AIR etc.
Em geral, qualquer estrutura de RIA pode atender às suas necessidades; mas para cada um existe um preço a pagar pelo uso (ej. tempo de execução disponível no navegador ou / e proprietário ou menos opções do que o desktop puro) http://en.wikipedia.org/wiki/List_of_rich_internet_application_frameworks
Para desenvolver a Web com qualquer idioma que não seja da Web, você deve: GWT: desenvolver Java, compilar com Javascript
fonte
Porque todos eles já têm VMs com intérpretes de código de bytes, e o bytecode também é diferente. {Chakra (IE), Firefox (SpiderMonkey), Safari (SquirrelFish), Opera (Carakan).
Desculpe, acho que o Chrome (V8) é compilado no código de máquina IA32.
fonte
bem, considerando que todos os navegadores já usam uma VM, não acho que seja tão difícil criar um idioma de VM para a Web.
Eu acho que ajudaria bastante por alguns motivos:
1. Como o servidor compila o código, a quantidade de dados enviados é menor e o cliente não perde tempo na compilação do código.
2. Como o servidor pode compilar o código na preparação e armazená-lo, ao contrário do cliente que tenta diminuir o tempo de compilação rápida do JS, ele pode fazer melhores otimizações de código.
3. compilar uma linguagem para código de bytes é muito mais fácil do que transpilar para JS.
como nota final (como alguém já disse em outro comentário), HTML e CSS são compilados para uma linguagem mais simples, sem ter certeza se isso conta como código de bytes, mas você também pode enviar html e css compilados do servidor para o cliente, o que seria reduzir tempos de análise e busca
fonte
OMI, JavaScript, o idioma, não é o problema. JavaScript é realmente uma linguagem bastante expressiva e poderosa. Eu acho que é um péssimo representante porque não tem recursos clássicos de OO, mas para mim quanto mais eu uso o groove prototípico, mais eu gosto.
O problema, a meu ver, são as implementações inconsistentes e inconsistentes nos vários navegadores que somos forçados a oferecer suporte na web. Bibliotecas JavaScript como o jQuery ajudam bastante a mitigar esse sentimento sujo.
fonte