Episode ini menelusuri kelahiran C di Bell Labs oleh Dennis Ritchie, perannya dalam pengembangan Unix dan sistem operasi, hingga evolusi standar C89, C99, C11, C17, dan C23. Kalian juga akan memahami masalah yang diselesaikan C dan kapan memilih C dibanding bahasa lain.

Sebelum memahami cara menulis C, kalian perlu memahami mengapa bahasa ini lahir dan mengapa ia bertahan lebih dari lima dekade. Episode 1 membuka perjalanan dari ruang riset Bell Labs pada awal 1970-an sampai standar C23 yang stabil hari ini.
Bahasa C lahir dari kebutuhan pragmatis: menulis ulang sistem operasi Unix yang awalnya dibuat dalam bahasa assembly. Assembly sangat cepat tetapi sulit dipelihara dan tidak portabel. C diciptakan sebagai jembatan: secepat assembly untuk operasi tingkat rendah, tetapi cukup abstrak untuk ditulis oleh manusia secara produktif.
Di episode ini kalian akan melihat evolusi C, masalah yang diselesaikannya, perbandingannya dengan bahasa tingkat tinggi, dan panduan kapan harus memilih C. Ini akan menjadi landasan filosofis untuk seluruh episode berikutnya.
Sejarah C dimulai dari bahasa BCPL yang dikembangkan oleh Martin Richards, lalu disederhanakan oleh Ken Thompson menjadi bahasa B untuk komputer PDP-7. B terlalu terbatas karena tidak memiliki tipe data yang jelas. Pada tahun 1972, Dennis Ritchie merancang C sebagai evolusi B yang ditulis ulang untuk PDP-11.
Keputusan paling berpengaruh pada masa itu adalah menulis ulang Unix dalam C pada tahun 1973. Sejak saat itu, sistem operasi tidak lagi terikat pada satu arsitektur mesin. Inilah kelahiran konsep portability yang hingga kini menjadi janji utama bahasa C.
C menjadi bahasa pilihan untuk menulis sistem operasi karena tiga alasan: akses langsung ke memori melalui pointer, kontrol presisi terhadap perangkat keras, dan output kode mesin yang efisien. Linux, Windows, dan macOS seluruhnya ditulis sebagian besar dalam C. Begitu juga dengan firmware pada mikrokontroler, kernel jaringan, dan driver perangkat.
Tanpa C, ekosistem software modern tidak akan ada. Bahasa-bahasa populer seperti Python, Go, dan JavaScript mengimplementasikan runtime mereka sendiri dalam C atau C++. Memahami C berarti memahami lapisan paling bawah tempat semua bahasa lain berpijak.
Versi pertama C didokumentasikan dalam buku The C Programming Language karya Brian Kernighan dan Dennis Ritchie pada tahun 1978, yang dikenal sebagai K&R C. Karena C berkembang tanpa standar resmi, setiap compiler menambahkan ekstensi sendiri yang saling tidak kompatibel.
Pada tahun 1989, ANSI menerbitkan standar C pertama, disusul ISO pada tahun 1990, sehingga dikenal sebagai ANSI C atau C89/C90. Standar ini membakukan sintaks, library standar, dan perilaku compiler untuk pertama kalinya.
Setiap revisi berikutnya menambahkan fitur penting:
long long, komentar //, variabel dalam blok for, dan header <stdint.h>.nullptr, typeof, atribut, dan perbaikan preprocessor.Kalian bisa memilih versi standar saat mengompilasi:
gcc -std=c17 program.c -o program
gcc -std=c2x program.c -o program
clang -std=c11 program.c -o programBendera -std=c17 di atas menginstruksikan compiler untuk mematuhi standar C17 secara ketat. Membiasakan diri menentukan standar eksplisit membuat kode kalian lebih portabel antar compiler dan antar platform.
Masalah utama yang diselesaikan C adalah kebutuhan akan bahasa yang seefisien assembly tetapi tetap produktif. Dengan pointer, kalian bisa mengakses alamat memori secara langsung. Dengan operator bitwise, kalian bisa mengelola flag pada level bit. Hasilnya adalah program yang hemat memori dan cepat, cocok untuk sistem dengan sumber daya terbatas.
Karena C adalah bahasa berstandar internasional, kode yang ditulis dengan standar tertentu bisa dikompilasi di arsitektur berbeda dengan compiler berbeda. GCC untuk x86_64, ARM, dan RISC-V semuanya memahami standar yang sama. Inilah yang membuat C menjadi bahasa paling portabel di dunia.
Buktikan janji portability dengan mengompilasi kode yang sama memakai dua compiler berbeda:
cat > coba.c <<'EOF'
#include <stdio.h>
int main(void) {
printf("portabel di mana saja\n");
return 0;
}
EOF
gcc -std=c17 coba.c -o coba-gcc
clang -std=c17 coba.c -o coba-clang
./coba-gcc
./coba-clangSatu file sumber, dua compiler, dua executable yang sama-sama berjalan. Kode yang hanya memakai fitur standar seperti contoh di atas akan terkompilasi di hampir semua platform yang menyediakan toolchain C.
Hampir setiap bahasa modern belajar dari C. Sintaks Java, C#, dan Go secara langsung mewarisi gaya C. Konsep pointer muncul kembali dalam bentuk slice di Go dan reference di Rust. Memahami C memberi kalian intuisi tentang mengapa bahasa lain berperilaku seperti itu.
C bukan selalu jawaban yang tepat. Bahasa Python dan Go lebih produktif untuk aplikasi bisnis, sedangkan Rust memberikan keamanan memori yang lebih ketat. Pilih C ketika kalian membutuhkan kontrol langsung terhadap perangkat keras, ukuran binary yang kecil, atau determinisme eksekusi yang presisi.
Gunakan daftar pertimbangan berikut:
C unggul di domain yang menghargai kontrol dan efisiensi di atas segalanya. Dengan posisi tersebut, keahlian C tidak akan pernah usang.
Inti yang harus dibawa pulang:
Di episode 2 selanjutnya kita akan membahas konsep dasar dan arsitektur utama C — proses kompilasi dari preprocessing, kompilasi, assembly, hingga linking, model memori C dengan stack, heap, static data, dan text segment, hingga ABI dan calling convention yang bekerja di balik layar.