Belajar Scala - Scala 3.8 & Fitur Terbaru
Episode 20 of 23

Belajar Scala - Scala 3.8 & Fitur Terbaru

Mengintip fitur-fitur Scala 3.8: baseline JDK 17, Better Fors (SIP-62) yang stabil, runtimeChecked (SIP-57), REPL yang dipisah, plus eksperimen strict-equality dan flexible varargs — dan memahami strategi rilis LTS versus Next beserta perbedaan 3.3.8 dan 3.8.x.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Selama 19 episode, kalian memakai Scala 3.8.4 tanpa terlalu memikirkannya. Sekarang saatnya memutar waktu: episode ini membedah apa yang baru di Scala 3.8 dan, lebih penting, mengapa strategi rilis Scala dipecah menjadi LTS dan Next. Memahami ini membuat kalian memilih versi yang tepat untuk library, aplikasi, dan perusahaan.

Mengapa penting? Karena keputusan versi bukan sekadar "pakai yang terbaru". Di dunia produksi, versi menentukan kompatibilitas JDK, ketersediaan library, dan kapan fitur berhenti berubah. Episode ini memberi kalian peta untuk membuat keputusan itu dengan percaya diri.

Jalur Rilis: LTS vs Next

Sejak Scala 3.3 (2023), rilis Scala dibagi dua jalur:

JalurContoh versiKarakteristikUntuk siapa
LTS3.3.x (terkini 3.3.8)Stabil, kompatibilitas ketat, mendukung JDK 8+Library, perusahaan, produksi konservatif
Next3.8.x (terkini 3.8.4)Fitur terbaru, rilis cepatAplikasi yang mau inovasi

Scala 3.3.8 (rilis 10 Juni 2026) adalah LTS dengan dukungan JDK 8 — penting untuk library yang harus berjalan di lingkungan tua. Scala 3.8.4 (rilis 5 Juni 2026) adalah Next terkini dengan baseline JDK 17. Next LTS berikutnya adalah 3.9 (JDK 17) yang sedang dalam RC pada pertengahan 2026.

Note

Aturan praktis: tulis library → rilis ke LTS (konsumen library butuh stabilitas maksimal). Bangun aplikasi → boleh Next untuk fitur baru, dengan syarat siap mengikuti upgrade kecil. Series ini memakai 3.8.4 untuk belajar fitur modern, tetapi konsep yang kalian pelajari 100% berlaku di 3.3.8.

Scala 3.8: Baseline JDK 17

Perubahan paling mendasar di Scala 3.8: standar library dikompilasi dengan Scala 3 dan baseline runtime naik ke JDK 17. Alasan praktisnya: JDK 17 adalah LTS pertama dengan penghapusan sun.misc.Unsafe yang direncanakan (JEP 471), sehingga compiler Scala harus disesuaikan. Dampaknya bagi kalian:

Cek versi yang kalian pakai
scala -version
java -version

java -version harus 17 atau lebih baru — seperti yang kita atur di episode 0. Jika project memakai JDK 8, kalian harus di jalur LTS 3.3.x.

Better Fors (SIP-62): Stabil

Better Fors adalah penyempurnaan for-comprehension — fitur yang paling sering dipakai developer Scala. SIP-62 menambahkan bentuk desugaring yang lebih bersih untuk komposisi:

For yang sudah ada
for
  x <- Option(3)
  y <- Option(4)
yield x * y   // Some(12)

Better Fors di 3.8 menstabilkan aturan sehingga transformasi for menghasilkan kode yang lebih dapat diprediksi, dan membuka komposisi pattern lebih ekspresif:

Pattern dengan Better Fors
case class Point(x: Int, y: Int)
 
val points = List(Point(1, 2), Point(3, 4))
 
val sumX = for
  Point(x, _) <- points
yield x
// List(1, 3)

Stabil berarti: perilaku ini sudah final dan aman dipakai di produksi tanpa flag eksperimental.

runtimeChecked (SIP-57)

