Складність у цьому пов'язана з тим, що 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) рекомендує вам помістити кожну главу в інший файл і # включити їх разом.
Unix орієнтована на високу продуктивність; Windows орієнтована на досвід користувача
Unix запустився в серверній кімнаті: немає інтерфейсу користувача. Користувачі бачать лише швидкість. Тому швидкість - пріоритет.
Windows запустилася на робочому столі: Користувачі дбають лише про те, що вони бачать, і вони бачать інтерфейс користувача. Тому більше енергії витрачається на поліпшення інтерфейсу, ніж продуктивність.
Екосистема Windows залежить від запланованого застарівання. Навіщо оптимізувати програмне забезпечення, коли нове обладнання лише за рік-два?
Я не вірю в теорії змови, але якби я це зробив, я зазначив би, що в культурі Windows менше стимулів для підвищення продуктивності. Бізнес-моделі Windows залежать від людей, які купують нові машини, наприклад, годинниковий механізм. (Ось чому ціна акцій тисяч компаній впливає, якщо MS затримує операційну систему із запізненням або якщо Intel пропустила дату випуску чіпів.) Це означає, що існує стимул вирішувати проблеми продуктивності, кажучи людям купувати нове обладнання; не шляхом вдосконалення реальної проблеми: повільні операційні системи. Unix походить з наукових шкіл, де бюджет обмежений, і ви можете отримати доктор наук, придумавши новий спосіб зробити файлові системи швидшими; рідко хтось із навчальних закладів отримує бали за вирішення проблеми, видаючи замовлення на купівлю.
Крім того, оскільки Unix є відкритим кодом (навіть коли цього не було, кожен мав доступ до джерела), будь-який набридлий докторант може прочитати код та стати відомим, покращивши його. У Windows це не відбувається (MS має програму, яка надає вченим доступ до вихідного коду Windows, цим рідко користуються). Подивіться на цю підбірку праць, що стосуються Unix: http://www.eecs.harvard.edu/margo/papers/ або подивіться історію праць Остергауза, Генрі Спенсера та інших. Хек, одна з найбільших (і найприємніших для перегляду) дебатів в історії Unix - це повернення та пересування між Osterhaus та Selzer http://www.eecs.harvard.edu/margo/papers/usenix95-lfs/supplement/rebuttal. html
Ви не бачите подібного, що відбувається в світі Windows. Ви можете побачити постачальників, які налагоджують один одного, але останнім часом це здається набагато рідкіснішим, оскільки інновації здаються на рівні стандартних стандартів.
Ось як я це бачу.