Закон Вирта
Закон Вирта — это неформальное эмпирическое правило в области разработки программного обеспечения, сформулированное швейцарским учёным в области вычислительной техники, лауреатом премии Тьюринга Никлаусом Виртом. В своей наиболее известной формулировке закон гласит: «Программное обеспечение ускоряется медленнее, чем аппаратное обеспечение». В более широком и часто цитируемом виде закон Вирта утверждает, что «Программное обеспечение становится медленнее быстрее, чем аппаратное становится быстрее». Это означает, что прирост производительности вычислительных систем, достигаемый за счёт улучшения аппаратного обеспечения (процессоров, памяти, накопителей), часто полностью или даже с избытком компенсируется неэффективностью, раздутостью и избыточным потреблением ресурсов со стороны нового программного обеспечения.
История и происхождение
Закон был впервые сформулирован Никлаусом Виртом в 1995 году в его статье «A Plea for Lean Software» (Призыв к «тощему» программному обеспечению), опубликованной в журнале IEEE Computer. В этой статье Вирт, известный как создатель языков программирования Pascal, Modula-2 и Oberon, а также разработчик концепции структурного программирования, выразил обеспокоенность тенденцией к усложнению и раздуванию (bloatware) программного обеспечения.
Вирт привёл конкретные примеры из своего опыта: текстовый редактор, написанный на языке Oberon для системы Ceres, занимал всего 4 килобайта и работал мгновенно. В то же время, современные ему (на 1995 год) коммерческие текстовые процессоры, такие как Microsoft Word, требовали десятки мегабайт дискового пространства и оперативной памяти, а их работа на новейших процессорах того времени (Intel 80486, Pentium) была не быстрее, а зачастую и медленнее, чем работа простого редактора на значительно более слабом оборудовании.
Статья Вирта стала реакцией на наблюдаемый феномен: разработчики, имея в распоряжении всё более мощные компьютеры, перестали оптимизировать код, полагаясь на «запас прочности» аппаратного обеспечения. Это привело к тому, что прирост производительности «железа» не приводил к пропорциональному ускорению работы пользовательских приложений.
Суть и формулировки
Закон Вирта часто рассматривается как частный случай или современная интерпретация более общего «закона убывающей отдачи» в контексте вычислительной техники. В отличие от закона Мура, который описывает объективный технологический прогресс (удвоение числа транзисторов на кристалле каждые два года), закон Вирта описывает субъективное и социальное явление — поведение разработчиков и индустрии.
Основные формулировки закона Вирта:
- Классическая (1995): «Программное обеспечение ускоряется медленнее, чем аппаратное обеспечение».
- Парадоксальная (наиболее популярная): «Программное обеспечение становится медленнее быстрее, чем аппаратное становится быстрее».
- Ироничная: «Что Intel даёт, Microsoft забирает» (популярная в сообществе пользователей Windows версия, приписываемая разным авторам).
Причины и механизмы действия
Закон Вирта объясняется несколькими ключевыми факторами, которые действуют в индустрии разработки ПО:
Раздувание программного обеспечения (Bloatware)
Это центральная причина. Разработчики, имея в распоряжении гигабайты памяти и многоядерные процессоры, перестают заботиться об эффективности кода. Они используют:
- Высокоуровневые языки и фреймворки: Java, .NET, JavaScript, Python и их библиотеки добавляют огромные слои абстракции, что увеличивает потребление памяти и времени выполнения.
- Избыточные зависимости: Подключение огромных библиотек ради одной функции, что приводит к загрузке и инициализации тысяч строк неиспользуемого кода.
- Графические интерфейсы и анимации: Сложные визуальные эффекты, прозрачность, тени, анимации требуют значительных вычислительных ресурсов, часто не добавляя функциональной ценности.
- Телеметрия и фоновые процессы: Современные приложения и операционные системы постоянно собирают данные, проверяют обновления, индексируют файлы, что нагружает процессор и диск.
Абстракция и потеря эффективности
Каждый слой абстракции (операционная система, виртуальная машина, фреймворк) добавляет накладные расходы. Программа, написанная на ассемблере или C с прямой работой с памятью, будет работать на порядки быстрее и эффективнее, чем аналогичная программа на Java или C#. Однако скорость разработки на высокоуровневых языках выше, что и делает их популярными.
Маркетинг и гонка функций
Производители ПО конкурируют, добавляя новые функции, даже если они не нужны большинству пользователей. Это приводит к постоянному усложнению кодовой базы. Каждая новая версия программы, как правило, требует больше ресурсов, чем предыдущая.
«Закон Вирта» как следствие других законов
Закон Вирта тесно связан с другими эмпирическими правилами:
- Закон Уоллера (Wirth's Law — иногда его путают с законом Гейтса): «Скорость коммерческого программного обеспечения, как правило, снижается на 50% каждые 18 месяцев», компенсируя выгоды от закона Мура.
- Закон Гейтса (Bill Gates): «Скорость коммерческого программного обеспечения падает на 50% каждые 18 месяцев», что является более ранней и менее формальной версией той же идеи.
Примеры и иллюстрации
Закон Вирта легко иллюстрируется на примерах из истории вычислительной техники:
- Текстовые редакторы: Текстовый редактор WordStar (1980-е) работал на компьютерах с процессором Z80 (4 МГц) и 64 КБ ОЗУ. Современный Microsoft Word (2020-е) требует многоядерный процессор с частотой выше 2 ГГц и 4-8 ГБ ОЗУ для комфортной работы, хотя его основные функции (набор текста, форматирование) не стали принципиально сложнее.
- Операционные системы: Windows 95 требовала 4 МБ ОЗУ и процессор 386DX. Windows 11 требует минимум 4 ГБ ОЗУ (рекомендуется 8 ГБ) и процессор с частотой 1 ГГц. При этом время загрузки и отклика интерфейса на современном оборудовании может быть не лучше, чем на старом — из-за обилия фоновых процессов, визуальных эффектов и систем безопасности.
- Веб-сайты: Простая HTML-страница 1990-х годов загружалась мгновенно. Современные веб-сайты, даже с простым текстом, могут загружать мегабайты JavaScript, CSS, шрифтов и трекеров, что приводит к заметным задержкам даже на быстрых соединениях и мощных устройствах.
Критика и ограничения
Закон Вирта не является физическим законом, а лишь наблюдением. Его критикуют за:
- Игнорирование прогресса: Современное ПО делает то, что было невозможно 20 лет назад: распознавание речи, машинный перевод, 3D-моделирование, видеоконференции. Эти функции требуют ресурсов.
- Субъективность: «Медленно» — это субъективное ощущение. Для одних пользователей загрузка в 2 секунды — норма, для других — катастрофа.
- Обратные примеры: Существуют области, где оптимизация критична (встраиваемые системы, ядро операционной системы, базы данных, игры), и там закон Вирта проявляется слабее. Многие современные алгоритмы (например, в криптографии или сжатии данных) стали значительно эффективнее.
- Стоимость разработки: Оптимизация кода стоит денег и времени. Часто дешевле купить более мощное «железо», чем платить программистам за переписывание кода на ассемблере.
Значение и влияние
Закон Вирта стал важным предостережением для индустрии. Он напоминает о ценности эффективности, лаконичности и «тощего» (lean) программного обеспечения. Он стимулирует развитие таких подходов, как:
- Оптимизация компиляторов: Современные компиляторы (например, GCC, LLVM) выполняют сложные оптимизации, частично компенсируя неэффективность исходного кода.
- Микроядерные архитектуры: Попытки создать операционные системы с минимальным ядром (например, Minix, QNX), где большинство сервисов работают в пространстве пользователя.
- Прогрессивные веб-приложения (PWA) и лёгкие версии сайтов: Стремление снизить вес веб-страниц.
- Языки системного программирования (Rust, Go): Они предлагают высокую производительность и контроль над памятью, сочетая это с безопасностью и удобством, что является ответом на раздувание, характерное для языков с автоматическим управлением памятью.
Закон Вирта остаётся актуальным и в XXI веке, особенно в контексте облачных вычислений и мобильных устройств, где эффективность кода напрямую влияет на время работы от батареи и стоимость облачных ресурсов. Он служит напоминанием о том, что технологический прогресс — это не только увеличение мощности, но и умение ею разумно распоряжаться.
Источники
- Wirth, N. (1995). A Plea for Lean Software. IEEE Computer, 28(2), 64-68.
- Niklaus Wirth. (1995). A Plea for Lean Software. Статья в журнале IEEE Computer.
- Raymond, E. S. (2003). The Art of Unix Programming. Addison-Wesley. (Обсуждается проблема раздувания ПО).
- Spolsky, J. (2000). The Law of Leaky Abstractions. Joel on Software. (Близкая тема о накладных расходах абстракций).
- Официальные системные требования Microsoft Windows 11 и Microsoft Office (разные версии) для сравнения с требованиями ранних версий.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →