Исследовательская группа из Португалии провела обширное исследование, изучающее влияние различных языков программирования на потребление энергии, время выполнения и использование памяти. Результаты были опубликованы в статье "Энергоэффективность различных языков программирования".
Выявлены самые энергоэффективные языки программирования: различия в потреблении энергии среди 27 языков программирования
Исследование охватывало 27 языков программирования, для оценки которых использовались решения 10 стандартных алгоритмических задач из проекта Computer Language Benchmarks Game (CLBG). Это позволило исследователям оценить потребление энергии, скорость и объем памяти каждого языка в одинаковых условиях.
Тесты проводились на системе Linux Ubuntu Server 16.10 с процессором Haswell Intel Core i5-4460 и 16 ГБ оперативной памяти. Потребление энергии измерялось с помощью инструмента Intel Running Average Power Limit. Каждая программа запускалась 10 раз для обеспечения надежных результатов.
C и Rust среди самых энергоэффективных
Результаты подтвердили, что язык C остается самым быстрым и энергоэффективным. Однако производительность варьировалась в зависимости от задачи. Например, при сканировании базы данных ДНК Rust показал лучшую энергоэффективность, тогда как C занял третье место по потреблению энергии и второе по скорости.
Fortran также продемонстрировал высокую энергоэффективность в некоторых тестах, хотя его время выполнения было медленнее по сравнению с другими лидерами.
Скорость не всегда означает меньшее потребление энергии
Исследователи оспорили предположение, что более быстрые программы потребляют меньше энергии. Их данные показали, что скорость выполнения и потребление энергии не всегда коррелируют. В одном из тестов программа на Chapel выполнилась на 55% быстрее, чем её аналог на Pascal, но Pascal использовал на 10% меньше энергии.
Исследование также показало, что в среднем на процессор приходится 88% потребляемой энергии, независимо от того, компилируются программы, интерпретируются или выполняются на виртуальной машине. Интерпретируемые языки продемонстрировали большую изменчивость в использовании энергии процессора, от 81,57% до 92,90%.
Компилируемые языки лидируют по энергии и скорости
Компилируемые языки, такие как C, Rust, C++ и Ada, доминировали как по энергоэффективности, так и по скорости выполнения. В среднем они потребляли всего 120 джоулей (J) для выполнения решений, по сравнению с 576J для языков виртуальной машины и 2365J для интерпретируемых языков.
Топ-5 самых энергоэффективных и быстрых языков включают:
- C (57J, 2019мс)
- Rust (59J, 2103мс)
- C++ (77J, 3155мс)
- Ada (98J, 3740мс)
- Java (114J, 3821мс)
В отличие от них, интерпретируемые языки, такие как Lua, Python, Perl, Ruby и TypeScript, оказались самыми медленными и энергозатратными.
Использование памяти демонстрирует схожие тенденции
Компилируемые языки также оказались более эффективными по использованию памяти. Pascal, Go, C, Fortran и C++ использовали меньше всего памяти, при этом Pascal использовал всего 66 мегабайт (MB). Интерпретируемые языки, такие как JRuby, Dart, Lua и Perl, заняли нижние позиции по использованию памяти, некоторые из них требовали более 400MB.
Анализ по парадигмам программирования показал, что императивные языки были наиболее эффективными как по потреблению энергии, так и по времени выполнения. Программы на императивных языках потребляли в среднем 125J и выполнялись за 5585 миллисекунд, значительно превосходя объектно-ориентированные, функциональные и скриптовые парадигмы.
Нет универсального лучшего языка
Несмотря на эти результаты, исследователи подчеркнули, что ни один язык не превосходит остальные во всех сценариях. Факторы, такие как качество компилятора, используемые библиотеки и конкретные требования приложения, все влияют на потребление энергии и производительность.
В сценариях, где критичны как потребление энергии, так и время выполнения, C оказался лучшим вариантом. При учете энергии и использования памяти вместе, C и Pascal стали топовыми выборами. Для разработчиков, оптимизирующих все три метрики — энергию, время и память — C, Pascal и Go были определены как сильные кандидаты.
Дальнейшие исследования и практическое применение
Данные исследования были сделаны общедоступными для поддержки дальнейших исследований в области энергоэффективного программирования. Выводы особенно актуальны для разработчиков мобильных приложений, IoT-устройств и других приложений, где потребление энергии является важным ограничением.
Исследование предлагает ценные инсайты, но также подчеркивает сложность темы. Как заключили авторы, "Ситуация, в которой будет использоваться язык, является ключевым аспектом для определения, является ли этот язык наименее энергозатратным вариантом."
Полное освещение исследования было предоставлено Дэвидом Касселом для The New Stack. Кассел освещает технологические новости более двух десятилетий, сотрудничая с такими изданиями, как CNN, MSNBC и Wall Street Journal Interactive.
Очень интересное исследование! Не ожидал, что C и Rust будут настолько энергоэффективными. Но удивило, что скорость не всегда связана с меньшим энергопотреблением. Это подчеркивает необходимость тщательного выбора языка для конкретных задач.