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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Rust Discussion :

Google affirme qu'il est facile de remplacer C/C++ par Rust dans les firmwares


Sujet :

Rust

  1. #21
    Inactif  
    Profil pro
    undef
    Inscrit en
    F�vrier 2013
    Messages
    1 001
    D�tails du profil
    Informations personnelles :
    Localisation : France, Lot (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : undef

    Informations forums :
    Inscription : F�vrier 2013
    Messages : 1 001
    Par d�faut
    Citation Envoy� par fdecode Voir le message
    ...
    Reste qu'apparemment, il n'est pas possible de tout faire en Rust et certain projet comme construire une librairie Rust semble carr�ment impossible, l'algorithme de la racine carr�-inverse rapide ne semble pas non plus pouvoir �tre tol�r�e par le compilateur (sp�culatif, je n'ai pas essay� ; mais �tant donn� qu'il faille jouer avec les diff�rents motifs m�moire fonction du types des nombres, en Rust �a doit �tre un enfer) ; la compilation est affreusement lente quand il faut r�cup�rer tous les paquets Cargo pour un gros projet. Franchement pass� la hype, je ne vois pas comment Rust pourrait avoir une trajectoire diff�rente d'Ocaml ou Haskell, c'est un truc d'universit�/laboratoire qui ne semble pas pouvoir s'adapter � la r�alit� des entreprises.

  2. #22
    Membre confirm�
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2021
    Messages
    111
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2021
    Messages : 111
    Par d�faut
    Citation Envoy� par 23JFK Voir le message
    Reste qu'apparemment, il n'est pas possible de tout faire en Rust et certain projet comme construire une librairie Rust semble carr�ment impossible, l'algorithme de la racine carr�-inverse rapide ne semble pas non plus pouvoir �tre tol�r�e par le compilateur (sp�culatif, je n'ai pas essay� ; mais �tant donn� qu'il faille jouer avec les diff�rents motifs m�moire fonction du types des nombres, en Rust �a doit �tre un enfer) ; la compilation est affreusement lente quand il faut r�cup�rer tous les paquets Cargo pour un gros projet. Franchement pass� la hype, je ne vois pas comment Rust pourrait avoir une trajectoire diff�rente d'Ocaml ou Haskell, c'est un truc d'universit�/laboratoire qui ne semble pas pouvoir s'adapter � la r�alit� des entreprises.
    Cela a l'air tr�s personnels et �motionnels comme griefs. Je vais simplement r�pondre � la demande concr�te de votre message: "algorithme de la racine carr�-inverse rapide" (de quake, je suppose).
    Dans la mesure o� c'est un algorithme de calcul tr�s approximatif, et que l'instruction SSE RSQRT existe d�sormais, il me para�t assez peu int�ressant, mais il a quand m�me �t� facile de trouver un exemple d'impl�mentation [playground]:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    fn inv_sqrt(x: f32) -> f32 {
        let i = x.to_bits();
        let i = 0x5f3759df - (i >> 1);
        let y = f32::from_bits(i);
     
        y * (1.5 - 0.5 * x * y * y)
    }
     
     
    fn print_both(v: f32) {
        println!("quake: {}", inv_sqrt(v));
        println!("real:  {}", 1.0 / v.sqrt());
        println!();
    }
     
    fn main() {
        print_both(4.0);
        print_both(10.0);
        print_both(3.1415);
    }
    Ceci-dit, le code de quake n'est pas tr�s int�ressant puisque le calcul exact tient en 3 instructions machine.

  3. #23
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 704
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyr�n�es Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 704
    Par d�faut
    Citation Envoy� par 23JFK Voir le message
    Reste qu'apparemment, il n'est pas possible de tout faire en Rust et certain projet comme construire une librairie Rust semble carr�ment impossible
    Je vais supposer que tu t'es mal expliqu� parce qu'il est �vident que Rust peut faire des biblioth�ques. Le d�p�t standard de Rust contient plus de 150 000 crates dont la plupart sont des biblioth�ques.
    Si tu voulais parler de biblioth�que qui s'interface avec d'autre langages, c'est aussi possible, � condition d'avoir une interface qui respecte l'ABI C. C'est en effet limitant, mais c'est pareil pour tout les langages qui veulent s'interfacer avec d'autres.

    Citation Envoy� par 23JFK Voir le message
    l'algorithme de la racine carr�-inverse rapide ne semble pas non plus pouvoir �tre tol�r�e par le compilateur (sp�culatif, je n'ai pas essay� ; mais �tant donn� qu'il faille jouer avec les diff�rents motifs m�moire fonction du types des nombres, en Rust �a doit �tre un enfer) ;
    C'est un peu le probl�me, beaucoup de gens ont un avis tr�s tranch� sur Rust, bas� sur des sp�culations fausses. Rust peut tout � fait faire des manipulations de bit basiques, c'est juste que les hacks comme les conversions douteuses ou les d�passement volontaires, sont remplac�s par des fonctions explicites pour �tre sur qu'ils sont fait � dessein et que ce n'est pas des erreurs.

    Citation Envoy� par 23JFK Voir le message
    la compilation est affreusement lente quand il faut r�cup�rer tous les paquets Cargo pour un gros projet.
    �a c'est vrai, mais pour le coup on ne compile pas un gros projet de z�ro si souvent que �a. Quand on recompile un projet sur lequel on travaille, �a va beaucoup plus vite. �a reste plus lent que le C mais pas vraiment plus lent que des langages plus complexes comme le C++.

    Citation Envoy� par fdecode Voir le message
    Ceci-dit, le code de quake n'est pas tr�s int�ressant puisque le calcul exact tient en 3 instructions machine.
    Il me semble que la racine inverse rapide est encore pas mal utilis�e dans la 3D, l�approximation �tant relativement bonne et le gain sensible. Toutes les instructions machines ne se valent pas, 3 instructions complexes, peuvent prendre plus de cycles qu'une dizaine d'instructions plus simples.

  4. #24
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 704
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyr�n�es Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 704
    Par d�faut
    Apr�s v�rification, la racine inverse rapide est environ 2,5 fois plus rapide sur ma machine.

  5. #25
    Membre confirm�
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2021
    Messages
    111
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2021
    Messages : 111
    Par d�faut
    Citation Envoy� par Uther Voir le message
    Apr�s v�rification, la racine inverse rapide est environ 2,5 fois plus rapide sur ma machine.
    Je n'ai pas fait de tests de performance pour ma part.
    Le r�sultat de la compilation (en release) aboutit � �a:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    .LCPI4_0:
    	.long	0xbf000000
     
    .LCPI4_1:
    	.long	0x3fc00000
     
    inv_sqrt_quake:
    	movd	%xmm0, %eax
    	shrl	%eax
    	movl	$1597463007, %ecx
    	subl	%eax, %ecx
    	movd	%ecx, %xmm1
    	mulss	.LCPI4_0(%rip), %xmm0
    	mulss	%xmm1, %xmm0
    	mulss	%xmm1, %xmm0
    	addss	.LCPI4_1(%rip), %xmm0
    	mulss	%xmm1, %xmm0
    	retq
     
    .LCPI5_0:
    	.long	0x3f800000
     
    inv_sqrt:
    	sqrtss	%xmm0, %xmm1
    	movss	.LCPI5_0(%rip), %xmm0
    	divss	%xmm1, %xmm0
    	retq
    Donc 10 instructions pour la m�thode rapide contre 3 instructions pour la m�thode exacte.
    Toutefois, la m�thode rapide n'utilise pas de division ni d'op�ration racine carr�e.

    Ceci-dit, si je devais vraiment l'impl�menter pour ma part, j'inlinerais l'instruction rsqrtss.

  6. #26
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 704
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyr�n�es Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 704
    Par d�faut
    C'est pour �a que le nombre d'instruction machine n'est pas une m�trique suffisante pour mesurer la performance. Il faut aussi avoir une bonne id�e de l'efficacit� des instructions. Et encore le nombre de cycle d'une instruction peut varier en fonction du contexte.

    Les instructions de division et de racines carr�e sont connues pour �tre lentes. Toute l'int�r�t de l�algorithme de Quake, c'est qu'il n'utilise rien de plus complexe que la multiplications.

  7. #27
    Membre confirm�
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2021
    Messages
    111
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2021
    Messages : 111
    Par d�faut
    Citation Envoy� par Uther Voir le message
    C'est pour �a que le nombre d'instruction machine n'est pas une bonne m�trique pour mesurer la performance. Il faut aussi avoir une bonne id�e de l'efficacit� des instruction. Et encore le nombre de cycle d'une instruction peut varier en fonction du contexte.

    Les instructions de division et de racines carr�e sont connues pour �tre lentes. Toute l'int�r�t de l�algorithme de quake, c'est qu'il n'utilise rien de plus complexe que la multiplications.
    Bon, pour compl�ter ma r�ponse, voici une variante qui utilise l'instruction sse rsqrt.
    C'�tait plus facile que je ne le pensais. Je n'ai pas eu besoin d'inliner de l'assembleur (Playground) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    mod inner {
        #![allow(unused)]
        #[cfg(target_arch = "x86")]
        use std::arch::x86::*;
        #[cfg(target_arch = "x86_64")]
        use std::arch::x86_64::*;
        #[target_feature(enable = "sse")]
        pub unsafe fn inv_sqrt_sse(four_floats: [f32;4]) -> [f32;4] {
            let reg: __m128 = bytemuck::cast(four_floats);
            let inv_sqrt4 = _mm_rsqrt_ps(reg);
            bytemuck::cast(inv_sqrt4)
        }
    }
     
    #[no_mangle]
    fn inv_sqrt_sse(four_floats: [f32;4]) -> [f32;4] {
        unsafe { inner::inv_sqrt_sse(four_floats) }
    }
     
    #[no_mangle]
    fn inv_sqrt_quake(x: f32) -> f32 {
        let i = x.to_bits();
        let i = 0x5f3759df - (i >> 1);
        let y = f32::from_bits(i);
     
        y * (1.5 - 0.5 * x * y * y)
    }
     
    #[no_mangle]
    fn inv_sqrt(x: f32) -> f32 {
        1.0 / x.sqrt()
    }
     
     
    fn print_both(v: f32) {
        println!("quake: {}", inv_sqrt_quake(v));
        println!("real:  {}", inv_sqrt(v));
        println!();
    }
     
    fn main() {
        print_both(4.0);
        print_both(10.0);
        print_both(3.1415);
     
        println!("sse features");    
        if is_x86_feature_detected!("sse") {
            let f_4 = [4.0, 10.0, 3.1415, 2.0];
            let sf_4 = inv_sqrt_sse(f_4);
            for (f,sf) in f_4.into_iter().zip(sf_4) {
                println!("rsqrt({f}) = {sf}");
            }
        }
    }
    J'utilise des fonctions du core Rust pour l'architecture x86 (par cons�quent, non compilable sur d'autres architectures). Cela se programme en unsafe : l� on touche � des choses plut�t nightly pour l'instant. Bien s�r, ces quelques lignes unsafe ne sont pas UB.
    Dans quelques ann�es (ou mois), ces fonctions de calcul SIMD seront pleinement accessibles en safe et en stable.
    Voici le code compil� de la fonction bas�e sur l'architecture sse:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    inv_sqrt_sse:
    	movq	%rdi, %rax
    	movups	(%rsi), %xmm0
    	rsqrtps	%xmm0, %xmm0
    	movups	%xmm0, (%rdi)
    	retq
    Mais m�me apr�s cet exemple, il va encore y avoir quelqu'un qui va m'�crire que 'Rust ne permet pas de faire de l'optimisation de code', 'parce qu'on ne peut pas travailler bit � bit', 'qu'on n'acc�de pas aux subtilit�s du code machine', ♫♫♫♬ etc.

  8. #28
    Inactif  
    Profil pro
    undef
    Inscrit en
    F�vrier 2013
    Messages
    1 001
    D�tails du profil
    Informations personnelles :
    Localisation : France, Lot (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : undef

    Informations forums :
    Inscription : F�vrier 2013
    Messages : 1 001
    Par d�faut
    Citation Envoy� par fdecode Voir le message
    ...
    Ou que l'on oblig� de faire de l'unsafe et l'unstable.

  9. #29
    Membre confirm�
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2021
    Messages
    111
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2021
    Messages : 111
    Par d�faut
    Citation Envoy� par 23JFK Voir le message
    Ou que l'on oblig� de faire de l'unsafe et l'unstable.
    Et bien non! Il ne vous a pas �chapp� si vous �tes all�s sur le Playground, que le code en question fonctionne dans une version stable de Rust:
    Nom : CaptureIntrinsic.PNG
Affichages : 4939
Taille : 96,0 Ko
    Ce qui est nighty, c'est la librairie SIMD, pas les instructions machines r�pliqu�es dans le core Rust.

    Pour ce qui est de l'unsafe, il est tout naturellement utilis� ici pour inclure du code machine, donc ext�rieur � Rust, tout comme on utilise de l'unsafe pour inclure une librairie C : cela sert � isoler les parties du code non contr�l�es par la s�mantique de s�curisation de Rust. Il s'agit pour le coup du contexte d'utilisation le plus simple de l'unsafe: d�limiter le code externe. Pas de risque d'UB. Vous ne risqueriez donc pas d'y perdre des dents.

  10. #30
    Inactif  
    Profil pro
    undef
    Inscrit en
    F�vrier 2013
    Messages
    1 001
    D�tails du profil
    Informations personnelles :
    Localisation : France, Lot (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : undef

    Informations forums :
    Inscription : F�vrier 2013
    Messages : 1 001
    Par d�faut
    Citation Envoy� par fdecode Voir le message
    ...
    D�sol�, mais dans le code d'en haut, from_bits() semble tagu� unstable.

  11. #31
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 515
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 515
    Par d�faut
    Citation Envoy� par 23JFK Voir le message
    D�sol�, mais dans le code d'en haut, from_bits() semble tagu� unstable.
    f32::from_bits est stable depuis Rust 1.20.0. C'est le fait que cette fonction soit const (l'�quivalent de constexpr en C++) qui n'est pas encore stable.

  12. #32
    Membre confirm�
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2021
    Messages
    111
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2021
    Messages : 111
    Par d�faut
    Citation Envoy� par 23JFK Voir le message
    D�sol�, mais dans le code d'en haut, from_bits() semble tagu� unstable.
    En compl�ment de la r�ponse de Pyramidev:

    https://doc.rust-lang.org/book/appen...htly-rust.html

    Unstable Features

    There�s one more catch with this release model: unstable features. Rust uses a technique called �feature flags� to determine what features are enabled in a given release. If a new feature is under active development, it lands on master, and therefore, in nightly, but behind a feature flag. If you, as a user, wish to try out the work-in-progress feature, you can, but you must be using a nightly release of Rust and annotate your source code with the appropriate flag to opt in.

    If you�re using a beta or stable release of Rust, you can�t use any feature flags. This is the key that allows us to get practical use with new features before we declare them stable forever. Those who wish to opt into the bleeding edge can do so, and those who want a rock-solid experience can stick with stable and know that their code won�t break. Stability without stagnation.

    This book only contains information about stable features, as in-progress features are still changing, and surely they�ll be different between when this book was written and when they get enabled in stable builds. You can find documentation for nightly-only features online.

    Autrement dit, il n'est pas possible d'utiliser des composants nightly dans une configuration stable de Rust. Le fait que le playground soit ex�cut� en mode stable impose donc que tout le code utilis� soit stable.

    Il existe des moyens de contourner cette r�gle, mais un tel crime est tout � fait d�conseill� :

    https://crates.io/crates/nightly-crimes

    J'ai test� cette macro de Mara Bos et elle semble toujours fonctionner (mais pas son exemple, puisque la syntaxe exp�rimentale box value a �t� abandonn�e).

  13. #33
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 704
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyr�n�es Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 704
    Par d�faut
    Marrant, je savais qu'on pouvait contourner l'interdiction d'utiliser les fonctionnalit�s nightly, mais je pensais que le seul moyen �tait d'utiliser une variable d�environnement non document�e.
    Je savais pas que c'�tait possible avec une simple macro m�me si elle est tordue, pour le coup �a ressemble plut�t a un bug.

  14. #34
    Membre confirm�
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2021
    Messages
    111
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2021
    Messages : 111
    Par d�faut
    Citation Envoy� par Uther Voir le message
    pour le coup �a ressemble plut�t a un bug.
    Un bug qui date de 3 ans, sachant qui est Mara Bos?

    https://www.rust-lang.org/governance...ership-council

    Non, je ne pense pas que ce soit un bug, ou alors, c'est consid�r� comme mineur. Peut-�tre une tol�rance qu'ils rendront inutilisable un jour.

    Bonus:

    https://marabos.nl/atomics/

    https://cppcast.com/rust_lt_eq_gt_cpp/


  15. #35
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 704
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyr�n�es Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 704
    Par d�faut
    Je sais qui est Mara Bos, mais il y a des bugs bien plus vieux et plus impactants que �a dans le compilateur qui ne sont pas encore corrig�s car ils impliqueraient une refonte technique complexe et qu'on consid�re improbable de les d�clencher sans faire expr�s.
    Le plus connu �tant le bug https://github.com/rust-lang/rust/issues/57893 qui permet de faire un transmute sans bloc unsafe. En th�orie il casse compl�tement la s�curit� de Rust mais vu que le code qui peut d�clencher le probl�me n'a pas vraiment de sens dans du code normal, il n'est pas consid�r� urgent et attend la refonte du borrow checker � venir.

    Au vu du code tordu de la crate de Mairia Bos, j'ai l'impression qu'on est bien dans cette cat�gorie.

  16. #36
    Membre confirm�
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2021
    Messages
    111
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2021
    Messages : 111
    Par d�faut
    Citation Envoy� par Uther Voir le message
    Je sais qui est Mara Bos, mais il y a des bugs bien plus vieux et plus impactants que �a dans le compilateur qui ne sont pas encore corrig�s car ils impliqueraient une refonte technique complexe et qu'il sont consid�r�s impossible � d�clencher sans faire expr�s.
    Le plus connu �tant le bug https://github.com/rust-lang/rust/issues/57893 qui permet de faire un transmute sans bloc unsafe. En th�orie il casse compl�tement la s�curit� de Rust mais vu les condition improbables pour le d�clencher, il n'est pas consid�r� urgent et attend la refonte du borrow checker a venir.
    Excellent! Je ne connaissais pas!

  17. #37
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 704
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyr�n�es Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 704
    Par d�faut
    En relisant plus attentivement, ce n'est en effet pas un bug mais une exploitation particuli�rement gore des macro proc�durales et de la variable d�environnement non document�e dont je parlais.

    En gros le code du projet qui contient la macro est transform� en un sous projet et le projet en cours deviens un script de compilation qui va compiler le sous-projet avec la variable d�environnement secr�te qui permet d'ignorer l�interdiction. Bref une horreur a �viter.

  18. #38
    Membre confirm�
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2021
    Messages
    111
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2021
    Messages : 111
    Par d�faut
    Citation Envoy� par Uther Voir le message
    En relisant plus attentivement, ce n'est en effet pas un bug mais une exploitation particuli�rement gore des macro proc�durales et de la variable d�environnement non document�e dont je parlais.

    En gros le code du projet qui contient la macro est transform� en un sous projet et le projet en cours deviens un script de compilation qui va compiler le sous-projet avec la variable d�environnement secr�te qui permet d'ignorer l�interdiction. Bref une horreur a �viter.
    Je n'ai pas eu le temps de lire le code, mais je me doutais d'un truc comme �a.
    Les macros proc�durales permettent des choses vraiment tordues, et il faut s'astreindre � ne pas c�der � la tentation.
    Moi il m'�tait arriv� de m'�garer � associer une macro proc�durale avec un serveur pour certaines historisations et contr�les de m�tadonn�es (e.g. g�rer certaines constantes associ�es � des types) lors des compilations. C'�tait une vraie machine � gaz, surtout quand on utilisait en plus l'analyseur syntaxique de l'IDE.

  19. #39
    Communiqu�s de presse

    Femme Profil pro
    Traductrice Technique
    Inscrit en
    Juin 2023
    Messages
    2 509
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activit� : Traductrice Technique

    Informations forums :
    Inscription : Juin 2023
    Messages : 2 509
    Par d�faut Durant la transition vers les langages � m�moire s�curis�e, Google s�curise sa base de code C++ existante
    La transition de Google vers des langages � m�moire s�curis�e comme Rust prendra plusieurs ann�es : en attendant, Google applique �galement des principes de conception s�curis�e � sa base de code C++ existante.

    Selon Google, la transition C++ vers Rust prendra plusieurs ann�es. Pour garantir la s�curit� de ces utilisateurs, Google d�cide d'appliquer �galement les principes de conception s�curis�e � sa base de code C++ existante "chaque fois que cela est possible". Google a partag� comment elle a d�ploy� ses principes ainsi que l'impact qu'elle a constat� dans son code C++.

    Dans le monde de la programmation, les langages C et C++ ont longtemps domin� le d�veloppement de firmware. Cependant, Google a r�cemment fait une d�claration audacieuse : remplacer ces langages par Rust serait non seulement possible, mais aussi relativement facile. Les ing�nieurs d'Android avait notamment affirm� : "Vous verrez � quel point il est facile de renforcer la s�curit� avec des remplacements Rust".

    Un responsable de Google avait m�me d�clar� : "Les �quipes Rust chez Google sont deux fois plus productives que celles qui se servent de C++". Ajoutant : "Nous avons not� une r�duction de 50 % de l�effort n�cessaire pour mettre sur pied un service en langage Rust ainsi que pour en assurer la maintenance". Si ces d�clarations lancent un d�bat de la productivit� entre Rust et C++, elles confirment que Google est convaincu de la transition C++ vers Rust.

    Cependant, Google a r�cemment annonc� que sa transition vers le Safe Coding et les langages � m�moire s�curis�e "prendra plusieurs ann�es". C'est pourquoi ils appliquent �galement les principes de conception s�curis�e � la base de code C++ existante "dans la mesure du possible". Google pr�cise qu'ils travaillent �galement � "faciliter l'interop�rabilit� avec les langages � m�moire s�curis�e". La migration de C++ vers Safe Buffers r�duit l'�cart entre les langages, "ce qui simplifie l'interop�rabilit� et potentiellement m�me une �ventuelle traduction automatis�e".

    En effet, les attaquants exploitent r�guli�rement les vuln�rabilit�s li�es � la s�curit� de la m�moire spatiale, qui se produisent lorsque le code acc�de � une allocation de m�moire en dehors des limites pr�vues, pour compromettre les syst�mes et les donn�es sensibles. Ces vuln�rabilit�s repr�sentent un risque majeur pour la s�curit� des utilisateurs. Sur la base d'une analyse de Google, les vuln�rabilit�s de s�curit� spatiale repr�sentent 40 % des exploits de s�curit� de la m�moire au cours de la derni�re d�cennie :

    Nom : 1.jpg
Affichages : 43381
Taille : 31,3 Ko

    Voici les d�clarations de Google concernant sa base de code C++ :

    Google adopte une approche globale de la s�curit� de la m�moire. L'un des �l�ments cl�s de notre strat�gie est le codage s�curis� et l'utilisation de langages sans risque pour la m�moire dans le nouveau code. Cela entra�ne une diminution exponentielle des vuln�rabilit�s li�es � la s�curit� de la m�moire et am�liore rapidement le niveau de s�curit� global d'une base de code, comme le montre notre article sur l'�volution d'Android vers la s�curit� de la m�moire.

    Toutefois, cette transition prendra plusieurs ann�es, le temps d'adapter nos pratiques de d�veloppement et notre infrastructure. Pour garantir la s�curit� de nos milliards d'utilisateurs, nous devons donc aller plus loin : nous appliquons �galement les principes de conception s�curis�e � notre base de code C++ existante chaque fois que cela est possible.

    � cette fin, nous nous effor�ons d'introduire la s�curit� de la m�moire spatiale dans le plus grand nombre possible de nos bases de code C++, y compris Chrome et la base de code monolithique qui alimente nos services.

    Nous avons commenc� par activer la libc++ renforc�e, qui ajoute la v�rification des limites aux structures de donn�es C++ standard, �liminant ainsi une cat�gorie importante de bogues li�s � la s�curit� spatiale. Bien que le C++ ne devienne pas totalement s�r pour la m�moire, ces am�liorations r�duisent les risques, comme nous l'expliquons plus en d�tail dans notre point de vue sur la s�curit� de la m�moire, ce qui permet d'obtenir des logiciels plus fiables et plus s�rs.
    Voici comment Google met en place la libc++ renforc�e dans sa base de code :

    Structures de donn�es dont les limites sont v�rifi�es : Le fondement de la s�curit� spatiale

    L'une des principales strat�gies de Google pour am�liorer la s�curit� spatiale en C++ consiste � mettre en place un contr�le des limites pour les structures de donn�es courantes, en commen�ant par renforcer la biblioth�que standard C++ (libc++ de LLVM). La libc++ renforc�e introduit un ensemble de contr�les de s�curit� con�us pour d�tecter les vuln�rabilit�s telles que les acc�s hors limites en production.

    Par exemple, la libc++ renforc�e garantit que chaque acc�s � un �l�ment d'un std::vector reste dans les limites qui lui ont �t� attribu�es, en emp�chant les tentatives de lecture ou d'�criture au-del� de la zone de m�moire valide. De m�me, la libc++ renforc�e v�rifie qu'un std::optional n'est pas vide avant d'autoriser l'acc�s, emp�chant ainsi l'acc�s � une m�moire non initialis�e.

    Cette approche refl�te ce qui est d�j� une pratique standard dans de nombreux langages de programmation modernes comme Java, Python, Go et Rust. Ils int�grent tous la v�rification des limites par d�faut, reconnaissant son r�le crucial dans la pr�vention des erreurs de m�moire. Le C++ a �t� une exception notable, mais des efforts comme la libc++ renforc�e visent � combler cette lacune. Il convient �galement de noter qu'un renforcement similaire est disponible dans d'autres biblioth�ques standard C++, telles que libstdc++.


    Rehausser le niveau de s�curit� de base dans tous les domaines

    Apr�s le d�ploiement de la libc++ renforc�e dans Chrome en 2022, Google a d�cid� de la mettre par d�faut dans ses syst�mes de production c�t� serveur. Google affirme que cela a am�lior� la s�curit� de la m�moire spatiale dans tous ses services, y compris les composants essentiels aux performances de produits tels que Search, Gmail, Drive, YouTube et Maps. Bien qu'un tr�s petit nombre de composants restent exclus, Google annonce travailler activement pour r�duire ce nombre et � relever la barre de la s�curit� dans tous les domaines, m�me dans les applications pr�sentant un risque d'exploitation plus faible.

    Google commente notamment :

    L'impact de ces changements sur les performances a �t� �tonnamment faible, bien que la base de code C++ moderne de Google fasse un usage intensif de libc++. Le renforcement de libc++ a eu un impact moyen de 0,30 % sur les performances de nos services (oui, seulement un tiers de pour cent).

    Cela est d� � la fois � la capacit� du compilateur � �liminer les v�rifications redondantes lors de l'optimisation et � la conception efficace de la libc++ renforc�e. Bien qu'une poign�e de chemins de code critiques en termes de performances requi�rent encore l'utilisation cibl�e d'acc�s explicitement non s�curis�s, ces cas sont soigneusement examin�s en termes de s�curit�. Des techniques telles que les optimisations guid�es par le profil ont encore am�lior� les performances, mais m�me sans ces techniques avanc�es, la surcharge de la v�rification des limites reste minime.

    Nous surveillons activement l'impact de ces v�rifications sur les performances et nous nous effor�ons de minimiser toute surcharge inutile. Par exemple, nous avons identifi� et corrig� une v�rification inutile, ce qui a conduit � une r�duction de 15 % de la surcharge (de 0,35 % � 0,3 %), et nous avons revers� la correction au projet LLVM pour partager les avantages avec la communaut� C++ au sens large.

    Si, dans la plupart des cas, la surcharge de libc++ renforc�e est minime pour les applications individuelles, son d�ploiement � l'�chelle de Google a n�cessit� un engagement substantiel en termes de ressources informatiques. Cet investissement souligne notre volont� d'am�liorer la s�ret� et la s�curit� de nos produits.

    Des tests � la production

    L'activation de libc++ renforc�e n�cessite un d�ploiement en plusieurs �tapes afin d'�viter de perturber accidentellement les utilisateurs ou de provoquer une panne. Voici les �tapes que Google a suivi :

    1. Tests : Nous avons activ� pour la premi�re fois la libc++ renforc�e dans nos tests il y a plus d'un an. Cela nous a permis d'identifier et de corriger des centaines de bogues non d�tect�s auparavant dans notre code et nos tests.
    2. Adaptation : Nous avons laiss� le runtime renforc� "travailler" dans nos environnements de test et de pr�-production, ce qui a donn� aux d�veloppeurs le temps de s'adapter et de r�soudre les nouveaux probl�mes qui sont apparus. Nous avons �galement proc�d� � des �valuations approfondies des performances, en veillant � ce que l'impact sur l'exp�rience de nos utilisateurs soit minimal.
    3. D�ploiement progressif de la production : Nous avons ensuite d�ploy� la version renforc�e de libc++ en production sur plusieurs mois, en commen�ant par un petit ensemble de services et en l'�tendant progressivement � l'ensemble de notre infrastructure. Nous avons surveill� de pr�s le d�ploiement, en corrigeant rapidement tout plantage ou r�gression des performances.
    Google a �galement partag� l'impact de ce choix dans la base de code C++ :

    Pr�vention des exploits : La version renforc�e de libc++ a perturb� un exercice interne de l'�quipe rouge (test d'attaque) et en aurait emp�ch� un autre qui s'est d�roul� avant le renforcement. Selon Google, cela d�montre son efficacit� � contrecarrer les exploits. Les contr�les de s�curit� ont permis de d�couvrir plus de 1 000 bogues et permettraient d'�viter 1 000 � 2 000 nouveaux bogues par an au rythme actuel de d�veloppement du C++.

    Am�lioration de la fiabilit� et de la correction : Le processus d'identification et de correction des bogues d�couverts par la libc++ renforc�e a entra�n� une r�duction de 30 % du taux de d�faillance de segmentation de base dans la production, ce qui indique une am�lioration de la fiabilit� et de la qualit� du code. Au-del� des pannes, les v�rifications auraient �galement permis de d�tecter des erreurs qui se seraient autrement manifest�es sous la forme d'un comportement impr�visible ou d'une corruption de donn�es.

    Nom : 2.jpg
Affichages : 7718
Taille : 23,0 Ko

    D�bogage facilit� : La libc++ renforc�e aurait permis d'identifier et de corriger de nombreux bogues qui se cachaient dans la base de code C++ de Google depuis plus de dix ans. Les v�rifications transforment de nombreuses corruptions de m�moire difficiles � diagnostiquer en erreurs imm�diates et faciles � d�boguer, ce qui permet aux d�veloppeurs d'�conomiser un temps et des efforts pr�cieux.

    Combler le foss� avec des langages � m�moire s�curis�e

    Si le renforcement de libc++ offre des avantages imm�diats en ajoutant la v�rification des limites aux structures de donn�es standard, il ne s'agit que d'une pi�ce du puzzle en ce qui concerne la s�curit� spatiale. Google continue d'�tendre le contr�le des limites � d'autres biblioth�ques et travaillent � la migration de son code vers Safe Buffers, qui exige que tous les acc�s soient contr�l�s par les limites. Pour la s�curit� spatiale, les structures de donn�es renforc�es, y compris leurs it�rateurs, et les Safe Buffers sont n�cessaires.

    Google commente ce choix en concluant :

    La libc++ renforc�e est un moyen pratique et efficace d'am�liorer la s�curit�, la fiabilit� et le d�bogage du code C++ avec un surco�t minimal. C'est pourquoi nous encourageons vivement les organisations qui utilisent le langage C++ � activer le mode renforc� de leur biblioth�que standard de mani�re universelle et par d�faut.

    Chez Google, l'activation du mode renforc� de libc++ n'est que la premi�re �tape de notre voyage vers une base de code C++ spatialement s�re. En d�veloppant la v�rification des limites, en migrant vers Safe Buffers et en collaborant activement avec l'ensemble de la communaut� C++, nous souhaitons cr�er un avenir o� la s�curit� spatiale sera la norme.
    Conclusion

    Ces annonces peuvent questionner sur le projet de Google de migrer son code C++ vers Rust. Mais au-del� de l'am�lioration de la s�curit� du code C++, Google s'efforcerait �galement de faciliter l'interop�rabilit� avec les langages � s�curit� m�moire. La migration du code C++ vers les Safe Buffers r�duit l'�cart entre les langages, ce qui simplifie l'interop�rabilit� et potentiellement m�me une �ventuelle traduction automatis�e.

    Dans ce sens, Google avait accord� une subvention d�un million de dollars � la Fondation Rust pour soutenir les efforts d�interop�rabilit� avec le langage C++. En toile de fond, le g�ant technologique cherche � faciliter la transition � Rust que de plus en plus d�observateurs jugent sup�rieur � C et � C++ pour la s�curisation des logiciels.

    Source : Google

    Et vous ?

    Pensez-vous que ce choix de Google de renforc�e son code C++ est cr�dible ou pertinent ?
    Quel est votre avis sur le sujet ?

    Voir aussi :

    Google fait �tat d'une baisse des vuln�rabilit�s li�es � la s�curit� de la m�moire sur Android � mesure que l'utilisation de Rust augmente. Elles seraient pass�es de 223 en 2019 � 85 en 2022

    Les d�tracteurs du Rust s'unissent autour de l'initiative Fil-C : Une impl�mentation s�curis�e des langages C et C++, destin�e � redonner au langage C sa grandeur

    �ject� du top 3, le langage C recule dans l'indice TIOBE, Java et Rust gagnent en popularit�, car les d�veloppeurs recherchent des langages s�curis�s et faciles � apprendre

Discussions similaires

  1. R�ponses: 6
    Dernier message: 27/11/2017, 14h20
  2. R�ponses: 11
    Dernier message: 25/11/2016, 01h12
  3. Gingerbread deux fois plus instable que KitKat
    Par St�phane le calme dans le forum Actualit�s
    R�ponses: 11
    Dernier message: 01/04/2014, 15h33
  4. Sur mobile, les Data URI sont 6 fois plus lentes que les requ�tes HTTP
    Par rodolphebrd dans le forum G�n�ral Conception Web
    R�ponses: 0
    Dernier message: 30/07/2013, 10h32
  5. R�ponses: 41
    Dernier message: 20/09/2012, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo