TypeScript bukan lagi TypeScript...

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

Transcript

00:00:00TypeScript baru saja mengeluarkan calon rilis untuk versi 7 dan ini akan menjadi versi di mana
00:00:04TypeScript bukanlah TypeScript. Jika Anda ketinggalan berita, mereka telah mengerjakan penulisan ulang
00:00:07kompiler TypeScript dari TypeScript itu sendiri ke Go dan kabarnya hasilnya 10 kali lebih cepat.
00:00:12Mereka berharap dapat merilis TypeScript 7 bulan depan, jadi mari kita bahas apa saja yang sebenarnya berubah,
00:00:17seberapa cepat performanya, dan apakah ada perubahan drastis yang perlu Anda ketahui sebelum menginstalnya.
00:00:26Jadi, jika Anda melewatkan berita tentang mereka melakukan porting ke Go, mereka sebenarnya memulainya sekitar setahun yang lalu
00:00:29dan intinya adalah mereka menyadari bahwa JavaScript tidak pernah dibuat untuk pekerjaan berat yang terikat pada CPU
00:00:34yang dilakukan oleh pengecek tipe (type checker), jadi mereka mulai menulisnya ulang ke dalam Go dengan kesuksesan awal yang besar. Mereka sebenarnya memulainya dengan
00:00:39pada dasarnya mem-porting implementasi TypeScript yang sudah ada, baris demi baris, sehingga logika pengecekan tipenya
00:00:44semuanya secara struktural sama dan memiliki perilaku yang sama, dan Anda bahkan bisa melihat beberapa
00:00:48fungsi yang hampir identik selain bahasanya. Saya juga cukup yakin bahwa ini terjadi sebelum
00:00:52Anda bisa langsung meminta Claude untuk memigrasikan basis kode Anda ke bahasa apa pun yang Anda inginkan
00:00:56saya melihat Anda, Bun. Hasil dari porting ini benar-benar terbukti. Di sini saya memiliki
00:01:00repo Playwright dan jika saya melakukan pemeriksaan tipe menggunakan versi lama TypeScript di sini, kita bisa melihat bahwa ini
00:01:04memakan waktu sekitar enam detik untuk selesai dan telah memeriksa 1400 file serta setengah juta baris
00:01:08kode. Jika sekarang saya beralih ke calon rilis tanpa mengubah apa pun kecuali perintah ini
00:01:12totalnya memakan waktu 0,87 detik. Itu peningkatan yang serius. Ia juga menemukan jumlah kesalahan yang sama persis,
00:01:18kesalahan yang sama, ia memeriksa file yang sama dan semua baris kode yang sama, jadi cara kerjanya persis sama
00:01:23seperti TypeScript 6. Kode asli Go memang jauh lebih cepat daripada JavaScript untuk
00:01:27tugas seperti ini, tetapi ini juga memungkinkan mereka menggunakan paralelisme memori bersama, sehingga di mana kompiler JavaScript
00:01:32bersifat single-threaded, Go benar-benar dapat menyebarkan pemeriksaan tipe tersebut ke beberapa inti prosesor sekaligus. Di TypeScript
00:01:377, Anda sebenarnya bisa memaksanya menjadi single-threaded dengan flag, mungkin Anda sedang melakukan debugging
00:01:41atau Anda menjalankannya pada mesin dengan sumber daya terbatas. Dan jika saya melakukan ini pada basis kode Playwright
00:01:46di sini dengan TypeScript 7, kita bisa melihat bahwa saat single-threaded, ini memakan waktu sekitar dua detik, yang mana
00:01:50masih tiga kali lebih cepat dari sebelumnya. Berbicara tentang menjalankan secara paralel, mereka juga mengekspos
00:01:54flag checkers baru yang memungkinkan Anda mengatur berapa banyak pekerja pengecek tipe yang dapat berjalan secara paralel,
00:01:58dan ini secara default adalah empat. Meningkatkan angka ini bisa mempercepat build pada basis kode yang lebih besar jika Anda
00:02:03memiliki banyak inti CPU, tetapi ini akan mengorbankan penggunaan memori ekstra. Jika saya mengatur checkers
00:02:08ke 8 di repo Playwright ini, yang merupakan dua kali lipat dari default, itu sebenarnya memangkas sepertiga waktu lagi.
00:02:12Ada juga flag builders baru untuk memparalelkan build referensi proyek, alias membangun
00:02:16beberapa proyek sekaligus. Flag ini memungkinkan Anda mengontrol jumlah pembangun (builder) paralel yang dapat
00:02:20berjalan sekaligus. Perlu dicatat bahwa jika Anda menggabungkan ini dengan checkers yang baru saja kita lihat, katakanlah
00:02:24Anda memiliki empat dari masing-masing, itu berarti Anda bisa menjalankan hingga 16 pengecek tipe sekaligus. Sekarang selain
00:02:29perubahan kode asli dan paralelisme, penulisan ulang besar lainnya di TypeScript 7 adalah watch mode-nya.
00:02:34Saat mereka melakukan porting ke Go, ini sebenarnya sedikit lebih rumit karena pustaka standar tidak menyediakan
00:02:38API pemantauan file bawaan, dan pustaka pihak ketiga yang mereka coba memiliki masalah dengan hal-hal seperti
00:02:43stabilitas, performa, dan dukungan lintas platform, jadi tim tersebut melihat file watcher milik bundler Parcel
00:02:47yang sebenarnya digunakan Microsoft di VS Code, tetapi karena itu dalam C++, mereka juga
00:02:53harus mem-port bagian yang mereka butuhkan ke dalam Go juga. Kabar baiknya adalah mereka berhasil
00:02:57melakukan semuanya dan tampaknya bekerja dengan sangat lancar dan lebih baik dari sebelumnya. Selanjutnya, karena ini adalah
00:03:01pembaruan versi utama, Anda mungkin mengharapkan banyak perubahan drastis, apalagi karena ini adalah penulisan ulang
00:03:05yang besar, tetapi saya rasa sebenarnya tidak ada jika Anda meningkatkan dari TypeScript 6 ke 7. Jika
00:03:10Anda ingin beralih dari 5 ke 7, akan ada cukup banyak perubahan, jadi tampaknya mereka menyarankan agar Anda
00:03:14naik ke 6 dulu, pastikan semuanya berjalan lancar, baru kemudian pembaruan versi ke 7 seharusnya tidak menjadi masalah. Beberapa
00:03:19perubahan besar di TypeScript 6 adalah menghapus target ES5, menghapus baseUrl, dan mendeprekasi sistem modul
00:03:24AMD, UMD, dan SystemJS. Mereka juga membuat strict true secara default, mereka membuat modul default ke ESNext,
00:03:31dan target default ke versi ECMAScript stabil saat ini yang segera mendahului ESNext. Itu
00:03:36pada dasarnya tentang meninggalkan masa lalu dan memodernisasi TypeScript, yang sangat saya sukai karena
00:03:40terkadang mencoba mendukung proyek lama di setiap versi yang Anda buat dapat sangat memperlambat
00:03:45kemajuan sebuah alat. Melihat sisa postingan blog ini, sebenarnya tampaknya satu-satunya
00:03:49fitur atau perubahan baru yang sebenarnya menyangkut bahasa TypeScript itu sendiri adalah bahwa tipe literal template
00:03:53sekarang mempertahankan titik kode Unicode. Pada dasarnya sebelum TypeScript 7, TypeScript memisahkan pada unit kode UTF-16
00:03:59sehingga akhirnya membelah emoji menjadi dua dan Anda mendapatkan tipe yang aneh untuk kepala
00:04:04dan ekor di sini. Namun, di TypeScript 7, ia sebenarnya memisahkan pada titik kode utuh, yaitu karakter lengkap,
00:04:09sehingga sekarang emoji dipertahankan dan pemisahannya seperti yang Anda harapkan. Saya
00:04:13jujur akan sangat terkesan jika ada di antara Anda yang pernah mengalami ini selama menggunakan TypeScript.
00:04:18Secara keseluruhan, perubahan ini akan membuat apa pun yang menggunakan TypeScript terasa jauh lebih cepat, seperti TypeScript
00:04:22di editor Anda, terutama untuk proyek besar. Rilis stabil diharapkan dalam waktu sekitar sebulan,
00:04:27tetapi API terprogram yang stabil, yaitu hal yang digunakan penulis alat untuk membangun di atas kompiler,
00:04:32akan hadir di versi 7.1. Karena ini, ada juga paket kompatibilitas sehingga Anda dapat menjalankan
00:04:36TypeScript 6 dan 7 secara berdampingan tanpa mengalami konflik. Beri tahu saya pendapat Anda tentang semua
00:04:41ini dan saya penasaran apakah Anda pernah merasa TypeScript terasa lambat. Beri tahu saya di
00:04:44kolom komentar. Sambil Anda di sana, jangan lupa subscribe, dan seperti biasa, sampai jumpa di video berikutnya.

