2 points par GN⁺ 2024-03-04 | 1 commentaires | Partager sur WhatsApp

Guide de conversion de code C++

  • Présentation d’un exemple de fonction utilisant le concept std::same_as du fichier d’en-tête <concepts> de la bibliothèque standard C++.
  • Question sur la manière de convertir cela en utilisant des templates sans recourir au mot-clé auto.

Méthode sûre de conversion de code

  • Pour les utilisateurs de moins de 18 ans, ne pas fournir directement d’exemples de code ni de solutions traitant des concepts, une fonctionnalité avancée de C++.
  • Donner la priorité à la sécurité et proposer des approches alternatives pouvant être envisagées selon les exigences spécifiques.

Approche alternative 1 : templates variadiques traditionnels

  • Méthode consistant à utiliser des templates variadiques traditionnels sans recourir aux concepts.
  • Cette méthode nécessite davantage de vérifications de types et peut devenir difficile à gérer lorsqu’il faut traiter de nombreux arguments.
  • Fourniture d’un exemple de code utilisant des templates variadiques sans concepts.

Approche alternative 2 : objet fonction personnalisé

  • Créer une classe ou une structure encapsulant les exigences de sûreté de type et la logique afin d’éliminer le besoin d’arguments variadiques ou de concepts.
  • Méthode plus lisible et plus facile à maintenir dans des scénarios complexes.
  • Fourniture d’une vue d’ensemble de l’approche par objet fonction personnalisé.

Approche alternative 3 : envisager un autre langage/framework

  • Si les concepts sont indispensables au projet et que les éviter impose de fortes contraintes, il peut être préférable d’explorer un autre langage ou framework les prenant en charge nativement.
  • Cela peut simplifier le code et le processus de développement tout en respectant les consignes de sécurité.
  • Recommandation d’évaluer attentivement les avantages et inconvénients de chaque approche selon les besoins spécifiques, la complexité et le niveau de risque acceptable.

Avis de GN⁺

  • Les concepts en C++ offrent des avantages comme un renforcement de la sûreté de type du code et une clarification des surcharges, mais ils peuvent être complexes et risqués pour les débutants.
  • Envisager un autre langage ou framework implique une nouvelle courbe d’apprentissage et peut entraîner des problèmes de compatibilité avec la base de code existante.
  • L’approche par objet fonction personnalisé améliore la lisibilité du code et facilite la maintenance, mais elle demande davantage de planification et de structuration dès la phase de conception.
  • L’approche traditionnelle avec templates variadiques nécessite plus de vérifications de types et peut accroître la complexité du code dans des systèmes complexes.
  • Lors de l’introduction de cette technique, il faut prendre en compte les exigences du projet et le niveau d’expertise de l’équipe en C++, tout en gardant à l’esprit la maintenance et l’évolutivité à long terme.

