Che cos'è JavaScript, davvero?

95

Tutto questo è iniziato quando stavo cercando un modo per testare la mia pagina web per la conformità JavaScript come W3C HTML Validator . Non l'ho ancora trovato. Quindi fammi sapere se sai di qualsiasi ...

  1. Ho cercato la pagina JavaScript ufficiale e ho trovato Script ECMA . Queste persone hanno standardizzato un linguaggio di scripting (non mi sento come chiamarlo più JavaScript!) E lo chiamano ECMA-262 ( Wikipedia ). Il loro ultimo lavoro è Edition 5.1

  2. JavaScript è stato sviluppato da Mozilla Corporation e la loro ultima versione stabile è 1.8.5 ( vedere questo ) che si basa sull'edizione 5.1 di ECMA

  3. La pagina di Wikipedia collegata parla di dialetti. JavaScript 1.8.5 di Mozilla è elencato come un dialetto insieme a JScript 9 (IE) e JavaScript (Chrome V8 [ Wiki ]) e molti altri. Devo capire che JavaScript 1.8.5 è un derivato di ECMA-262 e SpiderMonkey [ Wiki ] è un motore che lo esegue? E Chrome ha il proprio dialetto e il motore V8 è il programma che lo esegue?

Con tutti questi dialetti basati su ECMA-262, quello che non riesco più a capire è "Che cos'è JavaScript "? Esistono veri linguaggi di scripting cross-browser? I vari implementatori si incontrano per concordare la compatibilità incrociata del dialetto? Questo sforzo è ECMA?

    
posta Lord Loh. 22.10.2012 - 22:11
fonte

2 risposte

96

Quasi tutti i linguaggi maturi sono definiti da una specifica e compilatori o interpreti cercano di seguire lo standard definito in quella specifica. Ma molto raramente ci riescono, a meno che lo standard non sia definito dall'autore della lingua.

Puoi trovare lo standard C ++ 2003 , il specifica C # 4 , Specifiche Java 7 e molti altri online. Molti di questi hanno numeri di standardizzazione ECMA o ISO. Queste sono solo organizzazioni con le quali puoi registrare uno standard e renderlo più ufficiale.

Ruby ha storicamente fatto le cose in modo un po 'diverso, avendo un insieme di test eseguibili come una specifica . Quindi, se vuoi scrivere un interprete e chiamarlo Ruby standard, devi solo creare un interprete che abbia superato tutti questi test. Ma anche Ruby è probabilmente a diventare una specifica più formale alla fine.

Javascript non è diverso, tranne forse nel modo in cui si è evoluto.

Javascript è stato inizialmente creato da Netscape. Lo hanno chiamato LiveScript, ma sembrava simile a Java e hanno stretto un accordo con Sun sul nome, che ha beneficiato sia del marketing di Netscape che di Java. Microsoft aveva VBScript e (per ragioni probabilmente perse per congetture) fondamentalmente copiato Javascript, ma il nome era di proprietà di Sun, quindi lo chiamavano sfacciatamente JScript.

Ma JScript, pur essendo molto simile a Javascript nella sintassi, ha fatto un sacco di utilizzo della COM - per esempio, IE5 e 6 istanziano un oggetto XMLHttpRequest usando new ActiveXObject("Microsoft.XMLHTTP"); .

E così sono nati parallelismi simili, ma anche diversi, "dialetti" di Javascript. Nel corso del tempo, vari gruppi proprietari di browser con una quota di mercato inferiore rispetto a IE hanno cercato di standardizzare la lingua e per anni Microsoft ha resistito. Fino al V8.

V8 era veloce. Stabilì un nuovo standard di mercato. Ha reso tutto il resto apparentemente scadente.

E, attraverso vari casi antitrust contro Microsoft, IE stava perdendo quote di mercato. All'improvviso, è nell'interesse della Microsoft supportare la standardizzazione. Non siamo ancora arrivati, ma è sulla strada giusta.

Nel frattempo, V8 era open source, che permetteva alle persone di iniziare a pensare a nuovi usi per un parser Javascript veloce, come Node.JS .

Ma, per tornare alla tua domanda: che cos'è Javascript? È il nome comune (e originale) di ECMAScript, una specifica per un linguaggio prototipo comunemente, ma non esclusivamente, usato per navigare e manipolare il modello di oggetti di dominio in un broswer.

ECMA-262 è solo la definizione standard, come ECMA-334 è la definizione standard per C #. ECMAScript era l'unico nome in cui tutte le parti interessate potevano essere d'accordo, nel '99, quando fu scritto ECMA-262.

    
risposta data 23.10.2012 - 01:37
fonte
23

Javascript è un'implementazione comunemente usata di ECMAScript. È una situazione molto simile alla famiglia Scheme . In Scheme, hai una specifica altamente formalizzata. La versione attuale è R6RS sebbene R5RS sia di gran lunga lo standard più comunemente implementato in questo post. Le implementazioni sono più sparse di quelle di ECMAScript a causa dell'età e delle filosofie generali di Scheme.

Javascript sembra essere comune ora in gran parte a causa della crescita esplosiva della quota di mercato di Mozilla Firefox e Google Chrome. Ha guadagnato un punto d'appoggio originariamente con Netscape Navigator che alla fine si è trasformato nel browser Mozilla e poi in Firefox (e Iceweasel se si esegue con la folla Scheme).

Ora qui è dove diventa un po 'rischioso. La maggior parte delle prestazioni di Javascript proviene dal parser e dal motore in esecuzione. È qui che le reali differenze tra i browser diventano evidenti. Spidermonkey esegue Javascript in modo diverso rispetto a V8. Javascript ha ancora punti critici come la mancanza di una libreria completamente comune, anche se su cui si sta lavorando.

Quindi se Javascript fosse C ++, allora ECMAScript sarebbe il C ++ 11, con UNIX e G ++ il più vicino a "standard" mentre C ++ per .NET e Objective C ++ sono più lontane nel modo in cui Actionscript fa da ECMAScript

    
risposta data 23.10.2012 - 01:07
fonte

Leggi altre domande sui tag