Sejarah Flutter & Dart #

Sejarah perkembangan teknologi perangkat lunak membuktikan bahwa alat pengembangan terbaik selalu lahir dari rasa frustrasi para insinyur terhadap alat yang sudah ada. Flutter dan Dart bukanlah pengecualian. Menelusuri sejarah perkembangan Flutter tidak hanya membantu kita memahami cara kerja framework ini hari ini, tetapi juga membantu kita memahami mengapa keputusan arsitektur tertentu diambil. Kita akan mengulas bagaimana bahasa pemrograman Dart bertransformasi dari sebuah bahasa web alternatif menjadi bahasa lintas platform modern, bagaimana proyek eksperimental bernama “Sky” lahir dari mesin browser Chrome, serta garis waktu rilis mayor yang membawa Flutter ke puncak popularitas di industri saat ini.


Lahirnya Bahasa Dart (2011): Mencari Penerus JavaScript #

Sebelum Flutter ada di benak siapa pun, Google telah mengembangkan bahasa pemrograman bernama Dart. Pada awal tahun 2010-an, aplikasi web skala besar milik Google seperti Gmail, Google Docs, dan Google Maps semakin kompleks dan sulit dikelola menggunakan JavaScript standar. Pada masa itu, JavaScript belum memiliki sistem kelas (class-based OOP), modul modular bawaan, atau dukungan type safety yang kuat (fitur-fitur ES6 baru distandardisasi beberapa tahun kemudian).

Para insinyur Google menghadapi masalah nyata terkait skalabilitas dan kinerja kode JavaScript ketika dikerjakan oleh ratusan developer dalam satu proyek besar. Untuk mengatasi hal ini, Google menugaskan Lars Bak (arsitek utama di balik mesin V8 JavaScript Google Chrome) dan Kasper Lund untuk merancang bahasa pemrograman baru.

Bahasa tersebut diberi nama Dart, yang diresmikan ke publik pada konferensi GOTO di Aarhus, Denmark, pada tanggal 10–12 Oktober 2011. Tujuan awal pembuatan Dart sangat spesifik:

  • Menjadi alternatif JavaScript untuk pengembangan web skala enterprise.
  • Menyediakan mesin eksekusi (virtual machine) yang jauh lebih cepat daripada mesin JavaScript saat itu.
  • Menawarkan perkakas pengembangan (tooling) yang superior melalui sistem tipe data opsional (optional typing).

Meskipun Dart 1.0 dirilis secara stabil pada November 2013, adopsi oleh komunitas web global berjalan sangat lambat. Komunitas web saat itu enggan mengadopsi bahasa baru yang memerlukan browser khusus untuk menjalankannya (Google sempat bereksperimen memasukkan Dart VM ke dalam Chromium, namun akhirnya membatalkan rencana tersebut demi fokus pada kompilasi Dart-to-JavaScript). JavaScript yang semakin membaik dengan hadirnya standar ECMAScript 2015 (ES6) membuat masa depan Dart sempat dipertanyakan. Namun, kegagalan adopsi di sektor web justru membuka jalan bagi transformasi terbesar Dart ketika tim proyek baru di Google sedang mencari bahasa yang cocok untuk sistem rendering revolusioner mereka.


Lahirnya Proyek “Sky” (2015): Mengejar Limitasi 120 FPS #

Pada tahun 2014, sekelompok insinyur di tim Google Chrome, yang dipimpin oleh Eric Seidel, mulai bereksperimen dengan ide radikal:

“Bagaimana jika kita menghapus seluruh warisan teknologi web kuno (seperti dokumen HTML, CSS cascades, dan kompatibilitas mundur puluhan tahun) dari mesin rendering WebKit/Blink, lalu melihat seberapa cepat kita bisa me-render konten?”

Eksperimen ini menghasilkan penemuan luar biasa. Dengan membuang seluruh kompleksitas parser HTML/CSS dan fokus murni pada rendering grafis dinamis, mereka dapat menggambar halaman web dengan kecepatan yang belum pernah terjadi sebelumnya. Proyek eksperimental ini dinamakan “Sky” dan diujicoba di atas sistem operasi Android.

Pada acara Dart Developer Summit tahun 2015, tim “Sky” memamerkan demo aplikasi Android yang mampu melakukan rendering secara konsisten pada kecepatan 120 frame per detik (FPS). Demo ini menggemparkan industri, karena framework lintas platform mobile saat itu (seperti Cordova) masih kesulitan mencapai 30 FPS secara stabil karena batasan rendering browser engine bawaan OS.

