O que é JavaScript, realmente?

95

Tudo isso começou quando eu estava procurando uma maneira de testar minha página da Web quanto à conformidade com o JavaScript, como o W3C HTML Validator . Ainda não encontrei um. Então, deixe-me saber se você conhece algum ...

  1. Procurei a página oficial do JavaScript e encontrei o script ECMA . Essas pessoas padronizaram uma linguagem de script (não sinto mais vontade de chamá-la de JavaScript!) E a denominamos ECMA-262 ( Wikipedia ). Seu trabalho mais recente é a Edição 5.1

  2. O JavaScript foi desenvolvido pela Mozilla Corporation e sua última versão estável é a 1.8.5 ( veja isto ), baseada na edição 5.1 da ECMA

  3. A página da Wikipedia vinculada menciona dialetos. Da Mozilla JavaScript 1.8.5 é listado como um dialeto juntamente com JScript 9 (IE) e JavaScript (do Chrome V8 [ Wiki ]) e muito outros. Devo entender que o JavaScript 1.8.5 é um derivado do ECMA-262 e o SpiderMonkey [ Wiki ] é um mecanismo que o executa? E o Chrome tem seu próprio dialeto e o mecanismo V8 é o programa que o executa?

Com todos esses dialetos baseados no ECMA-262, o que não consigo mais entender é "O que é JavaScript "? Existem verdadeiras linguagens de script entre navegadores? Os vários implementadores se reúnem para concordar com a compatibilidade entre dialetos? Esse esforço é ECMA?

Lorde Loh.
fonte
10
Você esqueceu de mencionar o ActionScript, que é um dialeto ECMA que não tem nada a ver com o que você pode chamar de Javascript.
DaveRandom
4
Não é muito de conformidade (como você já destacou), mas o jslint é muito bom para verificar o código.
SomeKittens
2
@ MadaraUchiha - Eu concordo "basta usar jQuery. Tudo ficará bem." não vai ficar bem. Por isso comecei a pesquisar isso. Meu site bharath.lohray.com funciona bem no Chrome e Firefox e o validador do W3C também não gera erros, mas é uma chatice no IE! Além do mais, por mais que eu goste da idéia do pessoal em anybrowser.org/campaign , não posso ser verdadeiramente um navegador diferente!
Senhor Loh.
7
Sobre a sua página, a rolagem é muito irritante e por cima. Apenas IMO. E o título de "Senhor" soa pomposo como o inferno, mesmo que você seja realmente um Senhor.
NullUserException 22/10/12
11
É desnecessariamente chamativo. Você não vê postagens deslizando para cima e para baixo no SE. Se esse é um site com aparência profissional e você ainda deseja transições, use algo mais discreto, como um fade-in / fade-out.
NullUserException 22/10/12

Respostas:

96

Praticamente todas as linguagens maduras são definidas por uma especificação, e os compiladores ou intérpretes tentam seguir o padrão definido nessa especificação. Mas muito raramente conseguem, a menos que o padrão seja definido pelo autor da linguagem.

Você pode encontrar o padrão C ++ 2003 , a especificação C # 4 , a especificação Java 7 e muito mais online. Muitos deles têm números de padronização ECMA ou ISO. Estas são apenas organizações com as quais você pode registrar um padrão e torná-lo mais oficial.

Historicamente, Ruby fez as coisas de maneira um pouco diferente, tendo um conjunto de testes executáveis ​​como uma especificação . Portanto, se você deseja escrever um intérprete e chamá-lo de Ruby padrão, basta criar um intérprete que passe em todos esses testes. Mas mesmo Ruby provavelmente se tornará uma especificação mais formal eventualmente.

Javascript não é diferente, exceto possivelmente da maneira como evoluiu.

O Javascript foi criado pela Netscape. Eles o chamavam de LiveScript, mas era semelhante ao Java e fecharam um acordo com a Sun sobre o nome, o que beneficiou tanto o marketing do Netscape quanto do Java. A Microsoft tinha o VBScript e (por razões provavelmente perdidas por conjecturas) basicamente copiou o Javascript, mas o nome era de propriedade da Sun, então eles o chamaram de JScript.

Mas o JScript, embora muito parecido com o Javascript na sintaxe, fez muito uso do COM - por exemplo, IE5 e 6 instanciam um objeto XMLHttpRequest usando new ActiveXObject("Microsoft.XMLHTTP");.

E assim nasceram paralelos, semelhantes, mas também diferentes "dialetos" de Javascript. Com o tempo, vários grupos que possuem navegadores com menos participação de mercado do que o IE tentaram padronizar o idioma e, durante anos, a Microsoft resistiu. Até V8.

V8 foi rápido. Estabeleceu um novo padrão de mercado. Fazia todo o resto parecer pobre.

E, através de vários casos antitruste contra a Microsoft, o IE estava perdendo participação de mercado. De repente, era do interesse da Microsoft apoiar a padronização. Ainda não estamos lá, mas está no caminho certo.

Enquanto isso, V8 foi open-source, o que permitiu que as pessoas começam a pensar-se novos usos para um analisador Javascript rápido, como Node.js .

Mas, voltando à sua pergunta: O que é Javascript? É o nome comum (e original) do ECMAScript, uma especificação para uma linguagem prototípica comum, mas não exclusivamente, usada para navegar e manipular o modelo de objeto de domínio em um broswer.

ECMA-262 é apenas a definição padrão, como ECMA-334 é a definição padrão para C #. ECMAScript era o único nome com o qual todas as partes interessadas poderiam concordar, em 99, quando a ECMA-262 foi escrita.

pdr
fonte
7
Se eu pudesse votar sua resposta mais de uma vez, eu o faria :-) Isso ajuda a deixar algumas coisas mais claras. A analogia dos compiladores C torna a situação um pouco compreensível :-) Exceto que o JavaScript não é compilado no binário e os usuários finais veem scripts não / quase funcionais. Devo entender que não consigo criar uma página com um padrão e espero que ela funcione em todos os navegadores da mesma forma ainda? (ainda sendo a palavra operativa).
Senhor Loh.
1
@LordLoh. Está correto. Mas você pode permitir que bibliotecas como jQuery e Prototype abstraiam as diferenças para você.
Pd #
Este post e a pesquisa começaram quando a animação jQuery não funcionou no IE9 e eu menti a ideia da campanha anybrowser.org e esperava que eu pudesse seguir um padrão. HTML5 / CSS3 / JS. O JS acabou como o bug no meu capô.
Senhor Loh.
1
@LordLoh. Eu não teria tanta certeza de que a culpa é do jQuery. Uma rápida olhada mostra problemas com o seu HTML (aspas ausentes, por exemplo) e quando você minimiza o seu Javascript assim, pode haver resultados estranhos se você não for muito preciso. Lembro-me de um problema há muito tempo em que perdi um ponto-e-vírgula e só falhou após a compactação em um dos principais navegadores. O jQuery é bastante estável e deve funcionar bem com o IE9.
Pd23
5
@LordLoh. console.log é seu problema. Não funciona a menos que você abra a barra de ferramentas do desenvolvedor (e, assim, crie o objeto "console").
Pd23
23

Javascript é uma implementação comumente usada do ECMAScript. É uma situação muito semelhante à família Scheme . No esquema, você tem uma especificação altamente formalizada. A versão atual é o R6RS, embora o R5RS seja de longe o padrão mais comumente implementado até agora. As implementações são mais dispersas que as do ECMAScript devido à idade do Scheme e às filosofias gerais.

Agora, o Javascript é comum em grande parte devido ao crescimento explosivo da participação de mercado no Firefox, da Mozilla, e no Chrome, do Google. Ele ganhou uma posição originalmente com o Netscape Navigator, que acabou se transformando no navegador Mozilla e depois no Firefox (e Iceweasel, se você roda com a multidão do Scheme).

Agora aqui é onde fica um pouco arriscado. A maior parte do desempenho do Javascript vem do analisador e do mecanismo que o executa. É aqui que as diferenças reais entre navegadores se tornam aparentes. O Spidermonkey executa o Javascript de maneira diferente da V8. O Javascript ainda tem pontos difíceis, como a falta de uma biblioteca totalmente comum, embora isso esteja sendo trabalhado.

Portanto, se o Javascript fosse C ++, o ECMAScript seria o C ++ 11, com UNIX e G ++ sendo o mais próximo do "padrão", enquanto o C ++ para .NET e o Objective C ++ se situam mais longe, como o ActionScript do ECMAScript

Engenheiro Mundial
fonte