Сложность в этом заключается из-за того, что C ++ имеет тенденцию распространяться и сам процесс компиляции по многим маленьким, отдельным файлам. В Linux это хорошо, а в Windows нет. Если вы хотите создать действительно быстрый компилятор C ++ для Windows, постарайтесь сохранить все в оперативной памяти и как можно меньше касаться файловой системы.
Таким же образом вы создадите более быструю цепочку компиляции Linux C ++, но это менее важно в Linux, потому что файловая система уже выполняет большую часть этой настройки для вас.
Причина этого кроется в культуре Unix:
Исторически производительность файловой системы была гораздо более приоритетной в мире Unix, чем в Windows. Нельзя сказать, что в Windows это не было приоритетом, просто в Unix это был более высокий приоритет.
Доступ к исходному коду.
Вы не можете изменить то, что не можете контролировать. Отсутствие доступа к исходному коду Windows NTFS означает, что большинство усилий по повышению производительности были сделаны с помощью аппаратных улучшений. То есть, если производительность низкая, вы решаете проблему, улучшая аппаратное обеспечение: шину, носитель данных и т. Д. Вы можете сделать так много, только если вам нужно обойти проблему, но не решить ее.
Доступ к исходному коду Unix (даже до открытого кода) был более распространенным. Поэтому, если вы хотите повысить производительность, вы должны сначала обратиться к ней с помощью программного обеспечения (дешевле и проще), а затем с аппаратным обеспечением.
В результате многие люди в мире получили докторскую степень, изучая файловую систему Unix и находя новые способы повышения производительности.
Unix стремится к множеству маленьких файлов; Windows стремится к нескольким (или одному) большому файлу.
Приложения Unix, как правило, имеют дело со многими небольшими файлами. Подумайте о среде разработки программного обеспечения: множество небольших исходных файлов, каждый со своей целью. На последнем этапе (связывание) создается один большой файл, но это небольшой процент.
В результате Unix имеет высоко оптимизированные системные вызовы для открытия и закрытия файлов, сканирования каталогов и так далее. История научных исследований Unix охватывает десятилетия оптимизаций файловой системы, в которых много внимания уделялось улучшению доступа к каталогам (поиск и полное сканирование каталогов), открытию начальных файлов и т. Д.
Приложения Windows, как правило, открывают один большой файл, держат его открытым в течение длительного времени, когда его закрывают, закрывают. Подумайте о MS-Word. msword.exe (или что-то еще) открывает файл один раз и добавляет в течение нескольких часов, обновляет внутренние блоки и так далее. Значение оптимизации открытия файла будет потрачено впустую время.
История тестирования и оптимизации Windows была связана с тем, насколько быстро можно читать или записывать длинные файлы. Вот что оптимизируется.
К сожалению, разработка программного обеспечения имеет тенденцию к первой ситуации. Черт возьми, лучшая система обработки текста для Unix (TeX / LaTeX) предлагает вам поместить каждую главу в отдельный файл и #include их все вместе.
Unix ориентирован на высокую производительность; Windows ориентирована на пользовательский опыт
Unix запущен в серверной комнате: пользовательский интерфейс отсутствует. Единственное, что видят пользователи, это скорость. Поэтому скорость является приоритетом.
Windows запустилась на рабочем столе: пользователи заботятся только о том, что они видят, и они видят пользовательский интерфейс. Поэтому на улучшение пользовательского интерфейса тратится больше энергии, чем на производительность.
Экосистема Windows зависит от планового устаревания. Зачем оптимизировать программное обеспечение, если до нового оборудования всего год или два?
Я не верю в теории заговора, но если бы я это сделал, я бы отметил, что в культуре Windows меньше стимулов для повышения производительности.Бизнес-модели Windows зависят от людей, покупающих новые машины, такие как часы.(Вот почему цена акций тысяч компаний будет затронута, если MS поставит операционную систему с опозданием или Intel пропустит дату выпуска чипа.)Это означает, что есть стимул решать проблемы с производительностью, говоря людям покупать новое оборудование;не путем улучшения реальной проблемы: медленные операционные системы.Unix происходит из научных кругов, где бюджет ограничен, и вы можете получить докторскую степень, придумав новый способ сделать файловые системы быстрее;редко кто-то в академии получает очки за решение проблемы путем выдачи заказа на покупку.В Windows не существует заговора с целью замедления работы программного обеспечения, но вся экосистема зависит от запланированного устаревания.
Кроме того, поскольку Unix является открытым исходным кодом (даже если его не было, у всех был доступ к источнику), любой скучающий доктор наукстудент может прочитать код и стать известным, сделав его лучше.Этого не происходит в Windows (у MS есть программа, которая предоставляет ученым доступ к исходному коду Windows, им редко пользуются).Посмотрите на этот список работ, связанных с Unix: http://www.eecs.harvard.edu/margo/papers/ или посмотрите историю работ Остерхауса, Генри Спенсера или других.Черт возьми, одним из самых больших (и наиболее приятных для просмотра) дебатов в истории Unix были споры между Остерхаусом и Селцером http://www.eecs.harvard.edu/margo/papers/usenix95-lfs/supplement/rebuttal.html В мире Windows такого не происходит.Вы можете видеть, как поставщики сталкиваются друг с другом, но в последнее время это кажется гораздо более редким явлением, поскольку кажется, что все инновации находятся на уровне стандартов.
Вот как я это вижу.