Por que JavaScript, em vez de uma máquina virtual de navegador padrão?


167

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.


17
Não sei por que isso está sendo rejeitado. Eu pensei que era uma boa pergunta!

11
Porque é mais uma reclamação do que uma pergunta.
Dustman

6
É devido à idéia de que o javascript não é uma linguagem real ou não é tão bom quanto outras línguas. Nenhuma delas é verdadeira desde os primeiros dias, mas a percepção "suja" atualmente persiste.
Adam Davis

43
Uau, nunca vi a comunidade SO falhar tão completamente. As únicas respostas que até abordam a idéia proposta aqui são de baixo para cima, ficando com votos negativos, enquanto as respostas que desnecessariamente "defendem JS" estão recebendo todo o amor. Esta pergunta não ataca o JS, apenas defende a escolha. É simplesmente dizer: "o que você acha do JS, não seria bom poder usar outras linguagens também, se você preferir?". O que há de errado com você?
21710 Jordi

4
Esse é um grande problema com o StackOverflow, permitindo edições até o futuro após várias respostas serem fornecidas. A pergunta original é mais relevante para as respostas principais, enquanto o restante aborda o "novo espírito" da pergunta após as edições.

Respostas:


28

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.


54
-1 para o comentário da equipe CSS do IE. O IE6 não era ruim quando foi lançado, seu principal concorrente foi o software mais ruim que já foi escrito. Os ataques de pessoas, embora às vezes divertidos, não tornam o mundo um lugar melhor.
precisa saber é o seguinte

5
Não foi possível discordar da sua avaliação do JavaScript como "... uma linguagem de script de aplicativo da Web ..." menos. É uma linguagem excelente e flexível, com muito mais aplicabilidade do que isso.
TJ Crowder

2
@TJ Crowder: ITYM "Não poderia discordar [...] mais."?
Christoffer Hammarström

2
@Jaroslaw Szpilewski Zelador sem vergonha da JS? Você fez comentários errados sobre isso, pensando em outro post? Além disso, para @erikkallen, o comentário da equipe do CSS do IE foi o que é conhecido como "uma piada".
Adam Wright

2
Alguma "clarividência" nesta resposta: agora temos o CoffeeScript.
andref 14/05

19

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:

  1. Google Native Client : tecnologia para executar código nativo no navegador.
  2. Emscripten : LLVM bytecode compilador para javascript. Permite que os idiomas LLVM sejam executados no navegador.
  3. Idéia: CLI do .NET no navegador, pelo criador do Mono: http://tirania.org/blog/archive/2010/May-03.html

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.


O LLVM pode ser uma resposta para tudo isso. Já existe um grande número de idiomas (Python, Ruby e até Java) com suporte para compilação no LLVM, e o LLVM pode compilar no Javascript, portanto, pelo menos, podemos obter suporte automático ao LLVM nos navegadores simplesmente compilando para JS. É claro que o LLVM não pode ser otimizado para todos os paradigmas de programação e linguagens específicas, portanto o desempenho não será o mesmo que 100% nativo, mas os JITs / Intérpretes de Javascript, mesmo levando em conta os avanços recentes, sempre foram lentos em relação ao nativo de qualquer maneira .
facuq

18

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.

  • Você está atrasado na estabilidade.
  • Você está atrasado na complexidade (bem, mal, porque está tentando generalizar em vários idiomas)
  • Você está atrasado na adoção

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.


É uma resposta bastante subjetiva, mas eu não queria votar, pois você levanta alguns pontos positivos (e a resposta original é mais parecida com o início das discussões).
Gerbrand

2
Eu não acho que a VM no navegador é necessário pesado. Claro que ele já existe como Silverlight e Applets. Acho que o último não ganhou popularidade, principalmente por causa do mau momento e das estupidez técnicas que são resolvidas. Permitir qualquer idioma entre a tag de script (com restrições) seria bem legal e certamente não é impossível nem impraticável.
Gerbrand

2
Peso (MB)? Provavelmente está bem. Peso (complexidade)? Muito pesado. Qualquer VM multilíngue que você tenha, terá implementações de idiomas no topo (por exemplo, JRuby / IronRuby, Clojure, Jython / IronPython), etc. A JVM absorve a complexidade ou os implementadores de linguagem.
the happy idiota

Seria necessário uma quantidade impressionante de trabalho para reimplementar vários idiomas para várias plataformas novas (IE / Firefox / Safari ...). E os idiomas também mudam. "Esta página é visível apenas em um navegador Ruby 1.9"? Por favor não.
the happy idiota

4
Não acho que você esteja respondendo à pergunta corretamente, apenas afirmando por que acha que outros idiomas não são adequados para o que o javascript faz no navegador no momento. Um bytecode universal adequado para a web seria algo que outras linguagens compilam; se essa linguagem for útil, cabe ao seu criador não o bytecode da web; muitas linguagens já o fazem através da compilação em javascript (isto é, dardo).
Timotheus

14

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.


12

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).


10

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.