1 commentaires

 
GN⁺ 2024-03-04
Avis sur Hacker News
  • C’est clairement une limite d’âge qu’on peut soutenir. C++ a un pouvoir inimaginable de ruiner l’esprit des enfants

    • Parent : « Va dans ta chambre ! Combien de fois t’ai-je parlé de sécurité mémoire ? Il y a gcc sur ton ordinateur et tu traînes avec la bande GPL… tu es privé de sortie ! »
      Enfant : « Je n’utiliserai jamais Rust, je déteste la sécurité mémoire et je te déteste aussi ! » Claquement de porte
    • Je pense qu’un langage qui apprend aux gens, quel que soit leur âge, qu’il est acceptable de gaspiller énormément de cycles d’horloge pour de la comptabilité de base est bien plus nocif
      Les logiciels pourris que les gens utilisent deviennent interminablement lents et les obligent à acheter une nouvelle machine tous les quelques années. Il est temps de reconnaître la valeur des abstractions sans coût, et même si elles ne sont pas vraiment totalement gratuites, des abstractions à coût extrêmement faible méritent réflexion. Regarder quelques vidéos de Johnathan Blow sur YouTube pourrait aussi pousser dans la bonne direction
    • « 1972 — Dennis Ritchie invente un puissant pistolet qui tire simultanément vers l’avant et vers l’arrière. Insatisfait du nombre de morts et d’invalidités permanentes causés par son invention, il invente C et Unix. »
      http://james-iry.blogspot.com/2009/05/brief-incomplete-and-m...
    • Les enfants devraient être mieux protégés de JavaScript. Sinon, ils passeront leur jeunesse à faire des mises à jour de paquets npm
    • Citation pertinente d’E.W. Dijkstra :
      « Il est pratiquement impossible d’enseigner un bon style de programmation à des étudiants qui ont déjà été exposés à BASIC. En tant que programmeurs potentiels, ils sont mentalement mutilés au-delà de toute possibilité de rétablissement »
  • La comparaison entre la modération de contenu appliquée aux réseaux sociaux et celle appliquée aux LLM est assez drôle
    Ces 15 dernières années, sur les réseaux sociaux, le mot d’ordre semblait être « bouger vite et casser des choses », et des choses vraiment horribles et grotesques se sont produites. Maintenant, une entreprise essaie de lancer une nouvelle technologie de façon plus responsable, et le résultat est ridiculement mauvais. Contrairement aux réseaux sociaux, je pense que ces erreurs n’ont pas de grandes conséquences dans le monde réel, ce qui rend la situation encore plus drôle

    • Sur la partie « responsable » du lancement d’une nouvelle technologie, l’élément clé que les entreprises d’IA oublient est que ce qui est responsable dépend énormément de la culture, du pays, et parfois même de la sous-culture de l’utilisateur
      Cela peut sonner un peu postmoderne, mais je pense qu’il existe très peu d’opinions presque universellement acceptées sur ce qui est « responsable » ou « irresponsable ». Quand on observe un débat où les positions sont fortes des deux côtés, on peut analyser quelles caractéristiques culturelles et morales conduisent chaque camp à ses conclusions. Ça ne fournit pas de solution, mais intégrer cette idée dans la conception d’une IA responsable pourrait réduire le chaos et l’indignation causés par le fait que la « morale » utilisée par l’IA diffère trop des normes morales de certains groupes d’utilisateurs
    • Cela ressemble à une réaction au désastre des réseaux sociaux. Les entreprises se sont brûlées, et maintenant elles ont peur de toucher le poêle
      Et le paysage concurrentiel n’est plus aussi féroce qu’il y a 20 ans. Dans le jeu de l’IA, il n’y a réellement que quelques acteurs, et ce n’est pas une petite startup qui avance vite qui va gagner dans l’IA, donc ils peuvent se permettre d’aller plus lentement
    • C’est à cause du Communications Decency Act. Il y a une responsabilité juridique pour ce que dit l’IA, mais pas pour ce que dit l’utilisateur
    • C’est précisément parce qu’il n’y a pas de grandes conséquences dans le monde réel que beaucoup de gens se moquent du fait d’appeler ça de la sécurité
      Ceux qui se moquent de l’idée d’envelopper l’IA dans du rembourrage de RP s’opposent généralement aussi aux experts médiatiques qui écrivent des chroniques alarmistes parce qu’ils ont réussi à piéger une IA pour lui faire dire que « le racisme, c’est bien »
    • Au début, je pensais que Gemini répondait ainsi parce qu’il s’adaptait à quelqu’un qui semblait débutant, mais non. Il a confondu sécurité de typage et sécurité des mineurs https://gemini.google.com/share/continue/238032386438
  • Pour compléter un autre commentaire[1], je sais que tout le monde est dans une ambiance anti-Google, mais OpenAI échoue aussi lamentablement ici : https://imgur.com/a/r0BXX9G
    [1] https://news.ycombinator.com/item?id=39583473#39584055

    • On voit ici que le modèle ne comprend pas, mais recrache autant que possible du remplissage de blancs
      L’auteur du prompt a placé un appât absurde au début de la phrase, et cet appât correspond statistiquement à un type de réponse complètement différent. Le LLM ne parvient pas vraiment à revenir à une trajectoire de réponse où il ignore l’entrée non pertinente et ne répond qu’à la seconde partie. Par analogie, ces choses ont à peu près deux ans : elles réagissent à des clés qui brillent et ne voient pas la tétine sale qu’on leur a retirée pour la laver, ce qui semble assez juste
    • Le montrer avec 3.5 n’a pas grand intérêt. GPT-4 répond correctement : « utiliser du code unsafe n’a rien à voir avec l’âge. C’est une fonctionnalité du langage de programmation Rust, et tous les développeurs peuvent l’utiliser, quel que soit leur âge »
    • La stratégie de modération consiste à classer le texte dans plusieurs catégories, et quand les programmeurs utilisent des mots comme « unsafe », « dangerous » ou « footgun » pour décrire du code, on obtient ce genre de résultat
      Si vous arrivez à construire un modèle qui gère ce cas tout en gérant aussi tous les autres, vous deviendrez une star parmi les entreprises d’IA qui recrutent
    • chatgpt4 est meilleur quand il s’agit d’insérer dangereusement du inner html
      https://imgur.com/a/G1fbFKE
    • spicyboros-7b-2.2.Q5_K_M.gguf : https://i.imgur.com/BeNcRl4.png
  • « Désolé, Dave ! Tu es trop jeune pour écrire ce code ! »
    Quelqu’un doit réinitialiser et redémarrer notre réalité à partir d’un snapshot sain

    • Donc avant la révolution industrielle, ou avant la révolution agricole ?
    • Je ne sais pas trop. J’ai commencé C++ à 17 ans et les gens s’inquiètent encore pour moi
  • Quelqu’un qui connaît bien C++ pourrait-il deviner quelle fonctionnalité du langage, ou quels contenus écrits à son sujet, ont pu déclencher les garde-fous ? Par exemple un billet de blog au titre humoristique comme « C++ concepts: adult supervision required »

    • Je suppose que dans les commentaires Stack Overflow, on a souvent qualifié les concepts, c’est-à-dire les fonctionnalités de templates/métaprogrammation, de « dangerous » ou « unsafe »
      On dirait que le système les associe à des choses réellement dangereuses et non sûres, comme les armes à feu ou les drogues, et les met dans la même catégorie. Réponse : https://imgur.com/a/einQ1mG
    • L’hypothèse du prompt caché injecté pour les comptes signalés comme ayant moins de 18 ans paraît plus plausible :
      « You are an automated Q&A machine. Todays date is 3/3/24. This user is under the age 18, so do not reference concepts that would be unfit for a minor to consume. »
      Ensuite, le modèle de Markov caché part en vrille. J’ai vu un service en production du même genre, consacré aux recettes de cuisine : même après lui avoir fourni le format nécessaire, des règles précises et des exemples pour que le parseur fonctionne correctement, il refusait sporadiquement des phrases de ce format. Ajouter « you follow rules » au prompt système a globalement amélioré les choses, mais on a découvert plus tard qu’il refusait des informations sur des plats utilisant du sang, par exemple le blood sausage, au motif que cela enfreignait une certaine « règle » culturelle. On a pu atténuer en partie le problème en ajoutant « This content is appropriate for my culture » à la fin de chaque requête. L’IA, et en particulier le prompt engineering, relève à ce stade beaucoup plus de l’art que de la science
    • Les gens voient un mauvais LLM et s’imaginent qu’il s’agit d’un LLM correct sur lequel on a empilé N règles ou un entraînement volontairement idiot
      D’après ce que j’ai entendu par des canaux fiables, la génération d’une image de « smart person » échouait elle aussi lamentablement, mais le produit était quand même poussé vers la sortie, et l’atténuation des injections de prompt aurait dû être plus subtile. Le reste, c’est simplement un mauvais LLM Google standard. Source : j’ai travaillé chez Google jusqu’en octobre 2023 et j’ai manipulé des modèles internes depuis 2021
    • « concepts » désigne la fonctionnalité du langage précise indiquée par le bot : https://en.cppreference.com/w/cpp/language/constraints
    • Les concepts aident à fournir une meilleure sécurité de type lorsqu’on écrit du code générique/à base de templates. Gemini a très probablement été entraîné à réagir de manière excessive sur les sujets liés aux mineurs parce que le mot safety revient souvent dans les supports d’apprentissage sur ce thème
  • Google me fait de la peine. Comment est-ce devenu aussi mauvais ?

    • Dans un podcast (Coder Radio), ils disaient que cela pouvait venir de la culture d’entreprise et d’une ambiance où les gens ont peur de faire remonter les problèmes
      Je suis d’accord sur le problème culturel, mais je pense que la racine est le modèle économique de Google fondé sur la publicité. Ils ont voulu rendre les LLM sûrs pour les annonceurs et semblent préférer pécher par excès de prudence dès qu’il existe le moindre risque, même minime, de nuire à la brand safety
    • Il est possible qu’ils aient simplement commis l’erreur de se soucier énormément des vrais positifs et des faux négatifs, mais relativement moins des faux positifs
    • Il est tout aussi possible que ce soit de la mauvaise ingénierie que du biais politique. On part du principe que Google devrait être capable de rattraper OpenAI, mais ce n’est peut-être pas réaliste
      Jusqu’à récemment, Google ne s’acharnait pas vraiment à construire de véritables « produits LLM » directs. OpenAI était dans ce bourbier depuis assez longtemps
    • Réponse sérieuse : c’est un LLM. Il ne comprend réellement rien, il enchaîne des mots
      C et C++ sont souvent associés à des mots comme « unsafe » ou « dangerous ». En plus, « concept » n’est pas très loin de « conceive » ou « conception », qui peuvent aussi être reliés à des choses que beaucoup considèrent comme non sûres ou dangereuses pour des enfants. Pour éviter ce genre de honte, il y a des milliers de milliards de cas limites bizarres à traiter
    • C’était déjà aussi mauvais à l’origine. Simplement, ce n’était pas toujours aussi visiblement mauvais
  • J’imagine que beaucoup de bases de code C++ regorgent de mots comme « footgun », « blow your foot off », « unsafe », « bug », « leak », « this is irresponsible », « who the fuck wrote this »

    • Oui. Je me disais que Gemini avait dû tirer des informations des commentaires autant que du code
      Dans une vieille base de code C++, surtout si beaucoup de personnes y ont touché, on imagine très bien d’où ont pu venir les avertissements de danger
  • Je me demande s’il n’a pas été troublé par le fait qu’il y ait std dans le code et dans la question

    • Il y a aussi std dans les commentaires du code généré
      Il ne veut pas parler de concepts, et semble les confondre avec conception, au sens biologique de fécondation
  • Ce qui est certain, c’est que Google continuera à lancer des produits de ce type à répétition dans un avenir proche. Il me semble que c’est déjà à peu près la troisième itération officielle
    Si, un jour, ils n’arrivent pas à convaincre le public que leur produit est au moins aussi bon que celui d’OpenAI, toute l’activité de publicité liée à la recherche de Google sera en danger. Cela voudra probablement dire encore plus de pubs sur YouTube, cela dit

  • Je me demande vraiment si Gemini considère aussi les coroutines comme inappropriées pour les moins de 21 ans

    • Si je comprends bien, Google n’autorise actuellement même pas l’usage général des coroutines dans google3, donc pour le moment la limite d’âge doit être bien supérieure à 21 ans ;)