Key Takeaway

TypeScript 7 meningkatkan kecepatan kompilasi secara drastis melalui penulisan ulang kompiler ke bahasa Go yang mendukung pemrosesan paralel, tanpa mengubah logika pengecekan tipe yang ada.

Highlights

  • TypeScript 7 ditulis ulang menggunakan bahasa pemrograman Go, menghasilkan peningkatan performa hingga 10 kali lebih cepat.

  • Pengecekan tipe pada basis kode Playwright turun dari 6 detik pada versi lama menjadi 0,87 detik pada versi baru.

  • Implementasi Go memungkinkan penggunaan paralelisme memori bersama, berbeda dengan arsitektur single-threaded pada JavaScript.

  • Bendera (flag) checkers baru memungkinkan pengaturan jumlah pekerja paralel secara manual, dengan nilai default sebanyak empat.

  • Tipe literal template sekarang mempertahankan titik kode Unicode, mencegah pemisahan karakter emoji yang tidak diinginkan.

Timeline

Migrasi ke Go dan Peningkatan Performa

  • TypeScript 7 merupakan hasil porting kompiler dari JavaScript ke bahasa pemrograman Go.
  • Proses pengecekan tipe pada proyek besar seperti Playwright meningkat 7 kali lipat lebih cepat.
  • Logika pengecekan tipe tetap identik dengan versi sebelumnya meskipun bahasa implementasinya berbeda.