Agar proyek “Sky” dapat bertransformasi menjadi framework pengembangan aplikasi yang produktif, tim membutuhkan bahasa pemrograman yang memenuhi kriteria teknis yang sangat ketat:

  1. Dukungan Dua Mode Kompilasi: Bahasa harus mendukung kompilasi Just-in-Time (JIT) untuk pengembangan cepat dan Ahead-of-Time (AOT) untuk kecepatan eksekusi rilis produksi.
  2. Siklus Hidup Objek yang Sangat Cepat: Paradigma UI deklaratif memerlukan ribuan widget baru untuk dibuat dan dihancurkan setiap detiknya saat UI di-rebuild. Bahasa harus memiliki Garbage Collector (GC) generasi baru yang dioptimalkan untuk alokasi memori berumur pendek tanpa menyebabkan micro-stutter (antrean render yang tersendat).
  3. Thread Keamanan Tanpa Overhead: Untuk menghindari masalah race conditions dan penguncian thread (lock overhead) yang menurunkan frame rate, bahasa harus mendukung model konkurensi berbasis memori terisolasi.

Dart ternyata adalah satu-satunya bahasa di dunia yang memenuhi ketiga kriteria tersebut. Komitmen tim Dart untuk memodifikasi compiler mereka demi memenuhi kebutuhan spesifik tim rendering “Sky” mengunci kolaborasi bersejarah ini. Proyek “Sky” akhirnya berganti nama menjadi Flutter dan diumumkan secara resmi ke publik.


Garis Waktu Perkembangan Utama Flutter & Dart #

Evolusi Flutter dari proyek uji coba internal Google hingga menjadi pemimpin pasar lintas platform dirangkum dalam diagram garis waktu berikut:

flowchart TD
    subgraph EraAwal["Era Fondasi & Eksperimen"]
        D11["2011: Dart Diresmikan"] -->|"Fokus Web Enterprise"| D13["2013: Dart 1.0 Stabil"]
        D13 -->|"Pivot ke Client-Side"| S15["2015: Proyek Sky (Android 120 FPS)"]
    end

    subgraph EraStabilisasi["Era Stabilitas Mobile & Multi-Platform"]
        S15 -->|"Fase Alpha & Beta"| F18["2018: Flutter 1.0 (Mobile Stable)"]
        F18 -->|"Dart 2.0: Strong Typing"| F21["2021: Flutter 2.0 (Web & Desktop Stable)"]
    end

    subgraph EraModern["Era Performa Modern & AI"]
        F21 -->|"Dart 2.12: Null Safety"| F22["2022: Flutter 3.0 (6 Platform Stable)"]
        F22 -->|"Peralihan ke Impeller"| F23["2023: Flutter 3.10 & Dart 3.0 (Sound Null Safety)"]
        F23 -. "Wasm Compilation & Gemini AI" .-> F26["2024 - 2026: Era Akselerasi Wasm"]
    end

    style D11 stroke:#0288d1,stroke-width:2px
    style S15 stroke:#0288d1,stroke-width:2px
    style F18 stroke:#388e3c,stroke-width:2px
    style F21 stroke:#388e3c,stroke-width:2px
    style F22 stroke:#388e3c,stroke-width:2px
    style F23 stroke:#f57c00,stroke-width:2px
    style F26 stroke:#f57c00,stroke-width:2px

Setiap transisi era di atas menandai perubahan fokus pengembangan Google: dari pembuktian konsep teknis, ekspansi ekosistem platform, hingga pengoptimalan arsitektur performa tinggi.


Mengapa Google Memilih Dart untuk Flutter? #

Keputusan Google menggunakan Dart sering kali dipertanyakan oleh para pengembang baru yang lebih familiar dengan JavaScript atau Kotlin. Namun, jika kita melihat dari sudut pandang rekayasa compiler dan runtime, Dart memiliki karakteristik unik yang membuatnya menjadi mitra sempurna bagi Flutter:

JIT (Just-in-Time) vs AOT (Ahead-of-Time) Compilation #

Dart adalah salah satu dari sedikit bahasa pemrograman yang memisahkan arsitektur compilernya secara fleksibel untuk memecahkan dua masalah berbeda:

