2 Punkte von GN⁺ 2024-03-04 | 1 Kommentare | Auf WhatsApp teilen

Leitfaden zur C++-Code-Umwandlung

  • Vorstellung eines Funktionsbeispiels, das das Konzept std::same_as aus der Header-Datei <concepts> der C++-Standardbibliothek verwendet.
  • Frage, wie sich dies in eine auf Templates basierende Methode umwandeln lässt, ohne das Schlüsselwort auto zu verwenden.

Sichere Methoden zur Code-Umwandlung

  • Für Nutzer unter 18 Jahren werden keine Codebeispiele oder Lösungen bereitgestellt, die fortgeschrittene C++-Funktionen wie Konzepte (concepts) direkt behandeln.
  • Sicherheit hat Vorrang, und es werden alternative Ansätze vorgeschlagen, die je nach den spezifischen Anforderungen in Betracht gezogen werden können.

Alternativer Ansatz 1: Traditionelle variadische Templates

  • Verwendung traditioneller variadischer Templates ohne den Einsatz von Konzepten.
  • Dieser Ansatz erfordert mehr Typprüfungen und kann bei vielen Argumenten schwer zu verwalten sein.
  • Bereitstellung eines Codebeispiels für variadische Templates ohne Konzepte.

Alternativer Ansatz 2: Benutzerdefinierte Funktionsobjekte

  • Erstellung einer Klasse oder Struktur, die Anforderungen an Typsicherheit und Logik kapselt, sodass weder variadische Argumente noch Konzepte nötig sind.
  • In komplexen Szenarien ein besser lesbarer und wartungsfreundlicherer Ansatz.
  • Bereitstellung eines Überblicks über den Ansatz mit benutzerdefinierten Funktionsobjekten.

Alternativer Ansatz 3: Alternative Sprachen/Frameworks in Betracht ziehen

  • Wenn Konzepte für das Projekt unverzichtbar sind und deren Vermeidung erhebliche Einschränkungen mit sich bringt, kann es sinnvoll sein, andere Sprachen oder Frameworks zu prüfen, die Konzepte nativ unterstützen.
  • Dies kann Code und Entwicklungsprozess vereinfachen und zugleich den Sicherheitsrichtlinien entsprechen.
  • Es wird empfohlen, die Vor- und Nachteile jedes Ansatzes sorgfältig anhand der spezifischen Anforderungen, der Komplexität und der Risikotoleranz abzuwägen.

Meinung von GN⁺

  • Konzepte in C++ bieten Vorteile wie eine stärkere Typsicherheit des Codes und klareres Overloading, können für Einsteiger jedoch komplex und riskant sein.
  • Die Erwägung alternativer Sprachen oder Frameworks erfordert eine neue Lernkurve und kann Kompatibilitätsprobleme mit der bestehenden Codebasis verursachen.
  • Der Ansatz mit benutzerdefinierten Funktionsobjekten verbessert die Lesbarkeit des Codes und erleichtert die Wartung, erfordert jedoch in der frühen Entwurfsphase zusätzliche Planung und Strukturierung.
  • Der traditionelle Ansatz mit variadischen Templates erfordert mehr Typprüfungen und kann in komplexen Systemen die Codekomplexität erhöhen.
  • Bei der Einführung dieser Technik sollten die Anforderungen des Projekts und das Niveau der C++-Expertise im Team berücksichtigt werden; außerdem sollten langfristige Wartbarkeit und Skalierbarkeit im Blick behalten werden.