runtimeChecked (atau "safe runtime checks") adalah mekanisme untuk menghilangkan pembatasan performa yang selama ini menghalangi optimasi JVM. Simplifikasinya: library bisa memilih untuk mematikan pemeriksaan runtime tertentu yang mencegah JVM melakukan optimisasi, sehingga kode Scala 3.8 bisa lebih cepat dengan semantik yang sama.

Konsep runtimeChecked
// sebelum: ada pembatasan yang menghalangi optimasi
// sesudah: compiler tahu kapan check bisa dilewati dengan aman

Ini perubahan infrastruktur compiler yang tidak terlihat di sintaks, tetapi berpengaruh pada kinerja library yang dioptimalkan — alasan lain versi 3.8 penting bagi aplikasi sensitif performa (kita lanjut di episode 21).

REPL Dipisah: scala3-repl

Sejak 3.8, REPL dipisah dari distribusi inti menjadi artifact scala3-repl. Tujuannya: kompilasi inti (scalac + runtime) menjadi lebih ringan dan cepat, sementara REPL dikembangkan lebih independen. Dampaknya bagi kalian:

Install REPL bila terpisah
cs install scala3-repl
scala

Jika scala tidak membuka REPL setelah upgrade ke 3.8, kemungkinan besar scala3-repl belum terinstall — seperti yang kita singgung di episode 3.

Eksperimen: Sekilas Fitur yang Sedang Dikembangkan

Beberapa fitur masih eksperimental (perlu flag) dan akan dinilai untuk rilis mendatang:

FiturSIPIde inti
strict-equalitySIP-67Menolak == antar tipe yang tidak berhubungan — mencegah perbandingan tak masuk akal
flexible varargsSIP-70Penanganan varargs yang lebih fleksibel dan aman
into conversionsSIP-71Konversi tipe eksplisit yang terkendali saat memanggil API

Contoh singkat strict-equality:

strict-equality (eksperimen)
// dengan flag -language:strictEquality
// val result = 42 == "empat puluh dua"   // ditolak: Int vs String

Fitur-fitur ini berubah sampai stabil; untuk produksi, tunggu versi stabil dan dokumentasi resmi — jangan mengandalkan perilaku eksperimental di aplikasi penting.

Memilih Versi untuk Project Kalian

Peta keputusan sederhana:

100%

Satu hal penting dari catatan rilis: 3.8.1+ disarankan — 3.8.0 punya runtime regression yang diperbaiki di 3.8.1. Untuk versi apa pun, selalu verifikasi:

Verifikasi versi aktual
scala -version
scalac -version

Common Pitfalls

  • Menganggap semua 3.x kompatibel — fitur stabil di 3.8 (Better Fors, runtimeChecked) tidak ada di 3.3 LTS; jangan memakai fitur baru di project LTS.
  • JDK 8 + Scala 3.8 — error runtime yang membingungkan; kembali ke 3.3.x atau upgrade JDK.
  • Fitur eksperimental di produksi — strict-equality dan kawan-kawan masih berubah; tunggu stabil.
  • Upgrade langsung ke 3.8.0 — 3.8.0 punya regression; pakai 3.8.1+.

Penutup

Inti yang harus dibawa pulang:

  • Rilis Scala dipecah menjadi LTS (3.3.x) dan Next (3.8.x) — pilih sesuai kebutuhan stabilitas.
  • Scala 3.8 menetapkan baseline JDK 17; stdlib dikompilasi dengan Scala 3.
  • Better Fors (SIP-62) stabil — for lebih prediktabel; runtimeChecked (SIP-57) membuka optimasi kinerja.
  • REPL dipisah menjadi scala3-repl; install terpisah jika scala tidak membukanya.
  • 3.8.1+ disarankan (3.8.0 punya regression); fitur eksperimental tunggu stabil.

Di episode 21 selanjutnya, kita memanfaatkan semua pemahaman ini untuk kecepatan: performance dan optimization — menghindari alokasi berlebihan, Array vs collections, tuning JVM, serta profiling dengan JFR, async-profiler, dan JMH. Sampai jumpa di episode 21!

Belajar Scala - Scala 3.8 & Fitur Terbaru | Belajar Scala