แอพ Todo ขนาด 278KB จุดประกายการถกเถียงเรื่องการพัฒนา Windows สมัยใหม่และการปรับขนาดไฟล์ไบนารี

BigGo Editorial Team
แอพ Todo ขนาด 278KB จุดประกายการถกเถียงเรื่องการพัฒนา Windows สมัยใหม่และการปรับขนาดไฟล์ไบนารี

แอพพลิเคชันจดบันทึกงานอย่างง่ายสำหรับ Windows ที่สร้างด้วย C และ Win32 API ได้จุดประกายการอภิปรายทางเทคนิคอย่างกว้างขวางเกี่ยวกับการปรับขนาดไฟล์ไบนารี แนวทางการพัฒนา GUI สมัยใหม่ และวิวัฒนาการของการเขียนโปรแกรมบน Windows แอพพลิเคชันนี้ถูกอธิบายว่าทันสมัยโดยผู้สร้าง มีขนาด 278KB ตามความเห็นต่างๆ แม้ว่านักพัฒนาหลายคนแสดงความประหลาดใจกับขนาดไฟล์นี้สำหรับฟังก์ชันการทำงานที่พวกเขาถือว่าค่อนข้างพื้นฐาน

แอพ todo นี้แสดงให้เห็นเทคนิคการเขียนโปรแกรม GUI บน Windows โดยใช้ Win32 API โดยไม่ต้องใช้เฟรมเวิร์กหรือไลบรารี UI สมัยใหม่ มีฟีเจอร์ต่างๆ เช่น การสร้าง แก้ไข และลบรายการ todo การทำเครื่องหมายงานว่าเสร็จสมบูรณ์ การจัดเก็บข้อมูลถาวรใน AppData การรวมเข้ากับถาดระบบ และตัวเลือกการเริ่มต้นอัตโนมัติ

การปรับขนาดไบนารีให้เหมาะสม

หนึ่งในประเด็นที่มีการอภิปรายมากที่สุดของโปรเจกต์นี้คือขนาดไบนารี ผู้แสดงความคิดเห็นหลายคนแสดงความประหลาดใจที่ไฟล์ที่ประมวลผลได้มีขนาด 278KB โดยแนะนำว่าฟังก์ชันการทำงานที่คล้ายกันสามารถทำได้ด้วยขนาดที่เล็กกว่ามาก นักพัฒนาหลายคนเสนอเทคนิคการปรับแต่งที่สามารถลดขนาดไฟล์ลงได้อย่างมาก

ผมพยายามสร้างไบนารีนี้ขึ้นมาใหม่เพื่อดูว่า 278 KB นั้นถูกใช้ไปกับอะไร... โดยใช้ x86_64-15.1.0-release-win32-seh-msvcrt-rt_v12-rev0.7z เป็นชุดเครื่องมือ ซึ่งสร้างไฟล์ .exe ขนาด 102 KB ตั้งแต่แรกเราก็ทำได้ดีกว่า 278 KB ที่กล่าวอ้าง... เราสามารถปรับปรุงได้โดยการส่งสวิตช์บางตัวไปยัง GCC... gcc -s -Oz -flto => 47 KB

การอภิปรายเผยให้เห็นว่าความใหญ่ของไบนารีส่วนใหญ่น่าจะมาจากการลิงก์แบบสแตติกของไลบรารีรันไทม์ของ C นักพัฒนาถกเถียงถึงข้อดีของการลิงก์แบบสแตติกเทียบกับแบบไดนามิก โดยบางคนชี้ให้เห็นว่าแม้การลิงก์แบบไดนามิกจะสร้างไฟล์ที่ประมวลผลได้ที่เล็กกว่า แต่ก็ต้องแจกจ่าย DLL พร้อมกับแอพพลิเคชัน เว้นแต่ว่าจะเป็นส่วนหนึ่งของระบบปฏิบัติการอยู่แล้ว

เทคนิคการลดขนาดไฟล์ที่กล่าวถึง

  • ตัวเลือกคอมไพเลอร์สำหรับการลดขนาด:
    • -Os - การปรับแต่งเพื่อลดขนาด
    • -Oz - การปรับแต่งเพื่อลดขนาดที่มากขึ้น
    • -flto - การปรับแต่งในขั้นตอนการเชื่อมโยง
    • -s - การลบตารางสัญลักษณ์
  • ตัวเลือกการเชื่อมโยง:
    • การเชื่อมโยงแบบไดนามิกกับ DLL ของระบบ เทียบกับการเชื่อมโยงแบบสแตติก
    • การใช้ MSVCRT.DLL ที่เป็นค่าเริ่มต้นของ MinGW เป็น C runtime
  • การบีบอัดไฟล์ที่ประมวลผลแล้ว:
    • มีการกล่าวถึง UPX เป็นเทคนิคในอดีต (พร้อมข้อกังวลเกี่ยวกับโปรแกรมป้องกันไวรัส)

คุณสมบัติของโครงการ

  • เขียนด้วยภาษา C ล้วนโดยใช้ Win32 API
  • การจัดการรายการสิ่งที่ต้องทำ (สร้าง, แก้ไข, ลบ, ทำเครื่องหมายว่าเสร็จสิ้น)
  • การจัดเก็บข้อมูลถาวรใน %APPDATA%\TodoApp\todos.dat
  • การรวมเข้ากับถาดระบบ
  • ตัวเลือกเริ่มต้นอัตโนมัติพร้อมกับ Windows
  • รองรับรายการสิ่งที่ต้องทำสูงสุด 100 รายการ

แนวทางการพัฒนา Windows สมัยใหม่

ผู้แสดงความคิดเห็นหลายคนตั้งคำถามเกี่ยวกับการอ้างว่าแอพพลิเคชันนี้ทันสมัย โดยชี้ให้เห็นว่าขาดคุณสมบัติเช่น การรองรับ high-DPI สไตล์ UI สมัยใหม่ และการนำทางด้วยแท็บระหว่างตัวควบคุม หลายคนแนะนำให้เพิ่มแมนิเฟสต์แอพพลิเคชัน Windows เพื่อเปิดใช้งานสไตล์ UI สมัยใหม่และคุณสมบัติ Windows ร่วมสมัยอื่นๆ

การอภิปรายเน้นให้เห็นว่าแนวทางการพัฒนา Windows ได้วิวัฒนาการไปตามกาลเวลาอย่างไร ในขณะที่การเขียนโปรแกรม Win32 API ใน C เคยเป็นวิธีมาตรฐาน นักพัฒนา Windows ส่วนใหญ่ได้ย้ายไปใช้เฟรมเวิร์กและภาษาระดับสูงขึ้นเช่น C++, Visual Basic และ Delphi ตั้งแต่ยุค Windows 95 ปัจจุบัน แม้แต่เอกสารของ Microsoft เองก็แนะนำให้ใช้ C++ มากกว่า C สำหรับการพัฒนา Windows

ความรู้สึกถวิลหาอดีตและคุณค่าในการเรียนรู้

แม้จะมีคำวิจารณ์ ผู้แสดงความคิดเห็นหลายคนแสดงความชื่นชมในคุณค่าทางการศึกษาของโปรเจกต์และความรู้สึกถวิลหาอดีต นักพัฒนาหลายคนรำลึกถึงประสบการณ์การเขียนโปรแกรม Windows ในช่วงแรกด้วยวิธีการที่คล้ายคลึงกัน โดยสังเกตว่ารูปแบบการพัฒนานี้ช่วยให้โปรแกรมเมอร์เข้าใจสิ่งที่เกิดขึ้นใกล้ชิดกับฮาร์ดแวร์

โปรเจกต์นี้จุดประกายการอภิปรายเกี่ยวกับวิวัฒนาการของแนวทางการพัฒนาตลอดหลายทศวรรษ โดยนักพัฒนารุ่นเก่าระลึกถึงเมื่อขนาดของไฟล์ที่ประมวลผลได้ถูกวัดเป็นกิโลไบต์มากกว่าเมกะไบต์ บางคนเปรียบเทียบแอพพลิเคชันขนาด 278KB กับข้อจำกัดของการเขียนโปรแกรมสำหรับระบบที่มีทรัพยากรจำกัดมากกว่า เช่น โปรเซสเซอร์ 6502 อย่างขบขัน

โปรเจกต์นี้แสดงให้เห็นว่าในขณะที่แนวทางการพัฒนาสมัยใหม่ได้เคลื่อนไปสู่การใช้แอบสแทรกชันระดับสูงขึ้นและไบนารีขนาดใหญ่ขึ้น ยังคงมีคุณค่าในการทำความเข้าใจพื้นฐานของ API ระบบปฏิบัติการและการเขียนโปรแกรมที่มีประสิทธิภาพ สำหรับผู้เริ่มต้นที่ต้องการเรียนรู้การเขียนโปรแกรม GUI บน Windows หรือนักพัฒนาที่มีประสบการณ์ที่ต้องการทบทวนพื้นฐาน โปรเจกต์เช่นนี้ให้จุดเริ่มต้นที่เข้าถึงได้ในการทำความเข้าใจว่าแอพพลิเคชัน Windows ทำงานอย่างไรในระดับที่ต่ำกว่า

อ้างอิง: Simple Todo (C / WinAPI)