Sebuah aplikasi todo Windows sederhana yang dibangun dengan C dan Win32 API telah memicu diskusi teknis yang luas tentang optimasi ukuran biner, praktik pengembangan GUI modern, dan evolusi pemrograman Windows. Aplikasi tersebut, yang digambarkan sebagai modern oleh pembuatnya, berukuran 278KB menurut komentar, meskipun banyak pengembang menyatakan keterkejutan mereka dengan ukuran file ini untuk apa yang mereka anggap sebagai set fitur yang relatif dasar.
Aplikasi todo ini mendemonstrasikan teknik pemrograman GUI Windows inti menggunakan Win32 API tanpa framework atau pustaka UI modern. Aplikasi ini mencakup fitur seperti membuat, mengedit, dan menghapus item todo, menandai tugas sebagai selesai, penyimpanan persisten di AppData, integrasi system tray, dan opsi auto-start.
Optimasi Ukuran Biner
Salah satu aspek yang paling banyak dibahas dari proyek ini adalah ukuran binernya. Banyak komentator menyatakan keterkejutan bahwa executable-nya berukuran 278KB, menunjukkan bahwa fungsionalitas serupa dapat dicapai dengan ukuran yang jauh lebih kecil. Beberapa pengembang menawarkan teknik optimasi yang dapat secara dramatis mengurangi ukuran file.
Saya mencoba mereproduksi biner ini untuk melihat apa yang mengambil ruang 278 KB... Menggunakan x86_64-15.1.0-release-win32-seh-msvcrt-rt_v12-rev0.7z sebagai toolchain. Ini menghasilkan file .exe sebesar 102 KB. Langsung dari awal kita sudah jauh lebih baik dari yang diklaim 278 KB... Kita dapat meningkatkannya dengan memberikan beberapa switch ke GCC... gcc -s -Oz -flto => 47 KB
Diskusi tersebut mengungkapkan bahwa sebagian besar pembengkakan biner kemungkinan berasal dari static linking pustaka runtime C. Para pengembang memperdebatkan kelebihan dan kekurangan static versus dynamic linking, dengan beberapa menunjukkan bahwa meskipun dynamic linking menghasilkan executable yang lebih kecil, hal itu memerlukan pendistribusian DLL dengan aplikasi kecuali DLL tersebut sudah menjadi bagian dari sistem operasi.
Teknik Optimasi Ukuran yang Disebutkan
- Flag kompiler untuk optimasi ukuran:
-Os
- Optimasi untuk ukuran-Oz
- Optimasi ukuran yang lebih agresif-flto
- Optimasi waktu penghubungan-s
- Menghapus tabel simbol
- Opsi penghubungan:
- Penghubungan dinamis ke DLL sistem vs penghubungan statis
- Menggunakan MSVCRT.DLL bawaan MinGW sebagai runtime C
- Kompresi file eksekusi:
- UPX disebutkan sebagai teknik historis (dengan catatan kekhawatiran anti-virus)
Fitur Proyek
- Ditulis dalam bahasa C murni menggunakan Win32 API
- Manajemen item tugas (membuat, mengedit, menghapus, menandai selesai)
- Penyimpanan persisten di %APPDATA%\TodoApp\todos.dat
- Integrasi baki sistem
- Opsi mulai otomatis dengan Windows
- Kapasitas maksimum 100 tugas
Praktik Pengembangan Windows Modern
Banyak komentator mempertanyakan klaim aplikasi sebagai modern, menunjukkan bahwa aplikasi tersebut tidak memiliki fitur seperti dukungan high-DPI, styling UI modern, dan navigasi tab antar kontrol. Beberapa menyarankan untuk menambahkan manifest aplikasi Windows untuk mengaktifkan styling UI modern dan fitur Windows kontemporer lainnya.
Diskusi tersebut menyoroti bagaimana praktik pengembangan Windows telah berevolusi seiring waktu. Sementara pemrograman Win32 API dalam C dulunya merupakan pendekatan standar, sebagian besar pengembang Windows beralih ke framework dan bahasa tingkat yang lebih tinggi seperti C++, Visual Basic, dan Delphi pada era Windows 95. Saat ini, bahkan dokumentasi Microsoft sendiri merekomendasikan C++ daripada C untuk pengembangan Windows.
Nostalgia dan Nilai Pembelajaran
Terlepas dari kritik, banyak komentator mengungkapkan apresiasi terhadap nilai edukasi proyek dan daya tarik nostalgianya. Beberapa pengembang bernostalgia tentang pengalaman pemrograman Windows awal mereka dengan pendekatan serupa, mencatat bahwa gaya pengembangan ini membantu programmer memahami apa yang terjadi dekat dengan level rendah.
Proyek ini memicu diskusi tentang evolusi praktik pengembangan selama beberapa dekade, dengan pengembang yang lebih senior mengingat ketika ukuran executable diukur dalam kilobyte daripada megabyte. Beberapa dengan humor membandingkan aplikasi 278KB dengan batasan pemrograman untuk sistem dengan sumber daya yang jauh lebih terbatas, seperti prosesor 6502.
Proyek ini menunjukkan bahwa meskipun praktik pengembangan modern telah bergerak menuju abstraksi tingkat yang lebih tinggi dan biner yang lebih besar, masih ada nilai dalam memahami dasar-dasar API sistem operasi dan pemrograman yang efisien. Bagi pemula yang ingin belajar pemrograman GUI Windows atau pengembang berpengalaman yang ingin meninjau kembali dasar-dasar, proyek seperti ini memberikan titik masuk yang mudah diakses untuk memahami bagaimana aplikasi Windows bekerja pada level yang lebih rendah.
Referensi: Simple Todo (C / WinAPI)