Discussion autour de la RFC5 (devenue fygg)

J’ai rapidement regardé la partie langage, et je pense qu’il faudrait définir cela plus formellement. Je propose :

  • d’écrire la syntaxe en BNF
  • d’écrire la sémantique statique du langage (typage et vérification de type)
  • d’écrire la sémantique dynamique du langage sous forme « big step »

En ce qui concerne les types, je vois que tu propose à la fois du polymorphisme et de la surcharge (à base de typeclasses, par exemple pour add). Je ne suis pas sûr que l’on ait besoin de surcharge et cela complique les choses.

Concrètement, si je veux écrire des trucs, j’édite directement la RFC ? Et pour cela je fais des PR ?

Je n’y connais rien, donc là tu m’as perdu xD Je vais me renseigner sur tout ça :slight_smile:

Absolument pas, en tout cas pas dans cette version. Il n’y a pas de typeclasses, j’ai juste soit un type “valeur” qui peut être n’importe quel tableau d’octet representant un nombre, un booleen, une clé; soit un appel de fonction, soit un tuple. Tous les types déclarés (pas encore fait, mais ça s’applique au type Context par exemple) sont juste des alias de tuples.

Après si tu as des connaissances en langage fonctionnel et que tu penses que ça serait bien de rajouter des choses plus complexes, pourquoi pas. Après j’aimerais qu’un maximum soit des vérifications à la compilation, et que le binaire généré soit simple (comme j’ai fait avec les opcodes, sans faire attention aux types).

En fait le problème c’est que pour l’instant j’ai tout fait dans une branche contrairement à du code, et c’est plutôt dégueux. Si tu veux participer, je peux déjà copier la RFC dans le nouveau dépot du projet, et tu pourras faire des pull/merge requests :slight_smile: Qu’en penses tu ?

Je vois que c’est quand meme pas mal utilisé comme nom. Vu que je veux faire un protocole multi-blockchain, pourquoi pas “YggForest” ?

BNF, c’est un format qui décrit la syntaxe. Par exemple pour le λ-calcul

t ::= // term
| x // identifiant
| t t // application de fonction
| λx.t // fonction

Cela permet de bien définir de ce dont on parle.

J’ai mal interprété add :: DataType → Int → Int → Int alors. C’est quoi le Datatype ?

Sinon je pense qu’une approche à la ML (typée au niveau du source, mais non typée à l’exécution) est simple est très efficace.

C’est OK pour moi.

2 Likes

Oui je viens de voir ça, c’est super je vais t’écrire ça :slight_smile:

En gros DataType, Int, Bool sont des Value dans le sens où ils seront stockés dans des tableaux d’octets.

En effet. C’est pour ça que si tu veux introduire des notions de typeclasses (je ne connais pas encore, je découvre le monde magique du fonctionnel) pourquoi pas si c’est au niveau des sources.

Parfait, j’essaye de faire ça dans la journée. Que penses tu du nom “YggForest” ? (Yggdrasil est déjà trop utilisé, et je ne trouve rien du nom de “YggForest”)

Ma question est : ça sert à quoi ? Pourquoi ne pas définir l’addition que sur les entiers ?

Pour le nom, je n’ai pas de préférence particulière.

Tu vois bien que tu te contredis : “tous les membres” et “ceux qui ne le font pas”. S’il n’existait qu’un seul calcul possible, alors personne ne pourrait perdre sa mise. Or ici manifestement :

  • il y a le résultat de ceux qui ne perdent pas leur mise
  • il y a le résultat de ceux qui la perdent

De sorte qu’il y a bien subjectivité.

D’accord donc c’est une plateforme de troc numérique. Le projet Duniter se place un niveau en-dessous en produisant une valeur échangeable, la Ğ1, qui peut se retrouver sur cette plateforme parmi d’autres valeurs.

Par ailleurs Duniter n’a pas le monopole de la toile de confiance, tu peux très bien reprendre l’idée assez facilement pour cette plateforme que tu imagines. Je ne vois pas ce qui te bloque.

Connais-tu le problème de l’arrêt ? Si oui, tu relativiserais certainement ce que signifie “testé” et “audité”.

D’ailleurs ce n’est pas tellement le multisig le problème, ni le langage de script de façon plus générale (même si ça m’en pose personnellement), mais tout le meta-code qui est autour. La plupart des bugs qu’a connu Duniter ne sont pas dus au protocole ou a son implémentation, mais à du code périphérique (génération de blocs, code réseau, erreur SQL, entre autres).

Le problème d’un problème réglé, c’est qu’il ne dit rien des problèmes non réglés et non encore révélés. Tu le dis toi-même : on est “plus confiant”. Rien à voir avec une certitude malheureusement.

Il me semble que c’est la meilleure solution. Ici je suis un frein à tes développements, et il n’y a guère qu’Inso qui semble te suivre sur ce fil. Tu gagnerais à développer tes idées sur une plateforme dédiée. D’ailleurs, je serai le 1er à la suivre à échanger là-bas. J’en aurai besoin :slight_smile:

1 Like