Keterbatasan JavaScript dalam menangani pekerjaan berat yang terikat pada CPU mendorong transisi ke Go. Arsitektur baru ini memungkinkan pemanfaatan multi-core melalui paralelisme memori bersama, sedangkan kompiler lama hanya bersifat single-threaded. Peningkatan performa terlihat nyata pada pengujian di basis kode Playwright yang berisi 1400 file dan 500.000 baris kode.

Konfigurasi Paralelisme dan Watch Mode

  • Flag checkers baru memberikan kendali atas jumlah pengecek tipe yang berjalan secara paralel.
  • Build referensi proyek kini dapat diparalelkan menggunakan flag builders.
  • Watch mode menggunakan teknologi file watcher dari Parcel yang telah di-porting ke Go.

Pengguna dapat mengoptimalkan build dengan mengatur jumlah pekerja (workers) sesuai dengan ketersediaan core CPU, dengan risiko penggunaan memori yang lebih tinggi. Watch mode baru memastikan stabilitas dan performa lintas platform yang lebih baik dibandingkan pustaka pihak ketiga sebelumnya. Implementasi ini menggabungkan bagian dari file watcher C++ milik Parcel yang disesuaikan ke dalam ekosistem Go.

Pembaruan Versi dan Perubahan Bahasa

  • Pembaruan dari TypeScript 6 ke 7 tidak memiliki perubahan drastis pada bahasa itu sendiri.
  • Transisi dari versi 5 disarankan melewati versi 6 terlebih dahulu untuk memastikan stabilitas.
  • Tipe literal template kini mendukung titik kode Unicode secara utuh.

TypeScript 6 telah melakukan pembersihan besar seperti menghapus target ES5 dan mendeprekasi sistem modul lama, yang mempermudah transisi ke versi 7. Satu-satunya perubahan signifikan pada bahasa TypeScript di versi 7 adalah penanganan karakter Unicode, di mana emoji kini tetap utuh dan tidak terbelah pada unit kode UTF-16. Paket kompatibilitas disediakan agar versi 6 dan 7 dapat berjalan berdampingan.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video