13
Como você pode dizer que o JavaScript não é totalmente orientado a objetos? É certamente uma das linguagens mais orientadas a objetos que eu conheço. Tudo no JavaScript é um objeto - até funções. É que o OOP no JavaScript não se parece com o OOP em muitos outros idiomas.
Rene Saarsoo 18/09/08

2
OOP não é inerente ao JavaScript. Você não possui pacotes, interfaces, classes abstratas ou sobrecarga de método incorporados ao núcleo e não pode estender um objeto - apenas o protótipo de um objeto, o que o torna tecnicamente baseado em protótipo, não baseado em OOP.

3
Muito errado nisso. "Protype" é um padrão de design (Gamma et. Al., Pp 117-126). Como você se lembrará, os Padrões de Design giram em torno de designs comuns na Programação Orientada a Objetos. E só porque o idioma não possui os mesmos recursos que outros idiomas OOP não significa que não seja OOP.
Dustman

13
Você não está errado, acho que a melhor maneira de dizer é que o JS não é OO baseado em classe, é OO prototípico.
Juan Mendes

14
1. Javascript é totalmente OOP. OOP é sobre objetos, não sobre classes. 2. Você pode estender um objeto em JavaScript, esse é o ponto principal da programação orientada a objetos Prototypal. 3. Você não está respondendo à pergunta, a questão não está atacando JS, está apenas pedindo uma escolha. Eu acho que o JS é uma ótima linguagem, mas eu adoraria ter outras opções ao programar no navegador.
Manuel Ceron

7

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 .


6

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.


O que estou perdendo com a pergunta? Parece que o Flash faria exatamente o que ele queria. Não estamos falando de outro idioma nativo, ele quer uma VM, certo? Boa resposta.
Mwilcox

6

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 é

um novo formato portátil, eficiente em tamanho e tempo de carregamento, adequado para compilação na Web.

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

À medida que o WebAssembly evolui, ele suporta mais idiomas que o C / C ++, e esperamos que outros compiladores também o suportem .

Eu deixo você dar uma olhada na página oficial do projeto, é realmente emocionante!


5

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:

  1. crie um tradutor da linguagem X para javascript (por exemplo, coffeescript)
  2. crie um intérprete em javascript que interpreta a linguagem X (por exemplo, brainfuck ). sim, o desempenho seria péssimo, mas ei, não pode ter tudo.

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!


4

De fato. O Silverlight é efetivamente exatamente isso - uma VM baseada em .Net do lado do cliente.


4

Existem alguns erros no seu raciocínio.

  1. 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, ...

  2. 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.

  3. 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.


3

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:

  • tratar funções como cidadãos de primeira classe
  • ser capaz de adicionar e remover funções a qualquer objeto a qualquer momento (não é muito útil, mas é maravilhoso)
  • é uma linguagem dinâmica.

É 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.


+1 - Não confunda problemas de idioma com a interpretação do código pelo navegador.
JL.

por que você deveria defender JS, quando ele simplesmente pediu uma opção de bytecode?
Milind R

3

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.


3

É uma ideia legal. Por que não dar um passo adiante?

  • Escreva o analisador HTML e o mecanismo de layout (todos os bits complicados do navegador, na verdade) na mesma linguagem da VM
  • Publique o mecanismo na Web
  • Servir a página com uma declaração de qual mecanismo de layout usar e seu URL

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.


Não sei dizer se você está brincando, mas sua ideia é realmente muito legal.
Milind R

3

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.


2

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.


2

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 .


eu seria curioso para ouvir mais sobre por que o "HTML DOM" é o ponto de dor
Alex Moore-Niemi

2

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.


2

Verifique isso http://www.visitmix.com/Labs/Gestalt/ - permite usar python ou ruby, desde que o usuário tenha o silverlight instalado.


"desde que o usuário tenha o silverlight instalado." bem, eu posso ver uma falha neste.
Origamiguy

Para ser honesto, provavelmente é mais fácil fazer isso do que incorporar o Ruby no ie6 / 7/8/9 / ff / chrome / safari. Heck Chrome já inclui flash, por que não SL!
usar o seguinte

2

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.


O Visual Studio é gratuito e você também tem código vs, Atom e outros IDEs excelentes, acho que você não está se esforçando o suficiente
GideonMax

1

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.



1

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.


0

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.


bem, que eu saiba, toda verificação de segurança feita para a sandbox JS pode (e geralmente é) feita no código de byte, como verificar permissões e coisas assim, olhando para um monte de texto que é difícil para um computador. enviar código de bytes para o cliente em vez do JS padrão não deve mudar isso
GideonMax

0

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.


0

... 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


1
Daí a sugestão de padronizar uma VM para que fosse onipresente. Usar o JavaScript como uma "linguagem de máquina para a web" parece incrivelmente desajeitado e ineficiente.
newdayrising

Acho que você entendeu errado, o pôster original não está sugerindo que os navegadores suportem outros idiomas, ele está sugerindo que, em vez de compilar java para js, você compilaria java em uma VM.
GideonMax

0

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.


0

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


-1

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.

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.