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

Programmation système Discussion :

Rune, un langage de programmation systèmes, inspiré de Python et présenté comme étant rapide


Sujet :

Programmation système

  1. #1
    Chroniqueur Actualités
    Avatar de Bruno
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Mai 2019
    Messages
    1 853
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2019
    Messages : 1 853
    Points : 36 409
    Points
    36 409
    Par défaut Rune, un langage de programmation systèmes, inspiré de Python et présenté comme étant rapide
    Rune, un langage de programmation systèmes, inspiré de Python et présenté comme étant rapide,
    de l'avis de certains développeurs, une bibliothèque aux langages existants aurait été préférable

    Rune est un langage de programmation systèmes inspiré de Python et conçu pour interagir avec les bibliothèques C et C++. Il possède des nombreuses fonctionnalités pour la sécurité, telles que la sécurité de la mémoire et le traitement en temps constant des secrets. Rune vise à être plus rapide que C++ pour la plupart des applications gourmandes en mémoire, grâce à sa gestion de la mémoire par Structure-of-Array (SoA). De l’avis de certains analystes, les langages comme Rust ou encore le C++ répondent déjà à ces besoins.

    Pour Ashley Williams, directeur exécutif par intérim de la fondation Rust, Rust est un langage qui donne du pouvoir à tout le monde, mais surtout aux gens qui pensent que la programmation système n'est pas pour eux. « L'une des forces motrices les plus puissantes du projet Rust est la croyance simultanée dans le pouvoir de la programmation système et l'engagement à faire en sorte que ce pouvoir soit utilisable par tous », avait-t-il déclaré lors de son discours d’ouverture de la RustConf 2020.

    Nom : Rune.jpg