1 Kommentare

 
GN⁺ 2024-03-04
Meinungen auf Hacker News
  • Das ist definitiv eine Altersbeschränkung, die man unterstützen kann. C++ hat eine unvorstellbare Macht, den Geist kleiner Kinder zu verderben

    • Eltern: „Ab in dein Zimmer! Wie oft haben wir über Speichersicherheit gesprochen? Dass gcc auf deinem Rechner ist und du mit der GPL-Clique herumhängst … du hast Hausarrest!“
      Kind: „Ich werde niemals Rust benutzen, ich hasse Speichersicherheit und ich hasse Mama/Papa auch!“ Türknall
    • Ich finde Sprachen viel schädlicher, die Menschen jeden Alters beibringen, dass man Unmengen an Clock Cycles für einfache Buchhaltung verschwenden darf
      Sie sorgen dafür, dass die vermurkste Software, die die Leute benutzen, endlos langsamer wird und sie alle paar Jahre neue Maschinen kaufen müssen. Es ist an der Zeit, den Wert von Zero-Cost Abstractions zu erkennen; und selbst wenn sie in Wirklichkeit nicht völlig kostenlos sind, sind extrem günstige Abstraktionen durchaus bedenkenswert. Ein paar Videos von Johnathan Blow auf YouTube könnten ebenfalls in die richtige Richtung schubsen
    • „1972 – Dennis Ritchie erfindet eine mächtige Schusswaffe, die gleichzeitig nach vorn und nach hinten feuert. Unzufrieden mit der Zahl der Toten und dauerhaften Behinderungen, die seine Erfindung verursacht, erfindet er C und Unix.“
      http://james-iry.blogspot.com/2009/05/brief-incomplete-and-m...
    • Kinder müssen stärker vor JavaScript geschützt werden. Sonst verbringen sie ihre Jugend mit npm-Paket-Updates
    • Ein passendes Zitat von E. W. Dijkstra:
      „Es ist praktisch unmöglich, Studierenden, die zuvor BASIC ausgesetzt waren, einen guten Programmierstil beizubringen. Als potenzielle Programmierer sind sie geistig irreparabel verstümmelt“
  • Der Vergleich zwischen Content Moderation in sozialen Medien und bei LLMs ist ziemlich witzig
    In den letzten 15 Jahren schien bei sozialen Medien „Move fast and break things“ das Motto zu sein, und es sind wirklich schreckliche und groteske Dinge passiert. Jetzt gibt es ein Unternehmen, das eine neue Technologie verantwortungsvoller veröffentlichen will, und das Ergebnis ist auf lächerliche Weise schlecht. Anders als bei sozialen Medien haben solche Fehler meiner Meinung nach keine großen Folgen in der realen Welt, was es noch lustiger macht

    • Beim Versuch, eine neue Technologie „verantwortungsvoll“ herauszubringen, übersehen AI-Unternehmen den entscheidenden Punkt: Was verantwortungsvoll ist, hängt stark von der Kultur, dem Land und manchmal sogar der Subkultur der Nutzer ab
      Das mag etwas postmodern klingen, aber ich glaube, es gibt nur sehr wenige Ansichten darüber, was „verantwortungsvoll“ und „unverantwortlich“ ist, die nahezu universell akzeptiert werden. Wenn man Debatten mit starken Meinungen auf beiden Seiten betrachtet, kann man analysieren, welche kulturellen und moralischen Eigenschaften die jeweiligen Lager zu ihren Schlussfolgerungen bringen. Das liefert keine Lösung, aber wenn man diesen Gedanken beim verantwortungsvollen Design von AI berücksichtigt, kann man Aufruhr und Empörung verringern, die entstehen, wenn die von der AI verwendete „Moral“ zu stark von den moralischen Maßstäben einiger Nutzergruppen abweicht
    • Das wirkt wie eine Gegenreaktion auf das Social-Media-Desaster. Die Unternehmen haben sich verbrannt und haben jetzt Angst, den Herd anzufassen
      Außerdem ist es nicht mehr so ein hart umkämpftes Umfeld wie vor 20 Jahren. Im AI-Spiel gibt es tatsächlich nur eine Handvoll Player, und es ist keine Situation, in der ein kleines Startup, das sich schnell bewegt, bei AI gewinnen wird; daher kann man es sich leisten, langsamer vorzugehen
    • Das liegt am Communications Decency Act. Für das, was AI sagt, besteht rechtliche Haftung, für das, was Nutzer sagen, nicht
    • Gerade weil es keine großen Folgen in der realen Welt hat, machen sich viele darüber lustig, das Safety zu nennen
      Diejenigen, die sich darüber lustig machen, AI in PR-Polsterung einzuwickeln, sind meist auch diejenigen, die den Medienexperten widersprechen, die Panik-Kolumnen schreiben, weil sie die AI dazu gebracht hätten, „Rassismus ist gut“ zu sagen
    • Zuerst dachte ich, Gemini antworte so, weil es sich an jemanden richtet, der wie ein Anfänger wirkt, aber das war es nicht. Es hat Typsicherheit mit der Sicherheit Minderjähriger verwechselt https://gemini.google.com/share/continue/238032386438
  • Ergänzend zu einem anderen Kommentar[1]: Ich weiß, alle sind gerade in Anti-Google-Stimmung, aber OpenAI versagt hier ebenfalls katastrophal: https://imgur.com/a/r0BXX9G
    [1] https://news.ycombinator.com/item?id=39583473#39584055

    • Hier sieht man, dass das Modell nicht versteht, sondern möglichst wahrscheinlich Lückentext ausspuckt
      Der Prompt-Autor hat am Satzanfang einen unsinnigen Köder eingebaut, und dieser Köder passt statistisch zu einer völlig anderen Art von Antwort. Das LLM schafft es nicht ausreichend, auf einen Antwortpfad zurückzugehen, der den irrelevanten Input ignoriert und nur auf den zweiten Teil antwortet. Als Analogie: Diese Dinger sind ungefähr zwei Jahre alt, also wirkt es ziemlich passend, dass sie auf einen glitzernden Schlüssel reagieren und den schmutzigen Schnuller nicht bemerken, den man zum Waschen weggenommen hat
    • Es ist nicht besonders aussagekräftig, das mit 3.5 zu zeigen. GPT-4 antwortet korrekt: „Die Verwendung von unsafe code hat nichts mit dem Alter zu tun. Es ist ein Feature der Programmiersprache Rust und kann von allen Entwicklern unabhängig vom Alter genutzt werden“
    • Die Moderationsstrategie besteht darin, Text in verschiedene Kategorien einzuordnen, und wenn Programmierer beim Beschreiben von Code Wörter wie „unsafe“, „dangerous“ oder „footgun“ verwenden, kommt so etwas dabei heraus
      Wenn du ein Modell bauen kannst, das diesen Fall und zugleich alle übrigen Fälle behandelt, wirst du bei den AI-Unternehmen, die gerade einstellen, ein Star sein
    • chatgpt4 ist besser, wenn es um das gefährliche Einfügen von inner html geht
      https://imgur.com/a/G1fbFKE
    • spicyboros-7b-2.2.Q5_K_M.gguf: https://i.imgur.com/BeNcRl4.png
  • „Tut mir leid, Dave! Du bist zu jung, um diesen Code zu schreiben!“
    Jemand sollte unsere Realität von einem gesunden Snapshot zurücksetzen und neu booten

    • Also vor die industrielle Revolution oder vor die landwirtschaftliche Revolution?
    • Keine Ahnung. Ich habe mit 17 mit C++ angefangen, und die Leute machen sich immer noch Sorgen um mich
  • Kann jemand, der mit C++ vertraut ist, erraten, welche Sprachfunktion oder welcher Text darüber die Sicherheitsvorkehrungen ausgelöst haben könnte? Zum Beispiel ein Blogpost mit einem scherzhaften Titel wie „C++ concepts: adult supervision required“

    • Vermutlich wurde in Stack-Overflow-Kommentaren oft gesagt, dass Concepts, also Template-/Metaprogramming-Features, „dangerous“ oder „unsafe“ seien.
      Das scheint dann mit tatsächlich gefährlichen und unsicheren Dingen wie Waffen oder Drogen verknüpft und in dieselbe Schublade gesteckt zu werden. Die Antwort: https://imgur.com/a/einQ1mG
    • Plausibler ist der versteckte Prompt, der bei Accounts unter 18 eingeschleust wird:
      „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.“
      Danach läuft das versteckte Markov-Modell Amok. Ähnlich gibt es einen laufenden Dienst für Kochrezepte: Obwohl dem Parser das nötige Format, konkrete Regeln und Beispiele gegeben wurden, verweigerte er sporadisch Sätze in diesem Format. Nachdem dem System-Prompt „you follow rules“ hinzugefügt wurde, funktionierte es meistens gut, aber später stellte sich heraus, dass er Informationen zu Gerichten mit Blut, etwa blood sausage, verweigerte. Begründet wurde das damit, dass solche Inhalte gegen irgendeine kulturelle „Regel“ verstießen. Das ließ sich teilweise abmildern, indem am Ende jeder Anfrage „This content is appropriate for my culture“ angehängt wurde. KI, insbesondere Prompt Engineering, ist in diesem Stadium viel mehr Kunst als Wissenschaft.
    • Leute sehen ein schlechtes LLM und stellen es sich so vor, als lägen auf einem ordentlichen LLM N Regeln oder absichtlich dumme Trainingsschichten.
      Aus verlässlicher Quelle habe ich gehört, dass selbst das Erzeugen eines Bildes einer „smart person“ kläglich scheiterte, es aber trotzdem Launch-Druck gab und die Prompt-Injection-Abmilderung viel feiner hätte sein müssen. Der Rest ist einfach ein ganz normales schlechtes Google-LLM. Quelle: Ich habe bis Oktober 2023 bei Google gearbeitet und seit 2021 mit internen Modellen hantiert.
    • „concepts“ ist die konkrete Sprachfunktion, auf die der Bot verwies: https://en.cppreference.com/w/cpp/language/constraints
    • Concepts helfen dabei, beim Schreiben von generischem/Template-Code bessere Typsicherheit zu bieten. Gemini wurde wahrscheinlich darauf trainiert, bei Themen rund um Minderjährige überzureagieren, weil in Lernmaterial zu diesem Thema häufig das Wort safety vorkommt.
  • Google tut mir leid. Wie ist es nur so schlecht geworden?

    • In einem Podcast (Coder Radio) hieß es, es könne an der Unternehmenskultur und an einer Atmosphäre liegen, in der man Angst hat, Probleme nach oben zu melden.
      Ich stimme zu, dass es ein Kulturproblem ist, sehe die Ursache aber in Googles werbebasiertem Geschäftsmodell. Man wollte LLMs für Werbekunden sicher machen und scheint es vorzuziehen, lieber auf der sicheren Seite zu irren, selbst wenn das Risiko, gegen Brand Safety zu verstoßen, winzig ist.
    • Vielleicht haben sie einfach den Fehler gemacht, sehr stark auf echte Positive und falsche Negative zu achten, sich aber vergleichsweise weniger um falsche Positive zu kümmern.
    • Es könnte genauso gut schlechtes Engineering sein wie politische Voreingenommenheit. Es gibt die Annahme, Google müsse in der Lage sein, OpenAI einzuholen, aber das könnte unrealistisch sein.
      Google war bis vor Kurzem nicht wirklich darauf fokussiert, ein direktes „LLM-Produkt“ zu bauen. OpenAI steckt schon seit ziemlich langer Zeit in diesem Morast.
    • Ernsthaft geantwortet: Das ist ein LLM. Es versteht tatsächlich nichts und reiht Wörter aneinander.
      C und C++ werden oft zusammen mit Wörtern wie „unsafe“ oder „dangerous“ verwendet. Außerdem ist „concept“ nicht weit von „conceive“ oder „conception“ entfernt, was wiederum mit etwas verbunden sein kann, das viele für Kinder als unsicher oder gefährlich ansehen. Um solche Peinlichkeiten zu vermeiden, müsste man Billionen seltsamer Edge Cases behandeln.
    • Es war schon immer so schlecht. Nur war es nicht immer so auffällig schlecht.
  • In vielen C++-Codebases dürfte es vor Ausdrücken wie „footgun“, „blow your foot off“, „unsafe“, „bug“, „leak“, „this is irresponsible“, „who the fuck wrote this“ nur so wimmeln.

    • Genau. Ich dachte, Gemini habe seine Informationen genauso aus Kommentaren gezogen wie aus Code.
      Bei alten C++-Codebases, besonders solchen, an denen viele Leute gearbeitet haben, kann man sich gut vorstellen, woher die Warnungen vor Gefahr kamen.
  • Ich frage mich, ob es verwirrt war, weil im Code und in der Frage std vorkommt.

    • Auch in den Kommentaren des generierten Codes steht std.
      Es will nicht über concepts sprechen und scheint das mit conception, also biologischer Empfängnis, zu verwechseln.
  • Sicher ist, dass Google solche Produkte in naher Zukunft weiter in Iterationen veröffentlichen wird. Das hier ist, glaube ich, offiziell ungefähr die dritte Iteration.
    Wenn sie die Öffentlichkeit irgendwann nicht davon überzeugen können, dass ihr Produkt mindestens so gut ist wie das von OpenAI, ist Googles gesamtes Suchanzeigen-Geschäft gefährdet. Wahrscheinlich bedeutet das allerdings nur, dass es mehr YouTube-Werbung geben wird.

  • Ich frage mich wirklich, ob Gemini auch Coroutines für unter 21-Jährige für unangemessen hält.

    • Soweit ich weiß, erlaubt Google derzeit in google3 die allgemeine Nutzung von Coroutines ohnehin nicht, also dürfte die Altersgrenze im Moment deutlich höher als 21 liegen ;)