Nicolas Boulay a écrit 15823 commentaires

  • [^] # Re: Dans l'art voluptueuse de ne rien comprendre

    Posté par  (site web personnel) . En réponse au journal EDSL et F-algèbres. Évalué à 2.

    J'ai vu la vidéo. En plus des truc EMF, pour moi-même, j'ai codé un mini langage EDSL en ocaml pour éviter de devoir réinventer la roue. Mais le typage est différente de celui de ocaml, cela ne peut pas s'exprimer avec un gadt. Je l'ai donc recodé à la main.

    D'ailleurs, est-ce que dans les gadt, on peut mettre no propre type fantome ?

    J'ai toujours vu des trucs comme ça :

    type _ term =
    | Lit : int -> int term
    | Bool : bool -> bool term
    | Add : int term * int term -> int term
    | Neg : int term -> int term
    | If : bool term * 'a term * 'a term -> 'a term

    int/bool et jamais des type définit, qui n'ont d'utilité que pour ajouter un "tag" sur le résultat. (imagine un type "neverzero int" uniquement accepté par la division). L'idéal serait de pouvoir jouer avec des ensembles de variant, mais je ne crois pas que c'est possible.

    "La première sécurité est la liberté"

  • [^] # Re: Dans l'art voluptueuse de ne rien comprendre

    Posté par  (site web personnel) . En réponse au journal EDSL et F-algèbres. Évalué à 2.

    Je ne comprend toujours pas. Je dois être un peu lent, ou alors je n'ai pas eu affaire aux mêmes cas d'utilisation.

    Je me dis la même chose en lisant les pattern de code plus haut :)

    Comment tu fais en parcourant l'arbre ? Mon algorithme débile trouve une chaine de contraintes … et après il faut résoudre, mais en tout cas il la trouve.

    En fait, c'est ton algo débile que je n'ai pas compris. Est-ce que tu peux reprendre mon exemple, et montrer ce qui il y aurait dans les listes, et comment se fait la vérification ?

    En pratique, pour ocaml, ils récupèrent les contraintes de types, et font un algorithme d'unification un peu amélioré pour résoudre le problème du polymorphisme et trouver les types minimaux des expressions. Mais ils récupèrent « d'un coup » toutes les contraintes (en éliminant peut-être celles qui sont triviales localement).

    Euh…

    "La première sécurité est la liberté"

  • [^] # Re: Dans l'art voluptueuse de ne rien comprendre

    Posté par  (site web personnel) . En réponse au journal EDSL et F-algèbres. Évalué à 2.

    L'exemple ressemble à du C, mais tu peux le voir aussi simplement comme une description de donné.

    Un DSL, sans référence, c'est vraiment un gros jouet inutile. En gros, cela veut dire que tu ne peux pas définir un truc dans ton langage, pour le réutiliser ensuite.

    (pour info, je bosse dans le domaine, autour des objet EMF d'eclipse, et des stéréotypes de sysml)

    à propos des type fantômes j'ai retrouvé ça : https://linuxfr.org/users/montaigne/journaux/les-types-fantomes.

    Si tu réutilises ton système de typage de ton langage hote, tu ne peux pas faire "autre chose", ce qui est très limitant.

    "La première sécurité est la liberté"

  • [^] # Re: Une question de choix

    Posté par  (site web personnel) . En réponse au journal Rachat de LinkedIn par Microsoft pour 26 milliards de dollars. Évalué à 3.

    Tu oublis le temps qu'il faut pour complètement remplacer linkedin, il y a un effet de latence. Le site est la référence absolue dans le monde, il n'y a pas de concurrent.

    "La première sécurité est la liberté"

  • [^] # Re: Dans l'art voluptueuse de ne rien comprendre

    Posté par  (site web personnel) . En réponse au journal EDSL et F-algèbres. Évalué à 2.

    Si tu as un :

    typedef int toto_t;
    ...
    toto_t toto = 1;
    Tu va construire 2 listes, avec ([toto_t -> int, toto -> toto_t],[ toto -> 1]) et ensuite comment tu fais de façon performante le lien "1 <- toto <- toto_t <- int" pour vérifier que c'est bon ?

    "La première sécurité est la liberté"

  • [^] # Re: C'est bien la peine !

    Posté par  (site web personnel) . En réponse au journal EDSL et F-algèbres. Évalué à 2.

    Essayes de prendre un arbre plus grand, l'idéal serait de faire une courbe en fonction de n, tu pourrais voir si les coubres sont parallèle ou si elles vont se croiser, ou encore, si il y a un cout d'init très élevé pour un cas particuliers.

    "La première sécurité est la liberté"

  • [^] # Re: Dans l'art voluptueuse de ne rien comprendre

    Posté par  (site web personnel) . En réponse au journal EDSL et F-algèbres. Évalué à 3.

    Par type, je disais que tu as une définition dans un coin de ton arbre, qui a un nom "type_t".

    Ailleurs, dans ton arbre, tu as un machin qui fait référence à "type_t". Pour vérifier que l'expression est juste, il faut aller chercher "type_t", ce qui empèche un simple parcourt d'arbre. Il faut le parcourt d'arbre, plus une fonction qui recherche le type dans l'arbre depuis la racine. C'est plus lent, et plus complexe, surtout si l'arbre est énorme.

    Je pensais vraiment à un model, de l'ingénierie des modèles, c'est à dire une ensemble de classe qui respecte un diagramme de classe type UML. Donc, qui réutilise des définitions pour créer de nouveaux objets.

    Pour ton explication, j'ai compris ton typage de fonction comme ayant simplement un nombre d'argument local sur une fonction, et non la réutilisation d'une définition qui est "ailleurs". La deuxième partie de l'explication, je suis vraiment passé à coté par contre…:/

    "La première sécurité est la liberté"

  • [^] # Re: C'est bien la peine !

    Posté par  (site web personnel) . En réponse au journal EDSL et F-algèbres. Évalué à 3.

    Il faut que je relise plus doucement l'article. Mais les variants ont été critiqué, car ils ne permettent plus le principal avantage des types sommes : l’exhaustivité de leur usage.

    Il suffit de rajouter un élément pour que tous les filtres soient en erreur à la compilation. Ce n'est plus toujours le cas avec des variants, le compilo n'arrive pas à évaluer tous les cas. Pour le refactoring, c'est très puissant.

    C'était un gars de ocaml pro qui m'avait dit que beaucoup d'usagers de variants pour des AST avaient changé d'avis.

    "La première sécurité est la liberté"

  • [^] # Re: Une question de choix

    Posté par  (site web personnel) . En réponse au journal Rachat de LinkedIn par Microsoft pour 26 milliards de dollars. Évalué à 7.

    Tu peux aussi faire en sorte que les meilleurs CV ne reçoivent plus d'offres concurrentes….

    "La première sécurité est la liberté"

  • [^] # Re: C'est bien la peine !

    Posté par  (site web personnel) . En réponse au journal EDSL et F-algèbres. Évalué à 3.

    J'ai du mal à comprendre l’intérêt d'une fonction générique comme fold(). Le nombre d'argument est égal au nombre d'argument du type expr. Cela permet ici de pouvoir gérer plus facilement des "exécutions" différente.

    Mais le problème concerne surtout l'ajout d'élément au type. Cela implique à chaque fois l'ajout d'un argument au fold, non ?

    "La première sécurité est la liberté"

  • [^] # Re: Dans l'art voluptueuse de ne rien comprendre

    Posté par  (site web personnel) . En réponse au journal EDSL et F-algèbres. Évalué à 3.

    "Pour un système de type par exemple, on peut faire remonter le type de chaque expression, ainsi que toutes les contraintes de types qui sont dans les sous-expressions, et l'ensemble des variables libres. Ces informations devraient normalement être suffisantes pour pouvoir déterminer tous les types."

    Oui, mais tu as besoin de l'ast, dans ce cas, pour aller chercher tous les types en question.

    "La première sécurité est la liberté"

  • [^] # Re: Dans l'art voluptueuse de ne rien comprendre

    Posté par  (site web personnel) . En réponse au journal EDSL et F-algèbres. Évalué à 2.

    ok, je comprend mieux. Mais cela ne simplifie pas grand chose par rapport à un AST "classique" ("deep").

    En fait, tu ne fais pas grand chose avec juste une composition structurelle. Un truc que tu as souvent besoin, c'est une référence vers un autre nœud de l'arbre et de pouvoir avoir accès à son contenu (typage, association, connecteur,…).

    "La première sécurité est la liberté"

  • [^] # Re: Dans l'art voluptueuse de ne rien comprendre

    Posté par  (site web personnel) . En réponse au journal EDSL et F-algèbres. Évalué à 2.

    Si je reprend le code d'exemple :
    ça c'est bien un gadt ?
    type 'a exp_dic =
    {lit : int -> 'a;
    neg : 'a -> 'a;
    add : 'a * 'a -> 'a};;

    ça c'est la définition de la sémantique de "Lit" qui retourne une fonction de construction d'un type ?
    let lit : int -> exp = fun x ->
    {expi = fun d -> d.lit x}

    Que signifie la syntaxe : {expi = …} ? C'est la création d'un type avec un champs expi ?

    ça c'est l'éval :
    let eval1 : exp -> int = fun {expi = e} ->
    e {lit = (fun x -> x);
    neg = (fun e -> - e);
    add = (fun (e1,e2) -> e1 + e2)};;

    Que signifie la syntaxe "fun {expi = e}" ? et qu'est-ce que le terme "e {…}" ?

    "La première sécurité est la liberté"

  • [^] # Re: Dans l'art voluptueuse de ne rien comprendre

    Posté par  (site web personnel) . En réponse au journal EDSL et F-algèbres. Évalué à 7.

    J'ai toujours rien compris non plus. Mais je tente de comprendre pour simplifier une fonction de vérification du modèle et pas seulement d’exécution (ou alors une exécution qui rend vrai/faux). Le modèle récursif est élégant, mais devient vite imbitable avec des arbres.

    "La première sécurité est la liberté"

  • [^] # Re: J'ai jamais tout compris aux chaines de blocs!

    Posté par  (site web personnel) . En réponse au journal Microsoft s'intéresse au blockchain. Évalué à 10.

    " Quand on mine, on résout quoi exactement?"

    De mémoire, pour le bitcoin, tu dois trouver un nombre 128 bits, qui, ajouté à un bloc donne un hash SHA-256 avec un nombre déterminé de bit à zéro.

    Donc, tu testes un grand nombre de nombre pour en trouver un.

    " Si toutes les transactions jamais faites par BC sont gardées sur une chaîne, quelle taille fait cette chaîne aujourd'hui?"

    Qq centaine de Go de mémoire.

    " Comment peut-on demander à un réseau de 1 milliards de noeuds de rester synchronisé sans que des bouts soient ajoutés ici et là dans plusieurs branches?"

    Par un système de vote à la majorité, et une vérification des autres blocs et détection d'erreur qui ferait refuser les blocs douteux;

    " Comment peut-on savoir si la majorité du réseau approuve la transaction sans savoir combien de noeuds existent?"

    sur bitcoin, on attend juste la réponse de quelques noeuds pas de tous. Cette latence est en train de devenir un problème. (gros mineur en chine avec peu de bande passante)

    " Si un État créé 10millions d'"utilisateurs" et donc autant de noeuds, peut-il saborder le système en invalidant les transactions qui lui déplaisent?"

    Oui si il dispose plus de 50% de la puissance de calcul, mais cela ne serait pas discret. De plus, les noeuds sont des asic plus des PC ou même des cartes graphiques puissantes.

    " On dit que les utilisateurs restent anonymes derrière une clé publique, mais si l'autre partie identifie l'utilisateur de la clé, il peut ensuite pister toutes ses transactions en surveillant la chaîne?"

    Oui, c'est la différence entre le pseudonymat et l'anonymat.

    "Et pour finir: comment on fait un système d'identification avec ça??"

    Si tu connais le système de certificat TLS actuelle, tu sais qu'une clef est connu si elle est signé par une compagnie dont les clefs sont dans les navigateurs. Il faut donc leur faire confiance. Ici, la clef est simplement stocké dans la blockchain.

    "La première sécurité est la liberté"

  • [^] # Re: C'est long ce salmigondis

    Posté par  (site web personnel) . En réponse au journal Article intéressant sur le marché du PC. Évalué à 3.

    C'est totalement impensable d'avoir de la RAM déporté dans le docking station, c'est même du absolument n'importe quoi d'un point de vue hardware (sauf à faire un RAM disque, mais ce n'est pas ce que l'on cherche à faire).

    Switcher de cpu demande bien plus de travail que de simplement redémarrer. Cela pourrait être fait par intel : un moyen de transfert de la mémoire, et de l'état du processeur, et un moyen de démarrer les périphériques utilisés : un peu comme la gestion de la veille en RAM, mais avec un réveil sur une autre machine.

    On utilise déjà des docks, le but est vraiment d'avoir un cpu puissant sur les bureau. L'idée de rajouter un moyen de refroidissement est pas mal, il pourrait passer de 25W à 100W d'enveloppe thermique. Cela pourrait être fait par n'importe quel constructeur en plus. On peut même imaginer un mini watercooling pour faire ça.

    "La première sécurité est la liberté"

  • [^] # Re: C'est long ce salmigondis

    Posté par  (site web personnel) . En réponse au journal Article intéressant sur le marché du PC. Évalué à 2.

    Il y a souvent des cas spéciaux pour les périphériques bootables (cf les SSD par PCI). Je n'avais pas compris que c'était possible.

    "La première sécurité est la liberté"

  • [^] # Re: C'est long ce salmigondis

    Posté par  (site web personnel) . En réponse au journal Article intéressant sur le marché du PC. Évalué à 2.

    C'est presque ça. Je n'ai pas l'impression que tu puisses booter la machine externe depuis le disque de la machine en TDM. Le but est de pouvoir lire le contenu comme un disque externe.

    L'idéal serait d'avoir des stations de travail diskless. Pour 1000€, tu peux avoir une bombe (i7 32Go de ram), ce qui n'est pas le cas pour un portable.

    "La première sécurité est la liberté"

  • [^] # Re: C'est long ce salmigondis

    Posté par  (site web personnel) . En réponse au journal Article intéressant sur le marché du PC. Évalué à 3.

    En gros, tu veux un bon écran anti-reflets en full hd ou plus, en 11" ou 13" (l'idéal pour moi).

    Ensuite, la puissance nécessaire dépend des usages.

    Mais typiquement, en dev, on veut être très mobile (1.5kg max avec alim, 10h d'autonomie) et avoir de la puissance, ce qui n'est pas possible avec une telle mobilité. Je rève donc que ce genre d'ultraportable puissent se connecter à des stations de travail en tant que "disque dur".

    Avoir 2PC est très compliqué à gérer, il faut dupliquer tous les logiciels et les données. Si on pouvait partager un SSD entre 1 machines fixes puissante et un ultra portable, cela serait top.

    En plus, on pourrait avoir des stations de travail "agnostique", n'importe qui pourrait se brancher dessus, et avoir son environnement.

    Pour faire cela, il faut une certaine souplesse dans l'OS. Linux ne semble pas poser de problème, mais Windows doit avoir suffisamment de protections anticopies, pour que cela ne marche pas.

    "La première sécurité est la liberté"

  • [^] # Re: CAO en SAAS

    Posté par  (site web personnel) . En réponse au journal Le matériel libre où en sommes nous ?. Évalué à 3.

    " l'on fait du hardware sont enormes pour constituer par exemple les bases de references de composants"

    Je n'ai jamais compris pourquoi il fallait toujours redessiner l'empreinte d'un composant, alors que les boitiers suivent tous des standards (DIP, SO,…). Un composant devrait simplement référencer ce genre d'empreinte, et permettre de nommer les pins.

    "La première sécurité est la liberté"

  • [^] # Re: C++, où quand le code asm généré est plus lisible

    Posté par  (site web personnel) . En réponse au journal [C++14 ] Expressions template pour les nuls. Évalué à 1.

    "Le résultat est très verbeux, peut-on faire plus simple ? Comment se gère ce problème dans les autres langages ?"

    C'est un problème de meta-programmation. Tu as une forme de code qui tu veux transformer dans une autre forme qui se compile bien. Cette transformation se fait souvent au runtime (tensorflow).

    Je ne connais pas d'autres langage qui gère correctement la metaprogrammation qui fonctionne à la compilation. Il me semble que Lisp le fait, et Rust avec ses "macro".

    "La première sécurité est la liberté"

  • [^] # Re: FUD

    Posté par  (site web personnel) . En réponse au journal La Suède abandonne les paiements en espèce — ne devrait-on pas s'en inquiéter?. Évalué à 2.

    Dans mon premier pret, il y avait une clause qui disait explicitement que le taux montait de 0.5 point en cas de non domiciliation.

    Il faut ensuite aller en justice, un avocat c'est minimum 5000€ voir 10 000 si tu n'as pas chance. C'est très loin de ce que tu gagnes à avoir 2 banques.

    "La première sécurité est la liberté"

  • [^] # Re: FUD

    Posté par  (site web personnel) . En réponse au journal La Suède abandonne les paiements en espèce — ne devrait-on pas s'en inquiéter?. Évalué à 2.

    Ce genre de banque en deuxième banque semble pas mal pour la qualité des services. Mais souvent tu choisi ta banque en fonction du meilleur taux pour un crédit immobilier, car ils exigent la domiciliation du salaire. Ils ne veulent pas non plus un virement automatique qui vire tout sur le compte d'une autre banque. Il me semble que ces obligations sont illégales (vente lié) mais dans les faits…

    "La première sécurité est la liberté"

  • [^] # Re: FUD

    Posté par  (site web personnel) . En réponse au journal La Suède abandonne les paiements en espèce — ne devrait-on pas s'en inquiéter?. Évalué à 4.

    Le problème est que les français sont plus fidèle à leur banque qu'à leur conjoint. Cela ne pousse pas du tout à la concurrence.

    J'avais un collègue d'origine d'un pays de l'est qui trouvait dingue de devoir payer les services bancaires de base comme la CB. C'était toujours gratuit dans son pays.

    "La première sécurité est la liberté"

  • [^] # Re: FUD

    Posté par  (site web personnel) . En réponse au journal La Suède abandonne les paiements en espèce — ne devrait-on pas s'en inquiéter?. Évalué à 4.

    "Depuis que ma banque m'a bloqué mon compte pour "besoin de mettre a jours vos renseignements" (en plus la machine buggait pas moyen de mettre a jours, j'ai du passer par le guichet heureusement ouvert), je réfléchis sérieusement à comment me passer des banques :P"

    Si tu tombes sur du mauvais pain, tu changes de boulangeries, tu n'arrêtes pas de manger du pain…

    "La première sécurité est la liberté"