Microsoft baru-baru ini meluncurkan Typecript, bahasa pemrograman baru yang mirip dengan JavaScript. Beberapa waktu lalu, saya mendengar tentang Dart, bahasa pemrograman baru yang dibuat oleh Google untuk menyelesaikan masalah yang berkaitan dengan Javascript seperti kinerja, skalabilitas, dll.
Tujuan dari kedua bahasa baru itu tampak sama bagi saya .. Bagaimana menurut Anda?
Apakah tujuan bahasanya sama?
Apa perbedaan nyata tentang mereka?
dart
typescript
margabit
sumber
sumber
Jawaban:
Mengutip Bob Nystrom :
Juga, ia menulis di http://www.reddit.com/r/programming/comments/10rkd9/welcome_to_typescript/c6g37xd :
sumber
Sementara pertanyaannya adalah "Apakah tujuan bahasa sama?", Pertanyaan sebenarnya adalah: "Bagaimana kita bisa membuat pemrograman web lebih baik dari tempat kita sekarang?" .
Kedua proyek mencoba melakukan pertimbangan ini
bahasa pemrograman (TypeScript membuat langkah kecil tapi sangat bersih, Dart membuat langkah yang lebih revolusioner yang masih bergerak)
interoperabilitas dengan kode js yang ada (0 transisi dalam TypeScript yang mengkompilasi ke js, rumit di Dart, karena 2 VM berbicara satu sama lain)
praktik rekayasa perangkat lunak (khusus Dart, komponen web, dan bayangan)
Selama 3 hari terakhir saya menyelam jauh ke dalam Dart dan kemudian ke TypeScript. Basis kode CoffeeScript saya pergi ke 2000-an baris kode, terlalu banyak untuk ditangani dengan CoffeeScript indah tapi terlalu lembut. Masalah yang saya hadapi adalah bahwa CoffeeScript tidak memiliki fitur yang dirancang bahasa untuk pemrograman skala menengah hingga besar: antarmuka, modul, jenis keamanan. Tapi ada satu masalah yang jauh lebih serius dengan kopi dan js: Keanehan "pointer" ini mempengaruhi kewarasan saya dan CoffeeScript tidak membantu apa pun di sini.
Jadi di sini hasil saya setelah 3 hari evaluasi dan penggunaan:
Anak panah
Pergi melalui tutorial, membaca 1 buku, membaca buku ke-2 dan mencoba demo. Saya pikir, Dart itu adalah masa depan . Lalu saya mencoba memigrasi aplikasi saya ke Dart. Itulah saat antusiasme saya turun dari 100 menjadi 10. Inilah sebabnya:
The Dart Editor adalah satu-satunya cara untuk program Dart. Sementara plugin untuk Sublime Text ada, mereka tidak menyediakan fitur seperti intellisense, penyelesaian kode (koreksi saya jika saya salah). Namun demikian, Dart Editor dalam kualitas pra alpha. Meskipun itu mendukung hal-hal ajaib supercool seperti memperbarui halaman web ketika Anda mengedit file CSS (! Sangat keren) itu hang atau crash beberapa kali dalam satu menit. Jadi Anda mengetik 5 huruf dan 2 kali Anda harus menunggu 2 detik atau 15 detik antara mengetik. Dan saya punya proyek dengan beberapa baris kode, jadi tidak ingin menunggu apa yang terjadi ketika 1000s baris masuk. Pindah file dari satu folder ke yang lain di dalam Dart Editor, crash. Debuggingdengan Dart Editor pada pandangan pertama lebih baik daripada semua alat debugging js yang saya tahu (chrome adalah pilihan saya), tetapi masih ada terlalu banyak hal yang hilang: Tidak ada jendela langsung (ini membuat js debugging jauh lebih baik saat ini), tidak ada jam tangan.
Kemungkinan Politik dan Pelarian : Ada yang mengatakan bahwa Apple, MS dan Firefox tidak akan pernah menyediakan Dart VMs. Yah, saya tidak begitu yakin, tetapi setidaknya untuk Apple ini muncul saat ini sangat pasti. Untuk yang lain lebih mungkin daripada sebaliknya. Jadi tidak masalah, kami dapat mengonversi Dart ke JavaScript. Cara kerja integrasi ini benar-benar hebat, Dart mempertahankan js stub yang membuat kode js terhubung ke Dart Editor, jadi
print()
pernyataan masih muncul di Dart Editor, keren. Tapi inilah, tetapi: jejak kode yang dikonversi tersebut tinggi. 150kB atau lebih (sebelum minifikasi). Saya tidak menggali terlalu banyak ke ukuran yang tepat, jadi jangan memaku saya pada ini.Kematangan Bahasa . Selain masalah yang terlalu serius dengan Dart Editor muncul di wajah saya 3 kali per menit, saya juga merasa tidak dapat diterima bahwa setiap sumber tentang kode Dart yang Anda temukan menggunakan Dart yang berbeda. Bahasa berubah setiap hari. Anda menemukan pos dari 5 minggu yang lalu? Itu sudah usang. Anda mencoba sampel dari tutorial Google? Setidaknya 1 sampel tidak dikompilasi sejak API berubah. Bahkan hal-hal biasa, seperti menempelkan acara ke elemen DOM berada dalam langkah yang baik .
Integrasi dengan perpustakaan js yang ada agak sedikit terlibat. 2 VM perlu berkomunikasi di sini, ini rumit.
Sebagai kesimpulan, Anda tidak dapat secara serius menggunakan Dart pada hari ini, dan menyelam ke dalamnya tidak terlalu menyenangkan karena 1 dan 3. Kedua poin akan mengecewakan seiring waktu. Tentang poin 2, Google menerbitkan tolok ukur kinerja beberapa hari yang lalu yang menunjukkan bahwa js yang dikompilasi lebih baik daripada js yang ditulis tangan. Salamku, pekerjaan bagus. Waktu memuat mungkin masih ketinggalan karena masalah jejak seperti yang dikatakan. Namun, jika kode jejak digunakan oleh banyak banyak situs, mungkin tersedia cache dan voila, menghilang juga.
Jadi: Saya menganggap Dart proyek yang hebat, menggunakannya saat ini membawa sebagian besar risiko yang tidak terduga dan akan dibutuhkan tahun ini untuk mencapai tingkat stabil yang baik.
TypeScript
Mengevaluasi TypeScript sangat mudah, membutuhkan 1 atau 2 jam dan Anda tahu segalanya. Membaca dokumen spesifikasi bahasa dan buku pendek (TypeScript terungkap) mengungkapkan, saya tahu segalanya dan mulai pemrograman. Saya kemudian terkejut menemukan bahwa penambahan TypeScript ke JavaScript hanya memenuhi setiap kebutuhan serius yang saya miliki untuk meningkatkan pemrograman klien saya . Di sini yang utama:
Antarmuka . Enkapsulasi dan antarmuka memungkinkan saya untuk menyusun kode dengan mudah. Sempurna!
Negara kelas. . TypeScript memungkinkan untuk mengekspresikan keadaan yang instance kelas membawa secara eksplisit, atau lebih baik itu menegakkannya. Ini adalah langkah besar yang lebih baik dibandingkan dengan js atau kopi.
this
sebut kegilaan dikurangi . Di dalam fungsi panah, TypeScript membuatthis
pointer seperti warga yang berperilaku normal.Editor, Intellisense . TypeScript hadir dengan intellisense sempurna 100% teratas yang bereaksi dalam rentang mikro atau milidetik seperti yang digunakan dari Visual Studio saat pemrograman C #. Header TypeScript untuk semua perpustakaan js penting juga ada . Bagus, bagus, bagus.
Pengalaman dan Risiko . Menggunakan TypeScript membawa risiko nol, bahasa didefinisikan dengan jelas, sangat stabil, itu hanya js dengan gula, tidak ada yang tidak terduga.
Sebenarnya, peningkatan ini memberi saya semua yang saya butuhkan. Satu-satunya hal yang ingin saya lihat di masa depan adalah koleksi generik. Tapi itu kacang.
Lalu bagaimana dengan kinerja? Meskipun saya menganggap diri saya sebagai orang aneh kinerja, saya tidak percaya bahwa ada proyek yang akan membuat pilihan teknologi di sini berdasarkan kinerja. Keduanya di liga js.
Jika Anda tertarik pada pemrograman web di masa depan, keduanya merupakan upaya yang hebat, TypeScript jauh lebih pragmatis dan dapat digunakan sekarang, Dart adalah proyek lab yang sangat menarik yang akan dapat digunakan setelah editor dan pengingkar dewasa tersedia dan ruang lingkup proyek dapat dilakukan dengan itu akan tergantung pada politik.
Bagaimanapun 3 hari eval sebagian besar menyenangkan dan saya belajar banyak, jika Anda menemukan waktu, diperlukan 1 hari untuk Dart dan 2 jam untuk TypeScript untuk membuat pendapat Anda sendiri. Cobalah.
Perbarui Oktober 2014
Sudah lama dan ex post muncul asumsi bahwa Typecript adalah rute stabil yang aman untuk pergi adalah benar. Saya baru saja menemukan pernyataan (sangat) menonjol tentang naskah, Dart dan Penutupan:
Saya telah tertarik pada tantangan pemrograman Web dalam skala besar selama beberapa waktu. Saya percaya bahwa Google Closure saat ini masih merupakan pilihan terbaik untuk pengembangan JavaScript / Web skala besar, tetapi pada akhirnya akan digantikan oleh sesuatu yang kurang bertele-tele. Meskipun Dart menunjukkan janji yang cukup besar, saya masih kecewa dengan ukuran JavaScript yang dihasilkannya. Dengan perbandingan, jika TypeScript dapat langsung diterjemahkan ke JavaScript yang dapat dikompilasi menggunakan mode lanjutan dari Closure Compiler, maka kita dapat memiliki semua manfaat JavaScript yang dioptimalkan dari Penutupan tanpa verbosity. Terlebih lagi, karena TypeScript adalah superset dari JavaScript, saya percaya bahwa ekstensi sintaksisnya memiliki peluang untuk membuatnya menjadi standar ECMAScript pada beberapa titik,
http://blog.bolinfest.com/2013/01/generating-google-closure-javascript.html
Michael Bolin adalah pahlawan google front end yang lama (ex) fb, juga terlibat dalam penutupan google (dapatkan bukunya tentang Penutupan).
Google Traceur
Appraoch Google untuk menjalankan ECMA Script 6 hari ini adalah proyek Traceurnya: https://github.com/google/traceur-compiler
Dibandingkan dengan Typescript, dukungan tooling mungkin jauh di belakang hingga saat ini. Namun pada sisi baiknya, jauh lebih cepat dalam mengadopsi peningkatan bahasa masa depan yang terlalu keren seperti iterator atau pemahaman.
Facebook Flow, Google AtScript
menyediakan fitur serupa dengan TypeScript.
"Orang mungkin bertanya-tanya ada apa dengan solusi pengecekan tipe JavaScript yang berbeda ini dan apa yang harus dilakukan tentang hal itu. Sebuah kabar baik adalah bahwa Microsoft, Facebook dan Google berkolaborasi dalam hal ini, menurut Jonathan Turner dari Microsoft:
Tim TypeScript bekerja dengan tim Flow dan AtScript untuk membantu memastikan bahwa sumber daya yang telah dibuat oleh komunitas pengetikan JavaScript dapat digunakan di seluruh alat ini. Ada banyak proyek yang dapat dipelajari dari satu sama lain, dan kami berharap dapat bekerja bersama untuk maju dan menciptakan alat terbaik yang kami bisa untuk komunitas JavaScript. Dalam jangka panjang, kami juga akan berupaya untuk melipat fitur terbaik dari alat-alat ini ke dalam ECMAScript, standar di balik JavaScript. "
artikel infoq tentang aliran fb
sumber
this
konteks, karena Anda masih harus mengikat fungsi panggilan balik yang dideklarasikan di dalam metode denganthis
konteks metode untuk mengakses atribut kelas. Bagaimana itu "memperbaiki" segalanya?Mengutip Scott Hanselman:
Dari Mengapa TypeScript menjadi jawaban untuk apa pun?
sumber
var x = {}; x.foo = 5; //Doesn't work in typescript
danvar e = window.event ? window.event : e; //Doesn't work in typescript
Contoh di atas akan gagal membuat compiler TypeScript. Apakah saya melewatkan sesuatu? Saya tidak bisa begitu saja "memasukkan" JavaScript saya dan menggunakan tipe ketika saya menginginkannya. Saya harus belajar beberapa sintaks baru dan struktur semuanya dengan tipe.var x = {}; x['foo'] = 5;
dan ini tidak jugavar y:any = {}; y.foo = 5;
, tapi aku sedikit terkejut menemukan kau benar tentang hal ini - jenis dirasakan{}
adalah{}
bukanany
. Bisa jadi masalah tipe inferensi. Saya memposting masalah di sini - kita akan melihat bagaimana mereka merespons.Harus berpadu diskusi ini dengan temuan saya sendiri akhir-akhir ini.
1: TypeScript
MS telah mengambil pendekatan yang bagus dalam kenyataan bahwa Anda dapat dengan mudah masuk dan keluar dari TS dan JS. Kami terutama menggunakan AngularJS untuk pengembangan kami dan telah menemukan sementara tidak ada banyak dokumentasi untuk mengkonversi Angular ke TypeScript. Merupakan tambahan yang bagus untuk menggabungkan TypeScript ke dalam alur kerja Dev kami.
2: Dart
Dart adalah sedikit langkah ironis bagi Google. Mungkin mereka tidak ingat activeX dan semua mimpi buruk di sekitar mencoba untuk mendapatkan aplikasi yang bekerja dalam apa pun kecuali IE 5 atau IE 6 yang ditakuti hari itu. Butuh MS bertahun-tahun untuk pulih dari masa itu.
Dart sebagai bahasa "konseptual" tampaknya mencoba untuk menggabungkan beberapa fitur OOP yang bagus. Penjelasan dll adalah pemikiran yang bagus untuk Javascript.
Masalahnya, sulit membayangkan bandwidth yang cukup untuk membuat editor baru, bahasa baru, vm baru di browser, plugin untuk IDE lain, kompiler untuk mengkonversi ke javascript (tanpa ukuran beberapa meg), mengkonversi atau membuat perpustakaan panah baru untuk ganti ribuan perpustakaan js saat ini, minta seseorang memutuskan polimer atau arahan, konversikan situs dartlang untuk menggunakan panah, ini adalah apa yang bisa saya pikirkan dari atas kepala saya.
Konsep mencoba menggunakan Dart dalam hal apa pun kecuali aplikasi sepele saat ini menakutkan.
Di atas semua ES6 ini tidak jauh. ES6 menghadirkan banyak fitur yang coba diperbaiki Dart yang ada di ES5. Apa yang akan menjadi proposisi nilai begitu ES6 mencapai jalanan? Setidaknya pada saat ini satu-satunya perubahan yang harus Anda lakukan dalam TypeScript setelah ES6 keluar adalah mungkin memilih kompilasi yang berbeda untuk ditargetkan.
Hanya untuk menjelaskan bahwa saya adalah orang yang pro MS. MS membuat beberapa produk yang layak dan telah membuat langkah besar untuk memperbaiki kesalahan masa lalu dengan komunitas OSS. Saya masih jarang menggunakan apa pun selain TypeScript dari MS.
sumber