Affichages : 19459
Taille : 2,4 Ko

    Les responsables du projet Rune estiment que « Rune est parfois plus rapide que le C. » Au lieu de la programmation basée sur les array-of-structure (AoS), Rune utilise les structure-of-array (SoA). Cela permet d'améliorer les performances du cache et de réduire l'utilisation de la mémoire, en partie parce que la plupart des références d'objets peuvent être 32 bits plutôt que 64 bits. Les tests de référence effectués à ce jour montreraient que les applications gourmandes en mémoire, telles que l'automatisation de la conception électronique, gagnent environ 40 % de vitesse tout en réduisant la mémoire de 20 %.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    func bignumModularMul(a, b, modulus, isSecret) {
        if isSecret {
            return fastModularMul(a, b, modulus)
        }
        return constTimeModularMul(a, b, modulus)
    }

    Considérons l'exemple suivant pour le traitement des secrets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Vérifier le MAC (code d'authentification du message) d'un message.  Un MAC est dérivé
    // d'un hachage sur le `macSecret` et le message.  Il garantit que le message n'a pas été
    // modifié, et a été envoyé par quelqu'un qui connaît `macSecret`.
    func checkMac(macSecret : secret(string), message : string, mac : string) -> bool {
        computedMac = computeMac(macSecret, message)
        return mac == computedMac
    }
    func computeMac(macSecret : string, message:string) -> string {
      // Un algorithme MAC populaire.
      return hmacSha256(macSecret, message)
    }

    Dans la plupart des langages, un acteur malveillant disposant de données temporelles précises peut falsifier un MAC sur un message de son choix, ce qui amène un serveur à l'accepter comme authentique.

    Supposons que l’acteur malveillant puisse savoir combien de temps il faut pour que mac == computedMac s'exécute. Si le premier octet d'un MAC choisi par l’acteur malveillant est faux pour le message, la boucle se termine après une seule comparaison. Avec 256 tentatives, l’acteur malveillant peut trouver le premier octet du MAC attendu pour le message contrôlé par l'attaquant. En répétant ce processus, l’acteur malveillant peut falsifier un MAC entier.

    Les responsables de Rune prétendent que ses utilisateurs sont protégés, car le compilateur voit que macSecret est secret, et donc que le résultat de hmacSha256 est secret. L'opérateur de comparaison de chaînes de caractères, lorsque l'un ou l'autre des opérandes est secret, s'exécute en temps constant, ne révélant aucune information temporelle à l’acteur de la menace. « Il faut toujours être prudent dans Rune, mais de nombreuses erreurs courantes comme celle-ci sont détectées par le compilateur, qui les corrige ou les signale comme des erreurs », écrivent-ils.

    En ce qui concerne la vitesse et la sécurité de la gestion de la mémoire de Rune, la classe ci-dessous peut être difficile à modéliser dans certains langages, mais elle est triviale dans SQL et Rune. Considérons une classe Humain.

    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
    class Human(self, name: string, mother: Human = null, father: Human = null) {
      self.name = name
      if !isnull(mother) {
        mother.appendMotheredHuman(self)
      }
      if !isnull(father) {
        father.appendFatheredHuman(self)
      }
    
      func printFamilyTree(self, level: u32) {
        for i in range(level) {
          print "    "
        }
        println self.name
        for child in self.motheredHumans() {
          child.printFamilyTree(level + 1)
        }
        for child in self.fatheredHumans() {
          child.printFamilyTree(level + 1)
        }
      }
    }
    
    relation DoublyLinked Human:"Mother" Human:"Mothered" cascade
    relation DoublyLinked Human:"Fater" Human:"Fathered" cascade
    
    adam = Human("Adam")
    eve = Human("Eve")
    cain = Human("Cain", eve, adam)
    abel = Human("Abel", eve, adam)
    alice = Human("Alice", eve, adam)
    bob = Human ("Bob", eve, adam)
    malory = Human("Malory", alice, abel)
    abel.destroy()
    adam.printFamilyTree(0u32)
    eve.printFamilyTree(0u32)

    Lorsqu'il est exécuté, il affiche

    Abel et Malory ne sont pas listés. Cela s'explique par le fait que Rune n'a pas seulement éliminé Abel, il a été détruit, ce qui a entraîné la destruction récursive de tous les enfants d'Abel. Les instructions de relation sont similaires aux colonnes des tables SQL. Une table avec une colonne Mère et Père a deux relations de plusieurs à un dans une base de données.

    Les instructions de relation donnent au compilateur Rune des indications essentielles pour l'optimisation de la mémoire. Les objets dont le compilateur peut prouver qu'ils sont toujours dans des relations de type cascade-suppression n'auraient pas besoin d'être comptés par référence. Les déclarations de relation indiquent également au compilateur qu'il doit mettre à jour le destructeur de Node pour détruire récursivement les enfants.

    Tout langage peut utiliser un type de données distinct pour les secrets et l'opérateur correspondant pour la comparaison en temps constant.

    Rune comme bibliothèque dans la plupart des langages existants

    Pour certains analystes, il n’existe pas de raisons nécessitant un nouveau langage et qui ne pourrait pas être implémenté sous forme de bibliothèque dans la plupart des langages existants (y compris les langages populaires comme le C++).
    RUST répond au besoin de sécurité mémoire

    Rust a été créé pour garantir des performances élevées similaires à celles offertes par le C et le C++, mais en mettant l'accent sur la sécurité du code, dont le manque est le talon d'Achille de ces deux langages. Cependant, Rust a plus que la sécurité de la mémoire de son côté. Les hautes performances lors du traitement de grandes quantités de données, le support de la programmation concurrente, ainsi qu'un compilateur efficace sont d'autres raisons pour lesquelles des poids lourds du logiciel utilisent le langage de programmation Rust.

    Caractéristiques du langage Rust

    Rust est un langage entièrement développé de façon ouverte. Il offre la possibilité de construire des logiciels fiables et efficaces. Ses domaines de prédilection étant la programmation système, les applications en ligne de commande, les applications Web via WebAssembly, les services réseaux et les systèmes embarqués. Le langage est également apprécié par sa communauté pour les raisons suivantes :

    • performance : Rust est un langage rapide et économique en mémoire, sans environnement d'exécution, ni ramasse-miettes, il peut dynamiser des services à hautes performances, s'exécuter dans des systèmes embarqués, et s'intégrer facilement à d'autres langages ;
    • fiabilité : le système de typage et le modèle d’ownership de Rust garantissent la sécurité mémoire ainsi que la sécurité des threads. Il permet d'éliminer de nombreuses variétés de bugs dès la compilation ;
    • productivité : Rust dispose d'une excellente documentation, d'un compilateur bienveillant, avec des messages d'erreur utiles. Le langage a également un gestionnaire de paquet et de compilation intégré, divers éditeurs intelligents avec autocomplétions et analyse de type. Il dispose également d’un outil de mise en forme automatique.

    C++

    C++ est un langage de programmation compilé permettant la programmation sous de multiples paradigmes, dont la programmation procédurale, la programmation orientée objet et la programmation générique. Ses bonnes performances, et sa compatibilité avec le C en font un des langages de programmation les plus utilisés dans les applications où la performance est critique.

    C'est un langage polyvalent, ce qui signifie qu'il peut être utilisé dans presque tous les cas. Cependant, en raison de ses règles syntaxiques complexes et de son utilisation globalement difficile, il est principalement dominant dans les applications qui nécessitent une grande vitesse, la simultanéité et un examen plus approfondi du fonctionnement du matériel.

    C++ est le langage de programmation qui a permis de créer des systèmes d'exploitation comme Microsoft Windows. En outre, le C++ est utilisé pour produire la majorité des jeux vidéo sur le marché.

    Source : Rune Team's

    Et vous ?

    À votre avis, le langage de programmation système Rune est-il pertinent ?

    Que pensez-vous de l'idée selon laquelle il n'existe pas de raison pour la création du langage Rune ?

    Croyez-vous qu'une bibliothèque pour les langages existants serait mieux qu'un nouveau langage ?

    Voir aussi :

    Rust est approuvé pour une utilisation côté serveur chez Meta, les principaux langages côté serveur supportés par Meta sont Hack, C++, Rust et Python

    Rust 1.63 est disponible et s'accompagne des fils d'exécution délimités, des propriété Rust pour les descripteurs de fichiers
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  2. #2
    Invité
    Invité(e)
    Par défaut
    - Pas de besoin précis ;
    - Pas de communauté motivée ;
    - Pas de géant de tech pour pousser.

    Bref, le langage finira aux oubliettes de l'histoire.

    On est bien loin d'un JavaScript qui était au bon moment, d'un Go aux qualités discutables mais avec Google pour le soutenir, ou d'un Julia dont les développeurs de paquets sont des spécialistes qui font référence dans leur domaine.

  3. #3
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour.

    En gros, un langage wrapper de C++. Rien de révolutionnaire quoi. Presque tous les langages le font.

Discussions similaires

  1. Réponses: 22
    Dernier message: 19/08/2022, 09h02
  2. Réponses: 2
    Dernier message: 29/12/2021, 21h26
  3. Réponses: 36
    Dernier message: 10/03/2020, 15h11
  4. Réponses: 11
    Dernier message: 15/10/2009, 09h54

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