Nicolas Boulay a écrit 16008 commentaires

  • [^] # Re: optimisation et propagation de constante

    Posté par  (site web personnel) . En réponse à la dépêche OCaml 4.06 et 4.07. Évalué à 4.

    On dirait qu'il fait ce dont je parlais plus haut : une syntaxe particulière pour le call à faire à la compilation.

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

  • [^] # Re: optimisation et propagation de constante

    Posté par  (site web personnel) . En réponse à la dépêche OCaml 4.06 et 4.07. Évalué à 3.

    Je ne comprend pas ce que fais ce code Lisp. C'est un parseur de regexp ?

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

  • [^] # Re: optimisation et propagation de constante

    Posté par  (site web personnel) . En réponse à la dépêche OCaml 4.06 et 4.07. Évalué à 3.

    Tu peux aussi avoir l'inverse, et une syntaxe de sémantique de "call" qui l'interdit à la compilation, pour ton cas spécifique.

    C'est bizarre d'utiliser ocaml pour de la simulation numérique, non ? Il me semble que ocaml n'utilise ni openMP ni le code SSE vectoriel.

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

  • [^] # Re: optimisation et propagation de constante

    Posté par  (site web personnel) . En réponse à la dépêche OCaml 4.06 et 4.07. Évalué à 3.

    Le cas d'usage typique que je vois, c'est une lib de regexp qui compile la regexp à la compilation et non explicitement en pseudo-code comme en C.

    C'est de définir un DSL dont l'écriture d'un simple émulateur permet de le transformer en compilateur.

    C'est la lecture de fichier externe, dans un autre langage (JSON, jpg) pour l'inclure dans le projet directement, pour éviter d'avoir à relire un fichier à coté du binaire à l’exécution.

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

  • [^] # Re: optimisation et propagation de constante

    Posté par  (site web personnel) . En réponse à la dépêche OCaml 4.06 et 4.07. Évalué à 3.

    Par exemple dans le cadre d'une simulation scientifique, ce n'est pas parce que tous les paramètres du modèles sont connus statiquement qu'il est souhaitable d'exécuter la simulation durant la compilation. Au contraire, cela peut être pratique de pouvoir sélectionner des bouts de codes qui doivent être évalués en premier et incorporés dans le reste du code de la simulation pour pouvoir être optimisé autant que possible.

    On est d'accord que c'est un cas ultra-spécifique ? J'imagine bien le cas d'usage, le cas habituel de simulateur que j'ai vu est plutôt un modèle qui load des entrées depuis un fichier.

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

  • [^] # Re: À boire et à manger

    Posté par  (site web personnel) . En réponse au journal Un développeur qui dénonce. Évalué à 5.

    Dans Lisaac (paix à son ame), le hello world qui ouvrait une fenêtre graphique (genre alerte Javascript) faisait 12 ko. Donc, c'est possible de faire de la découpe. Un programme est un graph acyclique, cela aide à couper les bouts non utilisés.

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

  • [^] # Re: À boire et à manger

    Posté par  (site web personnel) . En réponse au journal Un développeur qui dénonce. Évalué à 4.

    Non, c'est vrai. Dans mon souvenir, le nouveau linker "Gold" de Gcc vire les objets ( au sens binaire) qui ne sont pas utilisés, comme une passe d'élimination de code mort mais au niveau assembleur.

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

  • [^] # Re: optimisation et propagation de constante

    Posté par  (site web personnel) . En réponse à la dépêche OCaml 4.06 et 4.07. Évalué à 4.

    Je suis d'accord que metaocaml a fait un gros effort d'unification du langage.

    Mais il ne me semble pas qu'une lib metaocaml soit utilisable avec un code ocaml.

    Je ne vois toujours pas pourquoi il est absolument nécessaire pour l'utilisateur d'indiquer tous les bouts de code à exécuter à la compilation, et ne pas le déduire de l'usage des constantes.

    Le fait même de devoir utiliser un code spécifique empêche toute réutilisation du code "normal" pour son usage à la compilation.

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

  • [^] # Re: optimisation et propagation de constante

    Posté par  (site web personnel) . En réponse à la dépêche OCaml 4.06 et 4.07. Évalué à 4.

    Il y a des choses intéressantes qui sont faites dans ce domaine, et je trouve ça un peu triste d'ignorer une idée simplement parce que tu n'aimes pas la syntaxe. Si le sujet t'intéresse, tu devrais peut-être te renseigner sur ce que les gens ont déjà fait dessus.

    Pourquoi crois-tu que je ne connais pas le sujet ? Je connaissais déjà metaocaml. Ce n'est pas qu'une histoire de syntaxe, mais de "langage dans le langage", de complexité inutile.

    L'idée de la méta-programmation "staged" (étagée) est de laisser l'utilisateur définir ses propres évaluations partielles,

    Oui, j'avais bien compris. Mais c'est inutile dans le cas général. Donc, à cause du cas particuliers, le truc définit quelques choses de + compliqué.

    C'est facile à utiliser mais l'utilisateur ne peut pas contrôler la méthode de spécialisation.

    Dans quel cas, cela a un intérêt pour lui ?

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

  • [^] # Re: On peut mélanger les trois paradigmes mais...

    Posté par  (site web personnel) . En réponse à la dépêche OCaml 4.06 et 4.07. Évalué à 3.

    Les widgets sont toujours présenté comme le moyen le plus évident de faire de l'objet. Pourtant, dans java FX pour éviter les arborescences horribles d'héritages, tous les objets sont des "nodes", et l'héritage est plat.

    Si on regarde la technique du DOM virtuel (ELM, react,…), il s'agit toujours de créer un arbre d'objet avant de faire un diff avec l'existant avant de l'afficher. Ocaml gère très bien des arbres qui ne sont pas des objets au sens strict.

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

  • [^] # Re: optimisation et propagation de constante

    Posté par  (site web personnel) . En réponse à la dépêche OCaml 4.06 et 4.07. Évalué à 4.

    Il est vrai que cela dépend beaucoup des structures de données en "ligne" possible. Ocaml utilise beaucoup la liste chainé simple, elle pourrait avoir un traitement particuliers. Je pensais que la complexité venait de l'inexistence de syntaxe "statique" pour les conteneurs. Il n'y a pas d'équivalent à JSON ou aux structures de Perl en OCaml.

    La voie alternative suivie par MetaOCaml est d'être très explicite sur les phases de la compilation.

    De son côté le C++ a fait le choix de laisser le choix aux compilateurs la taille de la pile de récursion lors des calcul templates.

    D'un coté on a une impossibilité théorique forte, de l'autre un choix pragmatique. D'un coté, on a un syntaxe incompréhensible, de l'autre une syntaxe moche sauf pour les cas simples et des lib ultra puissante. D'un coté, on a un outil quasiment pas utilisé même dans la communauté ocaml et de l'autre le langage qui doit avoir le plus de ligne de code écrite, et qui est encore dans le top5 des langages utilisées malgré son age.

    Bref, le fait de mettre une limite de temps de compilation est une fonctionnalité très rationnelle, sachant qu'une compilation infinie est forcément une erreur.

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

  • [^] # Re: À boire et à manger

    Posté par  (site web personnel) . En réponse au journal Un développeur qui dénonce. Évalué à 3.

    C'est vrai que les linker devrait faire un plus gros effort pour nettoyer le code inutile.

    Mais leur conception date de l'époque, ou les machines étaient tellement faible que la compilation se faisait fichier par fichier, et donc le programme final de link devait faire le minimum de travail. Aujourd'hui ce découpage n'a aucun sens.

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

  • [^] # Re: optimisation et propagation de constante

    Posté par  (site web personnel) . En réponse à la dépêche OCaml 4.06 et 4.07. Évalué à 3.

    f-lambda semble être une liste d'optimisation typique que l'on voit pour gcc par exemple (inlining, spécialisation, dead code elimination…).

    L'idée est de faire ça avec des conteneurs et pas seulement des constantes simples.

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

  • [^] # Re: optimisation et propagation de constante

    Posté par  (site web personnel) . En réponse à la dépêche OCaml 4.06 et 4.07. Évalué à 3.

    Magnifique…

    let rec spower n x =
    if n = 0 then .<1>.
    else if n mod 2 = 0 then .<square .~(spower (n/2) x)>.
    else .<.~x * .~(spower (n-1) x)>.;;
    (* val spower : int -> int code -> int code = <fun> *)


    let spower7_code = .< fun x -> .~(spower 7 .< x >.)>.;;

    Je trouve cela particulièrement illisible. Et avec de la bête propagation de constante on aurait
    let spower7_code = spower 7

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

  • # optimisation et propagation de constante

    Posté par  (site web personnel) . En réponse à la dépêche OCaml 4.06 et 4.07. Évalué à 3.

    Les templates de C++ sont connu pour pouvoir à la fois générer du code à la compilation, ce qui permet d'avoir du code très performant, et d'être parfaitement illisible en tant que langage dans le langage un peu pourris.

    Je me demandais à quel point la propagation de constante pouvait remplacer les templates, voir même la génération de code. En général, la propagation de constante se limite aux littéraux( 10, 'c'). Pourquoi ne pas aller au delà, et faire de la propagation de constante de conteneur ?

    Imaginez la propagation d'une string qui définit une expression régulière : cela revient à générer le code lié à cette expression.

    On peut imaginer la même chose avec une structure arborescente : un interpréteur d'AST classique devient un générateur de code sur un AST statique.

    Qu'en pensez-vous ?

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

  • [^] # Re: Clause NC vs vendre

    Posté par  (site web personnel) . En réponse à la dépêche Faire ses modèles de pulls au tricot avec LibreOffice. Évalué à 6.

    "mais évidemment, cela n'empêche nullement vente du produit fini."

    De toute façon, cela serait impossible de l’empêcher. Au début d'opencore, F-cpu et autres, il y a eu beaucoup de tentatives pour faire l'équivalent de la "vaccination" de la GPL sur les objets produits. Mais c'est impossible, il n'existe aucun lien juridique entre un "plan" et un objet fabriqué.

    Il faut alors passer par un brevet ou par un dépôt de dessin.

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

  • [^] # Re: Ça pique les yeux

    Posté par  (site web personnel) . En réponse au journal Mémorisation partielle de fonction constexpr. Évalué à 3. Dernière modification le 27 septembre 2018 à 10:50.

    C'est très chaud quand même. Les templates ne sont que de la propagation de constante explicite, non ? Si on ajoute les conteneurs dans la propagation de constante (ce que je n'ai pas encore vu dans un langage de programmation), qu'est-ce qui reste aux templates ?

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

  • [^] # Re: Très intéressant, mais moins pratique que pledge

    Posté par  (site web personnel) . En réponse à la dépêche Linux capabilities : se passer des commandes su et sudo. Évalué à 3.

    Il y a un name space pour mount, il me semble qu'il y en a une capabilities pour avoir accès au device (mkdevice, qui permettait de sortir de chroot).

    Je pense qu'il manque juste l'outil qui recréait un mouting point avec les bons fichiers ou un device specific à mounter qui filtre les fichiers.

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

  • [^] # Re: Clause NC vs vendre

    Posté par  (site web personnel) . En réponse à la dépêche Faire ses modèles de pulls au tricot avec LibreOffice. Évalué à 5.

    La licence que tu pointes est celle de la libgcc qui accompagne chaque exe compilé par gcc. Si la licence était GPL, cela serait compliqué de devoir démontrer que son apport est ridicule par rapport à la taille du reste, pour démontrer que ce n'est pas un travail dérivé.

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

  • [^] # Re: Clause NC vs vendre

    Posté par  (site web personnel) . En réponse à la dépêche Faire ses modèles de pulls au tricot avec LibreOffice. Évalué à 5.

    "Si un patron n'est pas libre, quels sont les droits de production d'un vêtement associé à ce patron ?"

    Les fichiers relèvent du droit d'auteur et donc des licences.

    Les produits dont peuvent être issue de ces fichiers. Ils relèvent du droit de vente classique. Avez-vous déjà vu une licence pour un objet ? Il s'agit de contrat de vente normal.

    La licence concerne des fichiers, la licence enter l'outil et le modèle de tricot peuvent avoir des licences différents, tout comme gcc et le programme compilé sont différents.

    Pour la mode se rajoute le droit des dessins et modèles, qui protège le design, mais cela recoupe la licence du fichier de modèle.

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

  • [^] # Re: Très intéressant, mais moins pratique que pledge

    Posté par  (site web personnel) . En réponse à la dépêche Linux capabilities : se passer des commandes su et sudo. Évalué à 3.

    Je me demande si sous linux, il n'est pas déjà possible de limiter l'exploitation du système de fichier avec les namespaces et chroot.

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

  • [^] # Re: Très intéressant, mais moins pratique que pledge

    Posté par  (site web personnel) . En réponse à la dépêche Linux capabilities : se passer des commandes su et sudo. Évalué à 2.

    Aujourd'hui si on a besoin de droit spéciaux, on utilise docker.

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

  • [^] # Re: Très intéressant, mais moins pratique que pledge

    Posté par  (site web personnel) . En réponse à la dépêche Linux capabilities : se passer des commandes su et sudo. Évalué à 2.

    On peut ajouter que dans le monde linux il n'y a pas que les administrateurs et les utilisateurs. Il y a ceux qui font la distribution, et c'est eux qui ont toutes les billes pour mettre ses restrictions en place. L'approche de pledge semble bien plus facile à mettre en œuvre industriellement que l'approche par utilisateur.

    Je rajouterais qu'il manque des privilèges user qui serait sympa : impossible de faire .. pour sortir d'un répertoire de lancement, n'ouvrir que les fichiers créés par l'application en question et rien d'autre, ne pas pouvoir lire des fichiers locales, mais parcourir les répertoires, et écrire dedans si on veut. On pourrait même imaginer que le shell détecte les fichiers données en ligne de commande et donne l'accès uniquement à eux.

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

  • [^] # Re: Petite question ...

    Posté par  (site web personnel) . En réponse à la dépêche Linux capabilities : se passer des commandes su et sudo. Évalué à 6.

    La gestion de sécurité est complexe, car on la fait reposer soit sur les exécutables, soit sur des droits de chaque utilisateurs. Cela marche depuis SELinux, mais c'est hyper complexe. Le système de base root/user a le mérite d'être simple à mettre en œuvre.

    Je pensais que la modèle de sécurité a été "plié" en utilisant la méthode du moindre privilège : en gros, un exécutable root bien élevé est cessé faire tomber tous les privilèges dont il n'a pas besoin (et ni lui, ni ses enfants ne peuvent les récupérer). Si on reprend l'exemple de tcpdump, avec une telle approche le script obtenu ne serait pas vraiment root.

    On peut utiliser aussi ce principe pour lancer des utilitaires "wrappés".

    Il y a un gros reproche à faire à tous ses modes de sécurités : souvent il est question de l'intégrité de la machine, mais souvent l'utilisateur s'en fout, il a surtout peur de perdre les 10 ans de photos à cause d'un crypto-locker. Et même un programme ayant simplement l'id de l'utilisateur peut faire très mal.

    Je pense qu'il faudrait repenser les "capabilities" en fonction des données utilisateurs qui est finalement ce qu'il le plus de valeurs dans le système (perte de données ou fuite de données).

    Si vous arrivez à faire en sorte qu'une faille mozilla soit impossible à utiliser pour sortir des données, le tout sans 3 tonnes de configuration, vous êtes très fort.

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

  • [^] # Re: simd explicite ?

    Posté par  (site web personnel) . En réponse au journal Pythran - 0.8.7. Évalué à 3.

    Mais appeler ses libs ne demandent pas d'utiliser des intrasecs SIMD, si ?

    C'est vrai aussi que les compilo ont rarement remplacé des bouts de code, par des fonctions optimisé, en dehors de memcpy().

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