Greboca  

Suport technique et veille technologique

Aujourd’hui, les grandes entreprises et administrations publiques hésitent entre continuer à utiliser des logiciels propriétaires ou basculer vers les Logiciels Libres. Pourtant, la plupart des logiciels libres sont capables de bien traiter les données issues des logiciels propriétaire, et parfois avec une meilleur compatibilité.

C’est alors la barrière de la prise en main qui fait peur, et pourtant...

Les logiciels libres

L’aspect « Logiciel Libre » permet une évolution rapide et une plus grande participation des utilisateurs. Les aides et tutoriels foisonnent sur Internet ou sont directement inclus dans le logiciel lui-même.

Enfin, les concepteurs sont plus proches des utilisateurs, ce qui rend les logiciels libres plus agréable à utiliser et conviviaux.

Grâce à la disponibilité des logiciels libres, vous trouverez facilement des services de support techniques et la licence n’est plus un frein à l’utilisation de ces logiciels par votre personnel.

Notre support technique concerne essentiellement les logiciels libres, que ce soit sous forme de services ponctuels ou de tutoriels.

LinuxFr.org : les journaux  -  [Letlang] Hommage à Leonardo Pisano Fibonacci

 -  Mai 2022 - 

Bonjour Nal,

Aujourd'hui, je vais te parler de la suite de Fibonacci en Letlang.

Pour la table des matières, comme d'habitude:

Prélude

Pour ceux qui ne sont pas au courant, le programme Letlang Hello World compile :

module "hello.main";

pub func main() -> @ok {
  perform debug("hello world");
  @ok;
}

Cela utilise un side effect (effet de bord pour les francophones) intégré au runtime qui ne fait pas de type checking, il disparaîtra sûrement à l'avenir pour laisser sa place à une meilleure interface, mais pour l'instant cela fait le taf :)

Ce programme prouve notamment que l'implémentation des effets de bords en utilisant genawaiter (implémentation des coroutines en Rust) fonctionne à merveille.

Le compilateur (désormais open source) est composé de 3 parties :

  • le parseur, écrit en Rust avec LALRPOP et Logos, j'en ai parlé dans les articles précédents de cette série
  • le générateur de code, écrit pour le moment en Python (histoire d'aller vite), s'occupe de générer le code Rust à partir de l'AST produit par le parseur
  • le runtime, écrit en Rust, est ajouté en tant que dépendance au code Rust généré par le compilateur

Chaque module Letlang va générer une crate Rust, et l'ensemble des crates est ajouté à un workspace Cargo, permettant ainsi de compiler le tout assez facilement. C'est pas forcément définitif comme manière de faire, mais pour l'instant, ça marche niquel.

Mais qu'est-ce donc que Fibonacci ?

La suite de Fibonacci est définie par :

fib(0) = 1
fib(1) = 1
fib(n) = fib(n - 1) + fib(n - 2)

C'est l'exemple parfait pour faire du pattern matching et de la récursion. C'est aussi le projet d'exemple parfait pour continuer dans la lancée du Hello World.

Le code

Sans plus attendre :

module "fib.main";

func fib(n: int) -> int {
  match n {
    0 => 1,
    1 => 1,
    int => fib(n - 1) + fib(n - 2),
  };
}

pub func main() -> @ok {
  perform debug(fib(5));
  @ok;
}

Comme précédemment, on utilise le side effect debug(...) -> @ok pour afficher le résultat.

Le plus intéressant ici, c'est l'expression match. Elle prend en paramètre une expression (ici n), et dans son corps, un ensemble de clause.

Chaque "pattern" est un type. On a ainsi en rust:

let patternval = /* ... */;
let clause_0_type = /* ... */;
let clause_1_type = /* ... */;
let clause_2_type = /* ... */;

if clause_0_type.has(context.clone(), &patternval) {
  // ...
}
else if clause_1_type.has(context.clone(), &patternval) {
  // ...
}
else if clause_2_type.has(context.clone(), &patternval) {
  // ...
}
else {
  // throw exception
}

Le code est plutôt simple, débile même je dirais. Dans le futur il sera bien évidemment possible de "binder" des variables dans le pattern, ce qui changera cette implémentation, mais pour le moment, cela fonctionne et me permet d'avancer :)

Pour ce qui est de la récursion, pas d'unroll, pas de TCO (tail call optimization) pour le moment, donc fib(-5) générera un joli stack overflow.

La suite des événements

Le procédé est simple, on prend un exemple de programme, et on fait en sorte qu'il compile. C'est pourquoi j'ai commencé par hello-world et que j'ai enchaîné avec fibonacci. Avec suffisamment d'exemple, on couvrira l'ensemble des fonctionnalités du langage, le rendant petit à petit plus utile!

Ainsi, le prochain projet exemple sera l'automate cellulaire à la règle 110, qui démontrera la "Turing Completeness" de Letlang.

Tout est sur le dépôt Github.

Les choses avancent lentement mais sûrement, cette nouvelle étape accomplie m'emplie de joie et d'espoir pour l'avenir de ce langage.

Voilà Nal, c'est tout pour cette petite annonce, j'espère t'avoir transmis un peu de mon enthousiasme :)

Commentaires : voir le flux Atom ouvrir dans le navigateur

par David Delassus

LinuxFr.org : les journaux

LinuxFr.org : Journaux

La version 2.0 de WhosWho est sortie

 -  15 mai - 

Bonjour Nal,Je viens de publier la version 2.0 de WhosWho, mon logiciel pour faire des trombinoscopes, dont j'avais parlé il y a longtemps dans (...)


décrire une une image avec une iA locale

 -  8 mai - 

Aujourd'hui c'est fourien™, petit tuto sans prétention!Pour décrire des images en utilisant une iA localement j'utilise LLaVA qui fait partie de (...)


antistress adventure in Flatpak land

 -  30 avril - 

Hello nal, ça faisait un bail !Certain (il se reconnaîtra) m'a demandé de le tenir au courant lorsque j'aurai basculé sur un usage de Firefox (...)


Téléphone sous Linux ?

 -  25 avril - 

Aujourd'hui, avoir un téléphone avec un Android libéré, c'est possible, on pense en particulier à Murena.Avoir un téléphone sous GNU/Linux, c'est (...)


Quand votre voiture vous espionne… et vous le fait payer

 -  23 avril - 

Ceci se passe aux États-Unis, pour l’instant, aucune preuve qu’une telle fuite existe en Europe. Mais… si votre assurance augmente brutalement, (...)