• [^] # Re: Clang vs GCC

    Posté par . En réponse à la dépêche LLVM 3.2 et Clang 3.2 publiés. Évalué à 4. Dernière modification le 29 décembre 2012 à 18:23.

    si on veut avoir un code le plus portable possible.

    Pourquoi, il n'y a pas de flag pour virer les extensions avec clang? Gcc en a, et je m'en sers systématiquement, personnellement.

    Un autre avantage de clang sur GCC, c'est la consommation de ressources drastiquement inférieure lors de la compilation.
    C'est bien simple, sur mon 1015 pem, dual core, 2 thread par coeur, 1Go de ram, compiler avec Code::Blocks (enfin, c'est l'IDE qui lance la compilation, mais je précise, peut-être que ça peut avoir un impact) l'un des projets libres sur lesquels je travaille, qui galère dur sur le fichier "principal" qui implémente la fenêtre de l'application:

    • avec GCC si je me limite pas à 2 processus pour compiler, je sature la mémoire, donc ça swap dur, pendant de longues minutes. Avec 2 processus seulement, le processeur n'est exploité qu'a moitié.
    • avec clang, 4 processus, ça passe, sans swapper.

    Génération des binaires, avec les mêmes options de compilations (débug, pas d'optimisation):

    • g++ 2 processus : 3 minutes, 35 secondes (tiens, je perdais 5 secondes, bon à savoir… ou pas)
    • g++ 3 processus : 3 minutes, 30 secondes
    • g++ 4 processus : 4 minutes, 48 secondes
    • clang++ 3 processus : 2 minutes, 40 secondes
    • clang++ 4 processus : 2 minutes, 35 secondes

    La différence n'est pas énorme: clang prends juste 73,8% du temps de compilation de g++, différence sûrement due à la saturation de la ram. J'ai la flemme de faire les mêmes mesures sur ma tour qui a plus de mémoire, d'autant que le processeur n'a que 2 coeurs et 1 thread par coeur, donc la comparaison me semble un peu ridicule.

    Notes:

    • le PC est nettement plus lent après compilation avec G++, chose qui n'est pas prise en compte par les temps annoncés, parce que pas mesurable précisément. L'explication: faut tout sortir de la swap, même avec 2 processus !
    • j'ai, avec clang, l'avertissement suivant supplémentaire: "argument inutilisé -pg" (bon, ok, j'ai traduit) mais je doute qu'il justifie la différence de temps totale.

    Après, pour le binaire final, vu que je suis en pleine phase de développement, je n'ai jamais testé. De toute façon, j'ai comme un doute que ça joue énormément sur un programme classique.

    Je suis passé à clang il y a 1-2 semaines, avant, je pensais à booster ma ram à 2Go, depuis j'ai oublié pourquoi je voulais le faire :D
    C'est simple, en fait, avec clang, on peut travailler confortablement sans avoir de machine surpuissante. C'est important, pour qui ait adopté le développement comme occupation principale plus que l'électronique parce que ça coûte nettement moins cher.

    Clang, c'est le compilateur C* qui sera majoritairement utilisé sur les systèmes non microsoft (parce que les utilisateurs de MS, j'ai l'impression (erronée ?) qu'ils ne cherchent pas plus loin que le bout de leur nez quand ils veulent dev: MS VS only, malgré la lourdeur du bouzin) dans un future proche, pour moi, grâce à ses performances impressionnantes et ses fonctionnalités. Les messages d'erreur sont aussi nettement moins illisibles, depuis.