Belajar Swift - Konsep Dasar & Arsitektur Utama
Episode 2 of 23

Belajar Swift - Konsep Dasar & Arsitektur Utama

Episode ini membedah cara kerja Swift di balik layar: alur kompilasi dari source code menjadi executable lewat SIL dan LLVM, peran Swift runtime dan ARC, serta REPL dan playground. Kalian juga mempelajari struktur project Swift, tipe dasar, module, package, dan komponen Standard Library.

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

Pendahuluan

Di episode 1 kalian memahami mengapa Swift ada. Sekarang kita membuka kap mesin: bagaimana Swift bekerja di balik layar. Episode 2 membahas arsitektur utama Swift — alur kompilasi, runtime, manajemen memori, dan struktur project — agar setiap kode yang kalian tulis bisa dimaknai dengan benar.

Pemahaman arsitektur bukan sekadar teori. Saat build error muncul, saat app crash misterius, atau saat binary jadi membengkak, pengetahuan tentang apa yang terjadi di bawah kode akan menjadi alat diagnostik pertama kalian.

Alur Kompilasi Swift

Dari Source Code ke Executable

Compiler Swift tidak langsung mengubah source menjadi machine code. Alurnya berlapis:

  1. Parser dan type checker: memvalidasi sintaks dan tipe, menghasilkan AST.
  2. SIL (Swift Intermediate Language): representasi tingkat menengah yang memungkinkan optimasi spesifik Swift.
  3. LLVM IR: SIL diturunkan ke LLVM IR untuk optimasi umum dan code generation.
  4. Executable atau module: hasil akhir berupa binary atau modul yang bisa dipakai project lain.

Kalian bisa melihat langsung hasil SIL dengan flag kompilasi:

Melihat output SIL
swiftc -emit-sil main.swift -o main.sil
head -40 main.sil

Perintah swiftc -emit-sil main.swift menampilkan representasi menengah yang sudah dioptimasi sebagian. Membaca SIL tidak wajib setiap hari, tetapi memahami keberadaannya menjelaskan kenapa compiler Swift bisa melakukan optimasi yang sangat spesifik.

Module dan Dependency

Satu file Swift bukan satu unit kompilasi yang berdiri sendiri — unit-nya adalah module. Sebuah module adalah kumpulan kode dengan batas akses publik yang jelas, diimpor dengan perintah import. Saat kalian menulis import Foundation, compiler memuat modul Foundation lengkap dengan informasi tipe-nya, bukan sekadar menggabungkan file.

Runtime dan Memory Management

Swift Runtime

Runtime Swift adalah library yang menyediakan layanan inti saat program berjalan: pengalokasian objek, ARC, kesetaraan nilai, protocol witness tables, dan dukungan dynamic cast. Runtime ini tertanam dalam setiap binary Swift dan menjadi alasan kenapa binary Swift cukup besar — tetapi juga mandiri dan stabil berkat ABI stability di Swift 5.

ARC dan Manajemen Memori

Automatic Reference Counting (ARC) melacak berapa banyak referensi kuat yang menunjuk ke setiap class instance. Saat hitungan mencapai nol, instance langsung dibebaskan:

Retain count dalam praktik
class Pengguna {
    var nama: String
    init(nama: String) {
        self.nama = nama
    }
}
 
var referensi1: Pengguna? = Pengguna(nama: "Arman")
var referensi2 = referensi1
referensi1 = nil
print(referensi2?.nama)

Kode di atas menunjukkan dua variabel yang mereferensikan instance yang sama; instance baru dibebaskan setelah referensi2 juga melepaskannya. Episode 14 akan membahas retain cycle dan cara menghindarinya dengan weak dan unowned.

REPL dan Playground

Eksperimen Cepat

Swift menyediakan dua sarana eksperimen cepat. REPL (Read-Eval-Print Loop) tersedia lewat perintah swift di terminal — kalian mengetik kode dan langsung melihat hasilnya tanpa kompilasi terpisah:

Menjalankan kode satu baris
swift -e 'let angka = 42; print(angka * 2)'

swift -e '...' mengeksekusi ekspresi tanpa membuat file. Untuk eksplorasi visual dan bertahap di macOS, Playground di Xcode menampilkan hasil setiap baris secara langsung — sangat berguna untuk mempelajari API baru sebelum dipindah ke project.

Struktur Project Swift

Layout Sumber dan Manifes

Project Swift modern dibangun dengan Swift Package Manager. Struktur standarnya:

Struktur package Swift
MyLibrary/
├── Package.swift
├── Sources/
   └── MyLibrary/
       └── MyLibrary.swift
└── Tests/
    └── MyLibraryTests/
        └── MyLibraryTests.swift

Package.swift adalah manifes yang mendeskripsikan nama package, platform target, dan dependency. Semua source berada di Sources/ dan test di Tests/. Ini layout yang dipakai Xcode, server-side Swift, dan library open source modern.

Package dan Dependency Management

Dependency dikelola lewat manifes dengan sintaks yang mirip semantik versi SemVer:

Menambahkan dependency
.package(url: "https://github.com/vapor/vapor.git", from: "4.0.0")

Baris package(url:from:) di Package.swift memberi tahu SPM versi minimum yang boleh dipakai. Episode 10 membahas SPM secara menyeluruh.

Tipe Dasar dan Standard Library

Komponen Inti Bahasa

Swift sudah menyertakan tipe dasar seperti Int, Double, String, Bool, Array, Dictionary, dan Set langsung di bahasa. Yang menarik: tipe-tipe ini bukan keyword magis — mereka didefinisikan di Swift Standard Library yang ditulis dalam Swift sendiri dan diimpor otomatis tanpa perintah import.

Core Libraries dan Overlay

Di atas Standard Library ada core libraries lintas platform:

  • Foundation: tanggal, URL, file I/O, jaringan, serialisasi — diimpor dengan import Foundation.
  • Dispatch: Grand Central Dispatch untuk concurrency tingkat rendah.
  • os: API sistem operasi seperti logging dan interaksi dengan sistem.

Di platform Apple, overlay Swift menambahkan API Swift-native di atasnya. Di Linux, ketiga library ini juga tersedia sehingga kode server-side Swift tetap konsisten.

Tip

Kalian bisa melihat seluruh konten Standard Library lewat documentation browser di Xcode atau di situs developer.apple.com. Membaca signature fungsi bawaan adalah cara terbaik mempelajari idiom Swift yang benar.

Penutup

Inti yang harus dibawa pulang:

  • Swift dikompilasi berlapis: AST, SIL, LLVM IR, lalu executable atau module.
  • Unit kompilasi Swift adalah module, diimpor dengan perintah import.
  • ARC membebaskan memori secara otomatis saat referensi kuat habis.
  • REPL dan playground mempercepat eksperimen sebelum masuk ke project.
  • Project Swift terstruktur atas Package.swift, Sources/, dan Tests/.
  • Standard Library dan core libraries Foundation serta Dispatch melengkapi bahasa.

Di episode 3 selanjutnya kita akan membahas sintaks dasar dan struktur kode Swift — deklarasi variabel dan konstanta dengan var dan let, tipe dasar, struktur kontrol seperti if, switch, dan loop, serta fungsi dan closures. Saatnya mulai menulis kode Swift dengan benar!