flowchart TD
    subgraph DevMode["1. Mode Pengembangan (JIT)"]
        CodeDev["Kode Dart Baru"] -->|"Dikompilasi Instan (Incremental)"| VM["Dart VM (Runtime JIT)"]
        VM -->|"Injeksi Perubahan State"| HotReload["Hot Reload (< 1 Detik)"]
    end

    subgraph ProdMode["2. Mode Rilis Produksi (AOT)"]
        CodeProd["Kode Dart Final"] -->|"Dikompilasi Penuh"| AOTCompiler["AOT Compiler"]
        AOTCompiler -->|"Biner Mesin Murni"| Bin["ARM / x64 Machine Code"]
        Bin -->|"Eksekusi Langsung tanpa VM"| SmoothRun["Performa Lancar & Boot Cepat"]
    end

    style DevMode stroke:#0288d1,stroke-width:2px
    style ProdMode stroke:#388e3c,stroke-width:2px
  • Selama Development (JIT): Kode dikompilasi secara dinamis di dalam Dart VM yang berjalan di emulator atau perangkat fisik. Hal ini memungkinkan fitur Hot Reload berjalan di mana perubahan kode disuntikkan ke dalam VM secara instan (biasanya di bawah satu detik) tanpa merusak atau me-reset state memori aplikasi.
  • Selama Production (AOT): Ketika kita membuild aplikasi rilis, compiler Dart mengubah seluruh kode menjadi kode mesin murni (ARM32/ARM64 untuk mobile, x64 untuk desktop). Hasilnya adalah aplikasi booting dengan sangat cepat dan berjalan stabil tanpa overhead interpretasi skrip.

Concurrency Menggunakan Isolate #

Berbeda dengan Java atau C++ yang menggunakan sistem shared-memory multi-threading (di mana thread yang berbeda berbagi alamat memori yang sama dan rentan terhadap deadlock atau race conditions), Dart menggunakan model Isolate.

Setiap Isolate berjalan secara mandiri dengan alokasi memori dan event loop-nya sendiri. Isolate tidak berbagi memori secara langsung; komunikasi antar Isolate dilakukan dengan saling mengirim pesan (message passing).

  • Manfaat untuk UI: Flutter menjalankan proses UI dan tata letak secara eksklusif pada Root Isolate. Karena tidak ada thread lain yang dapat memodifikasi atau mengunci memori UI ini secara paksa, UI Flutter bebas dari gangguan stuttering akibat perebutan kunci memori.

Generational Garbage Collector (GC) #

Widget dalam paradigma deklaratif bersifat sekali pakai. Flutter terus-menerus membuat objek widget baru saat melakukan update UI. Dart VM menyokong kebutuhan ini dengan sistem generational garbage collection yang sangat efisien. Objek baru ditaruh di area New Space yang sangat cepat dibersihkan. Jika objek tersebut bertahan dari beberapa siklus GC, objek baru dipindahkan ke Old Space. Hal ini meminimalkan jeda waktu pembersihan memori sehingga tidak mengganggu sinkronisasi frame vertikal layar (V-sync).


Tonggak Sejarah Rilis Mayor #

Sejak peluncuran resminya, Flutter telah melalui beberapa tonggak sejarah rilis besar yang memperluas fungsionalitas dan memperkuat posisinya di industri:

1. Flutter 1.0 (Desember 2018): Deklarasi Kesiapan Produksi #

Dirilis di London pada Desember 2018, versi ini menandai stabilisasi API inti Flutter. Google meyakinkan industri bahwa API dasar tidak akan mengalami perubahan drastis di masa depan. Pada fase ini, adopsi industri mulai melonjak, dipelopori oleh tim-tim teknik skala besar seperti Alibaba dan Tencent.

2. Flutter 2.0 (Maret 2021): Era Multi-Platform & Null Safety #

Rilis ini mengubah definisi Flutter dari framework mobile menjadi framework multi-platform.

  • Stable Web Support: Memungkinkan kode Flutter dikompilasi ke HTML/CSS/JS standar untuk berjalan di browser.
  • Desktop Support Preview: Memulai integrasi resmi ke platform macOS, Windows, dan Linux.
  • Sound Null Safety: Dart 2.12 diperkenalkan dengan tipe keamanan null yang mutlak. Sistem tipe ini memastikan bahwa variabel tidak dapat bernilai null kecuali kita mendeklarasikannya secara eksplisit, mengeliminasi kelas bug NullPointerExceptions yang menjadi musuh utama para developer.

