IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Microsoft dévoile un nouvel optimiseur de code avancé pour Visual C++
Disponible en préversion

Le , par dourouc05

25PARTAGES

13  0 

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de dourouc05
Responsable Qt & Livres https://www.developpez.com
Le 09/05/2016 à 14:12
Citation Envoyé par MaximeCh  Voir le message
quand on parle représentation intermédiaire ce n'est pas de l'assembleur? Ca a quelle forme?

C'est un assembleur de haut niveau, qui comprend parfois la notion de fonction, mais n'a pas toutes les fonctionnalités d'un langage évolué (pas de conditions ou de boucles, mais bien des sauts).

Petit exemple en Julia. Tu as un bout de code comme 1+1, qui est traduit en langage intermédiaire par la commande @code_llvm 1+1 (ici, LLVM, avec un machin qui ressemble à une fonction et comprend la notion de type, par exemple entier sur 64 bits) :

Code x : Sélectionner tout
1
2
3
4
5
define i64 @"julia_+_6364"(i64, i64) { 
top: 
  %2 = add i64 %1, %0 
  ret i64 %2 
}

Au contraire, en assembleur (@code_native 1+1), tu as des instructions de plus bas niveau (notamment pour gérer les appels de fonction), avec une perte de l'information de type :

Code asm : Sélectionner tout
1
2
3
4
5
6
7
.text 
        pushq   %rbp 
        movq    %rsp, %rbp 
        addq    %rdx, %rcx 
        movq    %rcx, %rax 
        popq    %rbp 
        ret
Citation Envoyé par foetus  Voir le message
dans les nouvelles normes C++ 17 19 22, ils veulent refaire le système d'include, un peu à la la Java (dynamique versus statique). Mais parce que l'IR n'est pas normalisée, cela coince si je ne me trompe pas

Si j'ai bien vu, pour les modules, ils ne prévoient pas un format standardisé (compatible entre compilateurs), "simplement" une syntaxe commune. Ces fichiers ne contiendraient pas de représentation intermédiaire, mais directement du code objet, qui serait utilisé un peu comme des bibliothèques partagées ou statiques. Sans garantie non plus ! Détails chez Microsoft : https://blogs.msdn.microsoft.com/vcb...2015-update-1/
3  0 
Avatar de foetus
Expert éminent https://www.developpez.com
Le 09/05/2016 à 13:46
Citation Envoyé par MaximeCh Voir le message
quand on parle représentation intermédiaire ce n'est pas de l'assembleur? Ca a quelle forme?
C'est comme du bytecode Java

Et tu as un début de commencement de piste SSA

Et justement, si je ne dis pas de bêtises , dans les nouvelles normes C++ 17 19 22, ils veulent refaire le système d'include, un peu à la Java (dynamique versus statique). Mais parce que l'IR n'est pas normalisée, cela coince.
1  0 
Avatar de acx01b
Membre averti https://www.developpez.com
Le 14/05/2016 à 21:44
@dourouc05 : je ne dirais pas du tout assembleur, plutôt language bas niveau dans les instructions, mais de très haut niveau dans l'execution-flow.
notamment il travaille sur des graphes, après telle boucle, tel bloc d'instruction, puis tel appel récursif, le tout dans telle fonction, elle-même placée dans telle .dll, et le tout avec des problèmes de cache mémoire, de dépliement de boucles et d'appels récursifs, de simplification de tests redondants (notamment en C++ les type-check, genre dynamic-cast ou même appel virtuel), etc.

c'est notamment pour ça qu'il ne faut pas trop faire de "hacks" genre modifier un pointeur pour le remplacer par un int, etc. car sinon l'optimiseur ne comprend plus rien à l'execution-flow, voire se plante.

et pour conclure, c'est à cause de cet execution-flow que les bytecodes intermédiaires et les just-in-time compiler et les gestionnaires de mémoires sont intéressants, car en théorie ils sont capables de se servir du vrai execution-flow (qui dépend du contexte) pour optimiser certaines choses à l'exécution. (même si pour le moment ils sont loin d'être aussi élaborés : ils sont loin de "comprendre" le code)
1  0 
Avatar de MaximeCh
Membre éprouvé https://www.developpez.com
Le 09/05/2016 à 13:39
Bonjour,

Je n'ai pas tout lu je suis perdu : quand on parle représentation intermédiaire ce n'est pas de l'assembleur? Ca a quelle forme?
0  0 
Avatar de temoanatini
Membre averti https://www.developpez.com
Le 10/05/2016 à 12:32
encore un effort
0  0 
Avatar de ChristianRoberge
Membre habitué https://www.developpez.com
Le 31/05/2016 à 12:03
Enfin, Microsoft met le paquet pour améliorer le C++. Pourvu que cela ne s'arrête pas en chemin.
0  0 
Avatar de athlon64
Membre confirmé https://www.developpez.com
Le 08/05/2016 à 16:55
C'est du bon boulot.

Mais c'est dommage de toujours voir Microsoft dormir dans ses lauriers tant qu'il n' a pas de concurrence pour lui voler de part de marché...

"L'Apple de Steve Jobs" n'avait pas cette mentalité...
0  1