Oui, bien sur, ça serait mieux, en tout cas au niveau des sources. Après au niveau compilé et éxécuté dans la machine virtuelle, tout ce que je sais c’est que c’est un tableau d’octets, et que je dois appeller une fonction système permettant de faire des additions d’entiers.

Après j’aimerais pouvoir supporter des additions d’autres types, comme par exemple avec des courbes elliptiques ce qui pourrait service pour des signatures de Schnorr.

Les membres non honnetes peuvent essayer de donner des résultats faux, alors non produits par le calcul. Ils perdent alors leur mise. Quand je dis “tous les membres”, c’est “tous les membres inscrits à l’oracle” de telle sorte que :

  • seule une partie des membres de la toile peuvent calculer le résultat, et tout le monde peut l’utiliser
  • sur d’autres blockchain le résultat peut aussi être utilisé sans se soucier du calcul

Si tu veux. Duniter n’est qu’une “application” dans cette VM. Après les jetons peuvent représenter quelque chose qui n’a pas de valeur en G1.

Bien sur que je connais, et c’est pour ça que mon langage ne sera pas Turing-complet.

Merci :slight_smile: C’est génant si je squatte encore ce fil le temps que je créé tout ça ?

Il ne faut pas confondre le langage source avec le langage compilé. Sauf si tu ne veux qu’un seul langage (i.e., un langage de script). As-tu envisagé WebAssembly comme cible de compilation ?

Je cherche a avoir un langage functionnel compréhensible par un humain qui peut ensuite être compilé dans un langage fonctionnel beaucoup plus simple et compact (voir les opcodes et l’exemple de script compilé). Ces 2 langages peuvent bien évidement être améliorés :wink:

1 Like

YggForest
C’est plus facile à retenir :slight_smile:

Yes, aucun problème d’autant que les versions à venir de Duniter s’appuieront sur tes travaux.

Super. Autant les poster dans cette catégorie DUBP avec le tag yggforest du coup :slight_smile:

2 Likes

@nanocryk si tu préfère gitlab a github tu a aussi le gitlab de framasoft : https://framagit.org/public/projects :wink:

Après perso, ça ne me dérange pas qu’on héberge un miroir de ton projets sur notre gitlab duniter puisqu’il y a quand même un lien, a voir si les autres sont d’accord ou pas :slight_smile:

EDIT : comment tu prononce “Ygg” ? :sweat_smile:

1 Like

Je préfère très clairement GitLab, après GitHub c’est la référence et c’est beaucoup plus visible :wink: A voir donc, pour l’instant j’ai fait un GitHub : https://github.com/yggforest. Je vais quand meme regarder du côté de Framagit.

Tu peut faire du mirroring automatique de gitlab vers github, c’est assez facile a faire je peut t’aider pour ça :wink:

1 Like

Il faudra que je te pique tes runners Rust surtout xD

Je penses que je vais partir sur FramaGit. C’est possible de faire des projets avec plusieurs repos, ou je dois le faire dans mon espace personnel ?

Aussi, pour la doc, est-ce que l’AGPL3 est bien adaptée, vu que ce n’est pas du code ?

Comme dans “figue” (le fruit).

Hmm, je pourrais meme faire un jeu de mot et l’appeller “fygg” pour “Forest Yggdrasil” et avoir comme logo une figue :slight_smile:

Edit : fygg est bien dispo sur github et la recherche donne très peu de résultats sur GH, et que des termes de jeu vidéo sur duckduck.

3 Likes

Autant sur la partie langage fonctionnel ça me dépasse autant pour tout ce qui est CI/CD je susi chaud pour t’aider :wink:

Framasoft propose des serveurs assez conséquents pour la CI ya de quoi faire, il est aussi possible de faire tourner certains runner sur tes propres serveurs dédiés ce n’est pas très compliqué a faire :slight_smile:

Oui il suffit de créer un groupe puis de mettre tout tes repos dans ce groupe :slight_smile:

Regarde au paragraphe “documentation” : Comment choisir une licence pour votre propre travail - Projet GNU - Free Software Foundation

Vu que le coeur du logiciel n’aura pas besoin d’être modifié pour rajouter des fonctionnalités via des modules, est-ce que l’AGPL pourrait permettre de faire des modules non libres ? Sinon, est-ce que ça ne pourrait pas être interessant pour des entreprise de faire des modules de calculs potentiellements non libres, sachant que ces modules ne sont en rien nécéssaire pour vérifier et utiliser la chaîne. Peut-être faire comme Rust avec une double license Apache 2 et MIT (qu’est-ce qu’elles ont de spécial ?)

Sinon pour la doc du coup c’est du GNU FDL, avec les extraits de code en AGPL ou Apache2/MIT ?

Non elle ne le permet pas, si tu souhaite autoriser des usages non-libres de la technologie que tu vas développer alors tu doit effectivement changer de licence. Tu peut opter pour la LGPL : Licence publique générale limitée GNU — Wikipédia

Cette licence casse le copyleft et autorise donc les usages privateurs autour de ton projets, c’est cependant un choix lourd de conséquences et fort dommageable, en a tu vraiment besoin ?
Imaginons dans le meilleur des cas, soyons fou, que ta techno soit carrément disruptive, a tu vraiment envie que les GAFAM s’en empare ?

1 Like