Windows API был впервые создан еще в 1980-х годах, и на протяжении многих лет ему приходилось поддерживать несколько различных архитектур ЦП и компиляторов. Они перешли от однопользовательских однопроцессных автономных систем к сетевым многопользовательским многоядерным системам, обеспечивающим безопасность. Им приходилось обходить проблемы с 16-битными и 32-битными процессорами, а теперь и с 64-битными. Им приходилось обходить проблемы с компиляторами до ANSI C. Они должны были поддерживать компиляторы C ++ в ранние нестандартные времена. Им приходилось иметь дело с сегментированной памятью. Они должны были поддерживать интернационализацию до появления Unicode. Они должны были поддерживать некоторую совместимость на уровне исходного кода с MS-DOS, OS / 2 и Mac OS. Им приходилось работать на нескольких поколениях чипов Intel, PowerPC, MIPS, Alpha и ARM. Тот же базовый API используется для настольных, серверных, мобильных и встраиваемых систем.
Еще в 1980-х годах язык С считался языком высокого уровня (да, действительно!), И многие считали целесообразным использовать абстрактные типы, а не просто указывать все как примитив int
, char
или void *
. В те времена, когда у нас не было IntelliSense, информационных подсказок, браузеров кода, онлайн-документации и тому подобного, такие советы по использованию были полезны, и это облегчало перенос кода между разными компиляторами и разными языками программирования.
Да, это ужасный беспорядок, но это не значит, что они сделали что-то не так.