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
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 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” ?
Oui je viens de voir ça, c’est super je vais t’écrire ça
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”)
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
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 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
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
Je préfère très clairement GitLab, après GitHub c’est la référence et c’est beaucoup plus visible 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.
Autant sur la partie langage fonctionnel ça me dépasse autant pour tout ce qui est CI/CD je susi chaud pour t’aider
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
Oui il suffit de créer un groupe puis de mettre tout tes repos dans ce groupe
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 ?