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

Go Discussion :

Présentation de Borgo : un langage de programmation statiquement typé qui se compile en Go


Sujet :

Go

  1. #1
    Communiqués de presse

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

    Informations professionnelles :
    Activité : Traductrice Technique

    Informations forums :
    Inscription : Juin 2023
    Messages : 2 257
    Par défaut Présentation de Borgo : un langage de programmation statiquement typé qui se compile en Go
    Présentation de Borgo : un langage de programmation statiquement typé qui se compile en Go, combinant la simplicité de Go et la sécurité de Rust.

    Voici la présentation du langage de programmation Borgo, un langage qui se veut simple comme Go, mais avec la sécurité de Rust.

    Je veux un langage pour écrire des applications qui soit plus expressif que Go, mais moins complexe que Rust.

    Go est simple et direct, mais je regrette souvent qu'il n'offre pas plus de sécurité de type. Rust est très agréable à utiliser (au moins pour le code à un seul thread) mais il est trop large et complexe, parfois douloureusement.

    Borgo est un nouveau langage qui se transpose à Go. Il est entièrement compatible avec les paquets Go existants.

    La syntaxe de Borgo est similaire à celle de Rust, avec des points-virgules optionnels.
    Nom : 1.jpg
Affichages : 90995
Taille : 15,4 Ko


    Fonctionnalités

    • Types de données algébriques et filtrage



      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      use fmt
       
      enum NetworkState {
          Loading,
          Failed(int),
          Success(string),
      }
       
      let msg = match state {
          NetworkState.Loading => "still loading",
          NetworkState.Failed(code) => fmt.Sprintf("Got error code: %d", code),
          NetworkState.Success(res) => res,
      }

    • Option<T> au lieu de nil



      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      // import packages from Go stdlib
      use fmt
      use os
       
      let key = os.LookupEnv("HOME")
       
      match key {
          Some(s) => fmt.Println("home dir:", s),
          None => fmt.Println("Not found in env"),
      }

    • Result<T, E> au lieu de plusieurs valeurs de retour



      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      use fmt
      use net.http
       
      fn makeRequest() -> Result<int, error> {
          let request = http.Get("http://example.com")
       
          match request {
              Ok(resp) => Ok(resp.StatusCode),
              Err(err) => Err(fmt.Errorf("failed http request %w", err))
          }
      }

    • Gestion des erreurs avec l'opérateur ?



      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
      use fmt
      use io
      use os
       
      fn copyFile(src: string, dst: string) -> Result<(), error> {
          let stat = os.Stat(src)?
       
          if !stat.Mode().IsRegular() {
              return Err(fmt.Errorf("%s is not a regular file", src))
          }
       
          let source = os.Open(src)?
          defer source.Close()
       
          let destination = os.Create(dst)?
          defer destination.Close()
       
          // ignore number of bytes copied
          let _ = io.Copy(destination, source)?
       
          Ok(())
      }


    Exemple

    Petit jeu tiré du livre Rust, implémenté en Borgo.

    Ce qu'il faut noter :

    • importation de paquets de Go stdlib
    • strconv.Atoi renvoie une Option<int>
    • Reader.ReadString renvoie un Result<string, error> (qui peut être déballé)


    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
    use bufio
    use fmt
    use math.rand
    use os
    use strconv
    use strings
    use time
     
    fn main() {
        let reader = bufio.NewReader(os.Stdin)
     
        rand.Seed(time.Now().UnixNano())
        let secret = rand.Intn(100) + 1
     
        loop {
            fmt.Println("Please input your guess.")
     
            let text = reader.ReadString('\n').Unwrap()
            let text = strings.TrimSpace(text)
     
            let guess = match strconv.Atoi(text) {
                Ok(n) => n,
                Err(_) => continue,
            }
     
            fmt.Println("You guessed: ", guess)
     
            if guess < secret {
                fmt.Println("Too small!")
            } else if guess > secret {
                fmt.Println("Too big!")
            } else {
                fmt.Println("Correct!")
                break
            }
        }
    }


    Exécution locale

    Borgo est écrit en Rust, vous aurez donc besoin de cargo.

    Pour compiler tous les fichiers .brg dans le dossier courant :

    Le compilateur génère des fichiers .go, que vous pouvez exécuter normalement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # generate a go.mod file if needed
    # $ go mod init foo
    $ go run .
    Source : Présentation de Borgo

    Et vous ?

    Quel est votre avis sur Borgo ?

    Voir aussi :

    Enquête sur le langage Go: les devs sont intéressés par les outils IA/ML qui améliorent la qualité, la fiabilité et les performances de leur code. Ils sont sur Linux et macOS pour la plupart

    Sortie de la version 1.22 du langage Go, apportant des changements à l'implémentation de la chaîne d'outils, au moteur d'exécution et aux bibliothèques

    La version 1.76.0 de Rust, le langage de programmation compilé multi-paradigme, est disponible, et apporte une nouvelle documentation sur la compatibilité ABI, ainsi que d'autres améliorations
    Publication de communiqués de presse en informatique. Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    891
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2007
    Messages : 891
    Par défaut Les inconvénients de Rust sans les avantages?
    C'est la syntaxe Rust un poil simplifier mais la performance de Go... : les inconvénients de Rust sans les avantages? Sans compter qu'il y a une étape de transpilation en plus.

    L'intérêt que j'y vois c'est pour une transition en douceur de Go à Rust ou, inversement, utiliser Go pour un programmeur Rust en gardant ses réflexe Rust (Pour plus de rapidité de production ou pour la simplicité des exe Go ou pour ses librairies).

  3. #3
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 679
    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 679
    Par défaut
    Il faut reconnaitre que l'on gagne quand même certaine fonctionnalités de la syntaxe Rust (comme les enum avancés et la gestion d'erreur qui font cruellement défaut à Go) sans la complexité de la gestion de mémoire vérifiée par le compilateur. Cela dit, même si je reconnais que l'idée est intéressante, c'est juste un petit projet sans prétention qui n'aura probablement pas un gros avenir.

    Je suis assez d'accord que ce compromis qui a peu de chance de séduire grand monde à part les habitués de Rust qui ont besoin de faire rapidement un programme sans prétention niveau performance, ce qui représente une niche dans une niche.

Discussions similaires

  1. [Questions]Le langage de programmation Binaire existe t-il ?
    Par Nasky dans le forum Langages de programmation
    Réponses: 30
    Dernier message: 16/11/2012, 09h09
  2. [GCC] Réduire la taille d'un programme statique
    Par Geronimo dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 05/03/2004, 16h34
  3. Qui a inventé le concept de "langage de programmation?
    Par Biane dans le forum Langages de programmation
    Réponses: 10
    Dernier message: 11/02/2004, 10h11
  4. Création d'un langage de programmation
    Par liquid_stone dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 09/11/2003, 16h44
  5. Nombre de langage de programmation total
    Par Adrael dans le forum Langages de programmation
    Réponses: 16
    Dernier message: 22/07/2003, 00h06

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