Mentre la domanda era "Gli scopi delle lingue sono gli stessi?", La vera domanda è: "Come possiamo migliorare la programmazione web da dove siamo?" .
Entrambi i progetti cercano di farlo considerando
linguaggio di programmazione (TypeScript fa un passo piccolo ma molto pulito, Dart fa la mossa più rivoluzionaria che è ancora in movimento)
interoperabilità con il codice js esistente (0 transizione in TypeScript che si compila in js, complicata in Dart, poiché 2 VM parlano tra loro)
pratiche di ingegneria del software (solo Dart, componenti Web e Shadow Dom)
Negli ultimi 3 giorni mi sono tuffato in profondità in Dart e poi in TypeScript. La mia base di codice CoffeeScript è passata alle righe di codice degli anni 2000, troppo per essere gestita con CoffeeScript delizioso ma troppo soffice. I problemi che ho dovuto affrontare erano che CoffeeScript non ha funzionalità che i linguaggi progettati per la programmazione su media e larga scala hanno: interfacce, moduli, sicurezza dei tipi. Ma c'era una ancora molto più grave problema con caffè e js: I js "questo puntatore" stranezza influenzato la mia sanità mentale e CoffeeScript non aiuta nulla qui.
Quindi qui i miei risultati dopo 3 giorni di valutazione e utilizzo:
Dardo
Ho studiato a fondo il tutorial, leggendo 1 libro, sfogliando il 2 ° libro e provando le demo. Ho pensato, Dardo che è il futuro . Quindi ho provato a migrare la mia app su Dart. Era il mio entusiasmo che è passato da 100 a 10. Ecco perché:
Il Dart Editor è l'unico modo per programmare Dart. Sebbene esistano plugin per Sublime Text, non forniscono funzionalità come intellisense, completamento del codice (correggimi se sbaglio). Il Dart Editor è comunque in qualità pre alpha. Mentre supporta cose magiche da supercool come l'aggiornamento della pagina Web quando si modifica il file CSS (! Davvero fantastico) si blocca o si blocca più volte al minuto. Quindi digiti 5 lettere e 2 volte devi aspettare 2 secondi o 15 secondi tra la digitazione. E avevo un progetto con alcune righe di codice, quindi non volevo aspettare che cosa succedesse quando sono presenti le righe 1000s. Spostato un file da una cartella all'altra all'interno di Dart Editor, crash. Debugcon Dart Editor è a prima vista migliore di tutti gli strumenti di debug js che conosco (Chrome è la mia scelta), ma mancano ancora troppe cose: nessuna finestra immediata (questo rende js il debug molto meglio al momento), niente orologi.
Politica e possibilità di fuga : alcuni sostengono che Apple, MS e Firefox non forniranno mai VM Dart. Bene, non ne sono così sicuro, ma almeno per Apple questo sembra al momento molto sicuro. Per gli altri è più probabile del contrario. Quindi nessun problema, possiamo convertire Dart in JavaScript. Il modo in cui funziona questa integrazione è davvero eccezionale, Dart mantiene uno stub js che mantiene il codice js collegato al Dart Editor, quindi print()
un'istruzione appare ancora in Dart Editor, interessante. Ma ecco che arriva il ma: l'impronta di tale codice convertito è alta. 150 kB circa (prima della minificazione). Non ho scavato troppo nelle dimensioni esatte, quindi non mi inchiodare su questo.
Maturità linguistica . A parte i problemi troppo seri con Dart Editor che mi appare in faccia 3 volte al minuto, ho anche trovato inaccettabile che ogni fonte di codice Dart che trovi utilizza un Dart diverso. La lingua cambia ogni giorno. Hai trovato un post di 5 settimane fa? È obsoleto. Provi gli esempi dal tutorial di Google? Almeno 1 campione non viene compilato da quando un'API è stata modificata. Anche le cose banali, come collegare un evento a un elemento DOM, sono in buone condizioni .
L'integrazione con le librerie js esistenti è un po 'complicata. 2 VM devono comunicare qui, è complicato.
In conclusione, non puoi usare seriamente Dart da oggi e tuffarti non è troppo divertente a causa di 1 e 3. Entrambi i punti si dissolveranno nel tempo. Circa il punto 2, Google ha pubblicato alcuni giorni fa benchmark delle prestazioni dimostrando che i loro j compilati sono migliori dei j scritti a mano. I miei complimenti, ottimo lavoro. Il tempo di caricamento potrebbe essere ancora indietro a causa del problema dell'impronta, come detto. Tuttavia, se il codice footprint viene utilizzato da molti siti, potrebbe essere disponibile anche nella cache e voilà, scomparendo.
Quindi: considero Dart un grande progetto, usarlo al momento comporta una buona porzione di rischio imprevedibile e ci vorrà quest'anno per portarlo a un buon livello stabile.
Dattiloscritto
La valutazione di TypeScript è molto semplice, richiede 1 o 2 ore e sai tutto. Leggendo il documento sulle specifiche della lingua e rivelando un breve libro (rivelato da TypeScript), sapevo tutto e ho iniziato a programmare. Sono stato quindi sorpreso di scoprire che le aggiunte di TypeScript a JavaScript soddisfano ogni esigenza seria che ho avuto per migliorare la mia programmazione client . Ecco i punti salienti:
Interfacce . L'incapsulamento e le interfacce mi consentono di strutturare facilmente il mio codice. Perfetto!
Stato classe . TypeScript consente di esprimere lo stato che le istanze di una classe portano esplicitamente, o meglio lo impone. Questo è un grande passo migliore rispetto a js o caffè.
this
chiamare la follia mitigata . All'interno delle funzioni freccia, TypeScript rende il this
puntatore come qualsiasi cittadino che si comporta normalmente.
Editor, Intellisense . TypeScript viene fornito con il 100% di intellisense perfettamente perfetto che reagisce nell'intervallo di micro o millisecondi utilizzato da Visual Studio durante la programmazione di C #. Esistono anche intestazioni TypeScript per tutte le importanti librerie js . Ottimo, fantastico.
Esperienza e rischio . L'uso di TypeScript non comporta alcun rischio, il linguaggio è chiaramente definito, perfettamente stabile, è solo js con zucchero, niente di imprevedibile.
In realtà, questi miglioramenti mi danno tutto ciò di cui avevo bisogno. L'unica cosa che vorrei vedere in futuro sono le raccolte generiche. Ma quelle sono noccioline.
E le prestazioni? Mentre mi considero un maniaco delle prestazioni, non credo che ci sia alcun progetto che possa fare la scelta della tecnologia in base alle prestazioni. Entrambi sono nella js liga.
Se sei interessato al futuro della programmazione web, entrambi sono grandi sforzi, TypeScript è molto più pragmatico e utilizzabile ora, Dart è un progetto di laboratorio molto interessante che sarà utilizzabile una volta che saranno disponibili editor e debugger maturi e l'ambito dei progetti realizzabili con dipenderà dalla politica.
In ogni caso, i 3 giorni di valutazione sono stati per lo più divertenti e ho imparato molto, se trovi il tempo, ci vuole 1 giorno per Dart e 2 ore per TypeScript per esprimere la tua opinione. Provalo.
Aggiornamento ottobre 2014
È passato un po 'di tempo ed ex post sembra che l'ipotesi che Typescript sia la strada sicura e stabile da percorrere era assolutamente giusta. Ho appena trovato un'affermazione (molto) importante su Typescript, Dart e Closure:
Sono stato interessato alla sfida della programmazione Web in generale per un bel po 'di tempo. Credo che Google Closure sia attualmente l'opzione migliore per lo sviluppo di JavaScript / Web su larga scala, ma che alla fine verrà sostituito da qualcosa di meno prolisso. Sebbene Dart mostri notevoli promesse, sono ancora sgomento per le dimensioni del JavaScript che genera. In confronto, se TypeScript può essere tradotto direttamente in JavaScript che può essere compilato utilizzando la modalità avanzata del compilatore di chiusura, allora possiamo avere tutti i vantaggi di JavaScript ottimizzato da Chiusura senza la verbosità. Inoltre, poiché TypeScript è un superset di JavaScript, credo che le sue estensioni di sintassi abbiano la possibilità di trasformarlo nello standard ECMAScript a un certo punto,
http://blog.bolinfest.com/2013/01/generating-google-closure-javascript.html
Michael Bolin è da molto tempo (ex) google (ex) eroe front-end fb, coinvolto anche nella chiusura di google (ottieni il suo libro sulla chiusura).
Google Traceur
L'approccio di Google a vivere ECMA Script 6 oggi è il suo progetto Traceur:
https://github.com/google/traceur-compiler
Rispetto a Typescript, il supporto degli strumenti è presumibilmente molto indietro rispetto ad oggi. Il lato positivo, tuttavia, è molto più veloce nell'adottare futuri futuri miglioramenti linguistici come iteratori o comprensioni.
Facebook Flow, Google AtScript
fornire funzionalità simili a TypeScript.
"Ci si potrebbe chiedere che cosa ci siano con queste diverse soluzioni di verifica del tipo JavaScript e cosa fare al riguardo. Una buona notizia è che Microsoft, Facebook e Google stanno collaborando su queste, secondo Jonathan Turner di Microsoft:
Il team di TypeScript sta lavorando con entrambi i team Flow e AtScript per garantire che le risorse che sono già state create dalla comunità di digitazione JavaScript possano essere utilizzate in questi strumenti. Ci sono molti progetti che possono imparare gli uni dagli altri e non vediamo l'ora di lavorare insieme per il futuro e creare i migliori strumenti possibili per la comunità JavaScript. A lungo termine, lavoreremo anche per piegare le migliori caratteristiche di questi strumenti in ECMAScript, lo standard dietro JavaScript. "
articolo infoq sul flusso fb