\o/ enfin une nouvelle version (expérimentale, toutefois) du meilleur compilateur pour windows: mingw, qui était scotché à la 3.4 depuis un peu trop longtemps.
C'est étrange, quand je pense à un compilateur pour Windows, c'est plutôt ceux de Microsoft, Borland ou Intel qui me viennent à l'esprit. Comment MinGW, issu d'un compilateur pour une autre plate-forme, peut-il être le meilleur?
C'est le plus polyvalent, mais pas nécessairement le meilleur pour compiler du code C++ optimisé pour Windows. Aussi, il a l'avantage d'être libre, bien que je doute qu'il y est beaucoup d'utilisateurs qui vont modifier le code source.
S.V.P., soyez gentil, je suis un pauvre utilisateur de Windows.
Et bien à ma grande surprise, g++-4.2 génère un code largement plus rapide que Visual C++ 8.0 !!! J'ai récemment eu l'occasion de porter du code Linux sous Windows ... et j'ai commencé par MinGW (car plus facile) mais je l'ai aussi porté sous Visual C++ 8.0, justement parce que je me disais que ce serait plus rapide comme ça. Et bien non ! Avec g++-4.2 j'ai un gain de performances de l'ordre de 15% par rapport à Visual C++ 8.0. Bien sûr, le test a été fait après fignolage des options de compil des deux côtés. Le plus étonnant est que mon code tourne toujours 5% plus vite sous Linux que sous windows, même avec le même compilo O_o
Comme quoi l'équipe de GCC a fait des prouesses avec la version 4.2 !!! Reste plus qu'à optimiser le compilo lui-même (l'objectif de la version 5 si je me souviens bien).
Puis les trucs qu'un compilo est capable d'optimiser ça me semble plutôt être du code machine, donc dépendant de l'architecture et non du système d'exploitation d'où le fait de comparer des compilos qui produise du code « portable » (plus qu'à avoir les syscalls qui vont bien derrière ;-).
C'est vrai que gcc 4.2 est super sympa, mais bon mon crossdev me permettait déjà de générer du mingw32 (en cross compilant bien sûr) avec ce compilo.
Je l'avoue, je n'y connais rien. Je compile avec les réglages par défaut quel que soit le compilateur. Par contre, j'ai mentionné le compilateur de Intel qui lui a un avantage sur ses processeurs.
Quelles sont les différences au niveau des librairies? C'est plutôt là que je voyais un avantage pour les librairies écrites par Microsoft qui connaît sûrement mieux les détails de l'API Win32. Je suppose que chaque compilateur a sa propre librairie STL par exemple.
Aussi, est-ce complexe de porter une application qui utilisent des librairies dites standards vers MinGW?
Le compilo n'a d'habitude pas grand-chose a voir avec l'OS sur lequel il tourne(il y a 2-3 trucs genre le format de l'executable, ...), c'est le processeur sous-jacent qui compte principalement.
Pour ce qui est de l'API, il vient du platform SDK, qui n'est pas specifique a VC++ et est utilisable par d'autres compilos, bref c'est meme topo pour tous les compilos.
Pour ce qui est de STL, effectivement chaque compilo a tendance a avoir sa version, mais STL ca n'a de nouveau rien a voir avec l'OS, il s'agit simplement de structures de donnees en memoire, quel que soit l'OS c'est quasiment la meme chose(a 2-3 details pres niveau optimisations).
Si j'ai bon souvenir, la gestion des exceptions des compilateurs c++ est dépendante du système d'exploitation. Histoire de pouvoir catcher certains signaux par exemple. ce qui peut impacter les performances.
De même, l'allocation mémoire via l'opérateur "new", ce qui n'est pas rien, est dépendante du système d'exploitation.
Ces deux éléments là, à eux tous seuls, peuvent changer pas mal de choses d'un OS à un autre...
> Si j'ai bon souvenir, la gestion des exceptions des compilateurs c++ est dépendante du système d'exploitation.
Non. Tout ce qui est nécessaire, c'est de dépiler la pile des appels de fonction. Il n'y a pas d'appel système.
> Histoire de pouvoir catcher certains signaux par exemple.
Toujours pas. C'est une fonction qui va "catcher" les signaux, puis c'est (ou non) renvoyé à une exception C++. Ce renvoi est fait en C++ et n'utilise aucun appel système.
NB : les exceptions en C++ ne sont pas des "signaux" unix. C'est un mécanisme équivalent à longjump du C (j'ai oublié le nom exacte de la fonction). C'est équivalent mais en beaucoup beaucoup plus "luxueux" et sûr.
> De même, l'allocation mémoire via l'opérateur "new", ce qui n'est pas rien, est dépendante du système d'exploitation.
Oui car toute allocation mémoire dépend de l'OS (sauf système très particulier).
Mais il est possible d'allouer un gros bloque de mémoire (via un appel système) puis d'utiliser new sans jamais faire d'appel système.
l'avantage d'un compilo libre est qu'avec tu peut tout faire, avec le visual c++ de microsoft il t'es interdit de faire certaine choses, dont un compilateur par exemple.
donc bon, c'est pour cela que gcc est vraiment la brique de base de la liberté meme si tu ne modifie pas les sources
On oubliera pas que cette version de mingw est également disponible sous les OS du bien, permettant de créer des builds Win32 quand comme moi, on a strictement aucune installation Windows à la maison.
# Le meilleur ?
Posté par supergab . Évalué à 5.
C'est étrange, quand je pense à un compilateur pour Windows, c'est plutôt ceux de Microsoft, Borland ou Intel qui me viennent à l'esprit. Comment MinGW, issu d'un compilateur pour une autre plate-forme, peut-il être le meilleur?
C'est le plus polyvalent, mais pas nécessairement le meilleur pour compiler du code C++ optimisé pour Windows. Aussi, il a l'avantage d'être libre, bien que je doute qu'il y est beaucoup d'utilisateurs qui vont modifier le code source.
S.V.P., soyez gentil, je suis un pauvre utilisateur de Windows.
[^] # Re: Le meilleur ?
Posté par harbort1 . Évalué à 10.
Comme quoi l'équipe de GCC a fait des prouesses avec la version 4.2 !!! Reste plus qu'à optimiser le compilo lui-même (l'objectif de la version 5 si je me souviens bien).
[^] # Re: Le meilleur ?
Posté par Émilien Tlapale . Évalué à 3.
C'est vrai que gcc 4.2 est super sympa, mais bon mon crossdev me permettait déjà de générer du mingw32 (en cross compilant bien sûr) avec ce compilo.
[^] # Re: Le meilleur ?
Posté par supergab . Évalué à 3.
Quelles sont les différences au niveau des librairies? C'est plutôt là que je voyais un avantage pour les librairies écrites par Microsoft qui connaît sûrement mieux les détails de l'API Win32. Je suppose que chaque compilateur a sa propre librairie STL par exemple.
Aussi, est-ce complexe de porter une application qui utilisent des librairies dites standards vers MinGW?
[^] # Re: Le meilleur ?
Posté par pasBill pasGates . Évalué à 10.
Pour ce qui est de l'API, il vient du platform SDK, qui n'est pas specifique a VC++ et est utilisable par d'autres compilos, bref c'est meme topo pour tous les compilos.
Pour ce qui est de STL, effectivement chaque compilo a tendance a avoir sa version, mais STL ca n'a de nouveau rien a voir avec l'OS, il s'agit simplement de structures de donnees en memoire, quel que soit l'OS c'est quasiment la meme chose(a 2-3 details pres niveau optimisations).
[^] # Re: Le meilleur ?
Posté par ecyrbe . Évalué à 6.
De même, l'allocation mémoire via l'opérateur "new", ce qui n'est pas rien, est dépendante du système d'exploitation.
Ces deux éléments là, à eux tous seuls, peuvent changer pas mal de choses d'un OS à un autre...
[^] # Re: Le meilleur ?
Posté par IsNotGood . Évalué à 5.
Non. Tout ce qui est nécessaire, c'est de dépiler la pile des appels de fonction. Il n'y a pas d'appel système.
> Histoire de pouvoir catcher certains signaux par exemple.
Toujours pas. C'est une fonction qui va "catcher" les signaux, puis c'est (ou non) renvoyé à une exception C++. Ce renvoi est fait en C++ et n'utilise aucun appel système.
NB : les exceptions en C++ ne sont pas des "signaux" unix. C'est un mécanisme équivalent à longjump du C (j'ai oublié le nom exacte de la fonction). C'est équivalent mais en beaucoup beaucoup plus "luxueux" et sûr.
> De même, l'allocation mémoire via l'opérateur "new", ce qui n'est pas rien, est dépendante du système d'exploitation.
Oui car toute allocation mémoire dépend de l'OS (sauf système très particulier).
Mais il est possible d'allouer un gros bloque de mémoire (via un appel système) puis d'utiliser new sans jamais faire d'appel système.
[^] # Re: Le meilleur ?
Posté par Anonyme . Évalué à 10.
donc bon, c'est pour cela que gcc est vraiment la brique de base de la liberté meme si tu ne modifie pas les sources
# ...
Posté par Anonyme . Évalué à 10.
Bravo aux programmeurs !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.