3. Flutter 3.0 (Mei 2022): Enam Platform Stabil #

Diumumkan pada Google I/O 2022, rilis ini menandai stabilisasi penuh untuk dukungan enam platform utama dalam satu basis kode rilis yang sama: Android, iOS, Web, Windows, macOS, dan Linux.

4. Transisi Engine: Dari Skia ke Impeller (2023 - Sekarang) #

Selama bertahun-tahun, Flutter mengandalkan Skia sebagai pustaka grafis 2D pihak ketiga. Meskipun sangat andal, Skia memiliki satu kelemahan di platform iOS: ia mengompilasi shader secara dinamis saat aplikasi berjalan (runtime shader compilation). Hal ini menyebabkan masalah stutter/jank kecil saat animasi kustom dijalankan pertama kali oleh pengguna.

Untuk menyelesaikan masalah ini secara permanen, tim Flutter membangun engine grafis baru dari awal bernama Impeller.

  • Impeller mengompilasi shader secara Ahead-of-Time (AOT) saat build aplikasi dilakukan.
  • Mulai Flutter 3.10 (Mei 2023), Impeller diaktifkan secara default untuk iOS.
  • Google terus memperluas dukungan Impeller secara default untuk platform Android (Vulkan/OpenGL API) guna menghadirkan animasi transisi UI yang mulus tanpa hambatan kompilasi runtime.

Perkembangan Dart: Menjadi Bahasa Multi-Platform Modern #

Sebagai bahasa penggerak Flutter, Dart terus berevolusi untuk menyerap fitur-fitur modern dari bahasa pemrograman lain tanpa mengorbankan kecepatan kompilasi.

Versi DartTahun RilisPerubahan Utama & Dampak Produktivitas
Dart 1.02013Rilis stabil pertama berfokus pada eksekusi berbasis browser web.
Dart 2.02018Memperkenalkan sistem tipe data statis yang kuat (strong static type system), menghilangkan kata kunci new opsional untuk widget, dan mengoptimalkan runtime untuk Flutter.
Dart 2.122021Memperkenalkan Sound Null Safety stabil dan compiler FFI (Foreign Function Interface) untuk memanggil pustaka C/C++ secara langsung.
Dart 3.02023Menghapus seluruh kode non-null safety (100% Sound Null Safety mutlak). Memperkenalkan fitur modern: Records (tipe data tuple), Pattern Matching, dan Class Modifiers (sealed, interface, base).
Dart 3.32024Memperkenalkan Extension Types untuk abstraksi interop zero-overhead dan integrasi WebAssembly (Wasm) berkinerja tinggi.

Hadirnya Dart 3.0 membuat penulisan logika di Flutter menjadi jauh lebih ringkas. Sebagai contoh, fitur Pattern Matching memungkinkan kita memetakan state aplikasi secara deklaratif dengan lebih aman, mirip dengan pola penulisan kode di Kotlin atau Swift modern.


Ringkasan #

  • Asal Usul Dart (2011) — Dirancang awal oleh Lars Bak dan Kasper Lund sebagai alternatif JavaScript yang terstruktur untuk aplikasi web skala besar.
  • Proyek “Sky” (2015) — Lahir dari eksperimen tim Google Chrome yang membuang warisan teknologi web kuno untuk mencapai kecepatan rendering 120 FPS di Android.
  • Kolaborasi Sempurna — Dart dipilih karena kemampuan kompilasi JIT (untuk Hot Reload) dan AOT (untuk performa rilis), model konkurensi Isolate, serta Garbage Collector yang dioptimalkan untuk widget dinamis.
  • Rilis Stabil 1.0 (2018) — Menjadi tonggak awal kesiapan produksi massal untuk sistem operasi mobile Android dan iOS.
  • Lompatan Multi-Platform 2.0 & 3.0 — Memperluas dukungan stabil ke enam platform sekaligus dan memperkenalkan fitur tipe keamanan absolut (Sound Null Safety).
  • Inovasi Engine Impeller — Menggantikan Skia untuk melakukan prakompilasi shader secara AOT, mengeliminasi masalah stutter grafis di perangkat iOS dan Android secara permanen.

← Sebelumnya: Apa itu Flutter?   Berikutnya: Masalah yang Diselesaikan Flutter →

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact