CとWin32 APIで構築されたシンプルな Windows Todo アプリケーションが、バイナリサイズの最適化、現代のGUI開発プラクティス、そして Windows プログラミングの進化について広範な技術的議論を巻き起こしています。このアプリケーションは作者によって「現代的」と表現されており、コメントによると278KBのサイズであるとのことですが、多くの開発者はこの比較的基本的な機能セットに対してこのファイルサイズに驚きを表明しています。
この Todo アプリは、フレームワークや現代的なUIライブラリを使用せず、Win32 APIを使用した Windows GUIプログラミングの基本的な技術を示しています。Todoアイテムの作成、編集、削除、タスクの完了マーク、 AppData での永続的なストレージ、システムトレイ統合、自動起動オプションなどの機能が含まれています。
バイナリサイズの最適化
プロジェクトで最も議論された側面の一つは、そのバイナリサイズでした。多くのコメンターは実行ファイルが278KBであることに驚き、同様の機能はもっと小さなフットプリントで実現できるはずだと示唆しました。いくつかの開発者はファイルサイズを劇的に削減できる最適化技術を提案しました。
「この278KBが何に使われているのか確認するためにこのバイナリを再現してみました... ツールチェーンとして x86_64-15.1.0-release-win32-seh-msvcrt-rt_v12-rev0.7z を使用しました。これにより102KBの.exeファイルが生成されます。最初から主張されている278KBよりもはるかに良い結果です... GCCにいくつかのスイッチを渡すことでさらに改善できます... gcc -s -Oz -flto => 47KB」
議論では、バイナリの膨張の多くはCランタイムライブラリの静的リンクから来ている可能性が高いことが明らかになりました。開発者たちは静的リンクと動的リンクのメリットについて議論し、動的リンクはより小さな実行ファイルを生成するが、DLLがオペレーティングシステムの一部でない限り、アプリケーションとともにDLLを配布する必要があることを指摘する人もいました。
サイズ最適化テクニック
- サイズ最適化のためのコンパイラフラグ:
-Os
- サイズのための最適化-Oz
- より積極的なサイズ最適化-flto
- リンク時最適化-s
- シンボルテーブルの削除
- リンクオプション:
- システム DLL への動的リンクと静的リンクの比較
- MinGW のデフォルトの MSVCRT.DLL を C ランタイムとして使用
- 実行ファイルの圧縮:
- UPX が歴史的なテクニックとして言及(ウイルス対策ソフトの懸念あり)
プロジェクト機能
- Win32 API を使用した純粋な C で書かれている
- Todoアイテム管理(作成、編集、削除、完了マーク)
- %APPDATA%\TodoApp\todos.dat への永続的なストレージ
- システムトレイ統合
- Windows 起動時の自動起動オプション
- 最大100個のtodo容量
現代の Windows 開発プラクティス
多くのコメンターは、このアプリケーションが「現代的」であるという主張に疑問を呈し、高DPIサポート、現代的なUIスタイリング、コントロール間のタブナビゲーションなどの機能が欠けていると指摘しました。何人かは現代的なUIスタイリングやその他の現代的な Windows 機能を有効にするために Windows アプリケーションマニフェストを追加することを提案しました。
この議論は、 Windows 開発プラクティスが時間とともにどのように進化してきたかを浮き彫りにしました。かつてはCでのWin32 APIプログラミングが標準的なアプローチでしたが、 Windows 95の時代までに、ほとんどの Windows 開発者はC++、 Visual Basic 、 Delphi などの高レベルのフレームワークと言語に移行しました。今日では、 Microsoft 自身のドキュメントでさえ、 Windows 開発にはCよりもC++を推奨しています。
ノスタルジーと学習価値
批判にもかかわらず、多くのコメンターはこのプロジェクトの教育的価値とノスタルジックな魅力に感謝の意を表しました。何人かの開発者は同様のアプローチでの初期の Windows プログラミング経験を懐かしみ、この開発スタイルはプログラマーがハードウェアに近いレベルで何が起こっているかを理解するのに役立つと指摘しました。
このプロジェクトは、数十年にわたる開発プラクティスの進化についての議論を引き起こし、年配の開発者たちは実行ファイルのサイズがメガバイトではなくキロバイトで測定されていた時代を思い出しました。一部の人々は、この278KBのアプリケーションを6502プロセッサのようなはるかに限られたリソースを持つシステムのプログラミングの制約と、ユーモアを交えて比較しました。
このプロジェクトは、現代の開発プラクティスが高レベルの抽象化とより大きなバイナリに向かって移行している一方で、オペレーティングシステムAPIと効率的なプログラミングの基礎を理解することにはまだ価値があることを示しています。 Windows GUIプログラミングを学びたい初心者や、基本に立ち返りたい経験豊富な開発者にとって、このようなプロジェクトは Windows アプリケーションが低いレベルでどのように動作するかを理解するためのアクセスしやすい入り口を提供します。