LINUX.ORG.RU
ФорумTalks

Соревнование в медлительности компиляции Hello World

 ,


0

3

Мой кандидат, C++ & gcc-15

import std;

int main() {
  std::println("Hello World!");
}
$ time g++-15 \
  -g3 \
  -fsanitize=address \
  -flto=1 \
  -Wall \
  -Wextra \
  -Ofast \
  -fanalyzer \
  -std=c++26 \
  -fmodules \
  -fsearch-include-path bits/std.cc \
  main.cc

real	0m27,911s
user	0m27,290s
sys	0m0,613s

$ cat /proc/cpuinfo | grep name
model name	: Intel(R) Core(TM) i9-14900K
Почти 30 секунд, сможете обойти?

★★★★★

Последнее исправление: MOPKOBKA (всего исправлений: 3)

Ну тут убийственно всё. Ты мастер.

wandrien ★★★
()

clang 20 в Termux

time clang++ \                         ~/Trash
  -g3 \
  -fsanitize=address \
  -flto \
  -Wall \
  -Wextra \
  -Ofast \
  -std=c++26 \
  -fmodules \
  main.cc
clang++: warning: argument '-Ofast' is deprecated; use '-O3 -ffast-math' for the same behavior, or '-O3' to enable only conforming optimizations [-Wdeprecated-ofast]
main.cc:1:1: error: import of module 'std' imported non C++20 importable modules
    1 | import std;
      | ^
main.cc:4:8: error: no member named 'println' in namespace 'std'
    4 |   std::println("Hello World!");
      |   ~~~~~^
2 errors generated.
clang++ -g3 -fsanitize=address -flto -Wall -Wextra -Ofast -std=c++26 -fmodule  122.50s user 25.33s system 95% cpu 2:34.83 total
Werenter ★★★
()
Последнее исправление: Werenter (всего исправлений: 1)

Т.е. модули в итоге медленее инклюдов вышли? Кажется они задумывались для обратного )

snizovtsev ★★★★★
()
Ответ на: комментарий от Werenter

Несколько указанных опций не будут работать для Clang, и у него по другому выглядит использование модулей.

MOPKOBKA ★★★★★
() автор топика
Ответ на: комментарий от MOPKOBKA

Интересно что будет, если обойтись без модулей:

#include <print>

int main() {
  std::println("Hello World!");
}

и, соответственно, без -fmodules и -fsearch-include-path.

eao197 ★★★★★
()
Ответ на: комментарий от MOPKOBKA

Спасибо за результаты.

Да уж. Ради этого стоило в очередной раз усложнить язык :(

Интересно, а если компилировать вариант с модулями (но без -fanalyzer) несколько раз, результат меняется?

Может в первый раз компилятор строит какое-то прекомпилированное представление модуля std. Поэтому и получается, что первая компиляция долгая, а последующие должны быть значительно быстрее.

В свое время с precompiled headers была такая же история.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Интересно, а если компилировать вариант с модулями (но без -fanalyzer) несколько раз, результат меняется?

Результат не меняется, скорее всего нужно как то отдельно предкомпилировать модули и передавать их.

MOPKOBKA ★★★★★
() автор топика
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)