2 ポイント 投稿者 GN⁺ 2024-03-04 | 1件のコメント | WhatsAppで共有

C++コード変換ガイド

  • C++標準ライブラリの<concepts>ヘッダーファイルにあるstd::same_as概念を使用する関数の例を提示。
  • autoキーワードを使わず、テンプレートを使う方式に変換する方法についての質問。

安全なコード変換方法

  • 18歳未満のユーザーには、C++の高度な機能である概念(concepts)を直接扱うコード例や解決策は提供しない。
  • 安全を優先し、特定の要件に応じて検討できる代替アプローチを提案。

代替アプローチ 1: 従来の可変テンプレート

  • 概念を使わず、従来の可変テンプレートを使う方法。
  • この方法は、より多くの型検査が必要で、多くの引数を扱う場合には管理が難しくなる可能性がある。
  • 概念なしで可変テンプレートを使うコード例を提示。

代替アプローチ 2: ユーザー定義関数オブジェクト

  • 型安全の要件とロジックをカプセル化するクラスまたは構造体を作成し、可変引数や概念の必要性をなくす。
  • 複雑なシナリオでは、より読みやすく保守しやすい方法。
  • ユーザー定義関数オブジェクトによるアプローチの概要を提示。

代替アプローチ 3: 代替言語/フレームワークの検討

  • プロジェクトで概念が必須であり、それを避けることが大きな制約をもたらすなら、概念を標準でサポートする他の言語やフレームワークを検討するのがよい可能性がある。
  • コードと開発プロセスを簡素化し、安全ガイドラインに適合できる。
  • 各アプローチの長所と短所を、具体的な要件、複雑さ、リスク許容度に応じて慎重に評価することを推奨。

GN⁺の意見

  • C++の概念は、コードの型安全性を強化し、オーバーロードをより明確にするなどの利点を提供するが、初心者には複雑で危険になり得る。
  • 代替の言語やフレームワークを検討することは、新たな学習コストを必要とし、既存コードベースとの互換性の問題を引き起こす可能性がある。
  • ユーザー定義関数オブジェクトの方法は、コードの可読性を高め保守を容易にするが、設計初期に追加の計画と構造化が必要になる。
  • 可変テンプレートを使う従来の方法は、より多くの型検査を必要とし、複雑なシステムではコードの複雑性を増す可能性がある。
  • この技術を導入する際には、プロジェクトの要件とチームのC++専門性の水準を考慮し、長期的な保守性と拡張性を念頭に置く必要がある。

1件のコメント

 
GN⁺ 2024-03-04
Hacker News のコメント
  • これは間違いなく支持できる年齢制限だ。C++ には子どもたちの精神を台無しにする、想像もつかない力がある

    • 親:「部屋に入りなさい! メモリ安全性について何度言ったらわかるの? あなたのコンピュータから gcc が出てきて、GPL の連中とつるんでいるなんて……外出禁止よ!」
      子:「Rust なんて絶対使わない、メモリ安全性も嫌いだし、ママ/パパも嫌いだ!」ドアをバタン
    • どの年齢の人にとっても、基本的な帳簿付けに膨大なクロックサイクルを浪費していいと教える言語のほうが、はるかに有害だと思う
      人々が使うひどいソフトウェアが果てしなく遅くなり、数年ごとに新しいマシンを買わざるを得なくしている。そろそろゼロコスト抽象化の価値を理解する時期だし、実際には完全にゼロコストではなくても、超低コスト抽象化は検討に値する。YouTube で Johnathan Blow の動画も少し見れば、正しい方向に後押ししてくれるかもしれない
    • 「1972年 - Dennis Ritchie が前後に同時発射される強力な銃を発明する。その発明による死者と永続的な障害者の数に満足できず、C と Unix を発明する」
      http://james-iry.blogspot.com/2009/05/brief-incomplete-and-m...
    • 子どもたちは JavaScript からもっと守られるべきだ。そうでないと若い時期を npm パッケージ更新に費やすことになる
    • E.W. Dijkstra の関連する引用:
      「以前に BASIC に触れた学生に優れたプログラミングスタイルを教えることは、事実上不可能である。潜在的なプログラマーとして、彼らは回復不能なほど精神的に損なわれている」
  • ソーシャルメディアに適用されたコンテンツモデレーションと、LLM に適用されたものを比べるとかなり笑える
    この15年間、ソーシャルメディアでは「速く動いて壊せ」が合言葉のように見え、本当にひどく奇怪なことが起きた。今度は新技術をリリースするにあたって、より責任ある形でやろうとしている会社があるが、その結果は笑えるほどひどい。ソーシャルメディアと違って、こうした失敗は現実世界に大きな結果をもたらさないと思うので、なおさら笑える

    • 新技術をリリースする際に「責任ある」形でやろうとする部分について、AI 企業が忘れている核心は、何が責任あることなのかは、ユーザーの文化、国、ときにはサブカルチャーに大きく左右されるという点だ
      少しポストモダンに聞こえるかもしれないが、「責任がある」と「責任がない」について、ほぼ普遍的に受け入れられている見解はごく少ないと思う。強い意見が両側にある議論を見ると、それぞれの陣営がどのような文化的・道徳的特性によってその結論に至っているのかを分析できる。解決策を与えるものではないが、AI を責任あるものにする際にこの考えを設計に取り入れれば、AI が用いる「道徳」が一部のユーザー集団の道徳基準と大きく違いすぎて起きる騒ぎや怒りを減らせる
    • これはソーシャルメディアの大惨事への反動に見える。各社は痛い目を見たので、今ではストーブに触るのを怖がっている状態だ
      それに20年前のような激しい競争環境でもない。AI のゲームには実際には数社のプレイヤーしかおらず、素早く動く小さなスタートアップが AI で勝つ状況ではないので、よりゆっくり動く余裕がある
    • Communications Decency Act のせいだ。AI が言ったことには法的責任があるが、ユーザーが言ったことには責任がない
    • 現実世界に大きな結果がないというまさにその点のせいで、これを安全性と呼ぶことを嘲笑する人が多い
      AI を PR 用の緩衝材で包むことを笑う側は、AI をだまして「人種差別はよい」と言わせたとして恐怖をあおるコラムを書くメディア専門家にも、たいてい反対している側だ
    • 最初は Gemini が初心者に見える人に合わせて答えているのかと思ったが、違った。型安全性と未成年者の安全を混同していたのだ https://gemini.google.com/share/continue/238032386438
  • 別のコメント[1]に付け加えると、みんなが反 Google 気分なのはわかるが、OpenAI もここでは悲惨に失敗している:https://imgur.com/a/r0BXX9G
    [1] https://news.ycombinator.com/item?id=39583473#39584055

    • ここでは、モデルが理解しているのではなく、できるだけ穴埋めを吐き出していることがわかる
      プロンプト作成者が文の前に見当違いの餌を置き、その餌が統計的にまったく別の種類の応答と一致している。LLM は無関係な入力を無視して第2部分だけに答える応答経路へ十分に戻れない。比喩で言えば、こういうものは2歳児くらいのもので、きらきらした鍵には反応するが、洗おうとして取り上げた汚れたおしゃぶりには気づかない、というくらいがちょうどよく見える
    • 3.5 で見せてもあまり意味はない。GPT-4 は「unsafe code を使うことは年齢とは関係ありません。Rust プログラミング言語の機能であり、年齢に関係なくすべての開発者が使用できます」ときちんと答える
    • モデレーション戦略がテキストを複数のカテゴリに分類する方式で、プログラマーがコードを説明するときに “unsafe”、“dangerous”、“footgun” のような言葉を使うと、こういう結果になる
      この事例も処理しつつ、残りもすべて処理できるモデルを作れるなら、採用中の AI 企業の間でスターになれるだろう
    • chatgpt4 は inner html を危険な形で挿入する場合にはもっとましだ
      https://imgur.com/a/G1fbFKE
    • spicyboros-7b-2.2.Q5_K_M.gguf: https://i.imgur.com/BeNcRl4.png
  • 「ごめんね、Dave! 君はそのコードを書くには若すぎる!」
    誰かが私たちの現実を健全なスナップショットからリセットして再起動すべきだ

    • では産業革命以前だろうか、農業革命以前だろうか?
    • よくわからない。17歳で C++ を始めたけど、今でも人々は私のことを心配している
  • C++に詳しい人なら、この言語機能や、それについて人々が書いた内容の何が安全装置に触れたのか推測できるだろうか? たとえば「C++ concepts: adult supervision required」みたいな冗談めいたタイトルのブログ記事とか

    • おそらく Stack Overflow のコメントなどで、concepts、つまりテンプレート/メタプログラミング機能を「dangerous」や「unsafe」と呼ぶことが多かったのだと思う
      実際に危険で安全でないもの、たとえば銃や薬物のようなものと結び付けて、同じ分類箱に入れているように見える。正解: https://imgur.com/a/einQ1mG
    • 18歳未満と表示されたアカウントに注入される隠しプロンプトのほうが、それっぽい:
      “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.”
      そうなると隠れマルコフモデルが暴走する。同じように料理レシピを扱う本番サービスがあるのだが、パーサーが正しく動くために必要な形式や具体的なルール、例を与えていたにもかかわらず、散発的にその形式の文を拒否した。システムプロンプトに “you follow rules” を追加するとおおむねうまくいったが、後になって、血を使う料理、たとえば blood sausage に関する情報を拒否することが分かった。そうした内容が何らかの文化的な「ルール」に反するという理由だった。各リクエストの末尾に “This content is appropriate for my culture” を付けることで、多少は緩和できた。AI、とくにプロンプトエンジニアリングは、現段階では科学というよりずっとアートに近い
    • 人々は出来の悪い LLM を見て、まともな LLM の上に N 個のルールや、わざと愚かにする訓練を重ねたものだと考える
      信頼できる経路で聞いた話では、「smart person の絵」の生成すら悲惨に失敗していたのに、それでもリリース圧力があり、プロンプト注入の緩和はもっと繊細であるべきだった。残りは単なる標準的な出来の悪い Google LLM だ。出典: 2023年10月まで Google で働き、2021年から内部モデルを触っていた
    • “concepts” はボットが指していた特定の言語機能: https://en.cppreference.com/w/cpp/language/constraints
    • concepts はジェネリック/テンプレートコードを書く際に、より良い型安全性を提供する助けになる。Gemini はそのトピックの学習資料に safety という単語が頻出したため、未成年者関連のトピックで過敏に反応するよう訓練されていた可能性が高い
  • Google が気の毒だ。どうしてここまで悪くなったのだろう?

    • あるポッドキャスト(Coder Radio)では、企業文化と、問題が上に報告されることを恐れる雰囲気のせいかもしれないと言っていた
      文化の問題だという点には同意するが、根本は Google の広告ベースの事業モデルだと思う。LLM を広告主にとって安全にしようとしており、ブランドセーフティに反するリスクがごく小さくても、安全側に倒すことを好んでいるように見える
    • たぶん真陽性と偽陰性には非常に気を遣う一方で、偽陽性には相対的にあまり気を遣わない、というミスをしただけなのかもしれない
    • 政治的バイアスと同じくらい、悪いエンジニアリングである可能性も高い。Google は OpenAI に追いつけるはずだという前提があるが、それ自体が非現実的なのかもしれない
      Google は最近まで、本当に直接的な「LLM 製品」を作ることに注力していなかった。OpenAI はかなり前からその泥沼の中にいた
    • 真面目に答えるなら、これは LLM だ。実際には何も理解せず、単語をつなげているだけ
      C と C++ は “unsafe” や “dangerous” のような単語とよく一緒に使われる。さらに “concept” は “conceive” や “conception” ともそれほど離れておらず、多くの人が子どもには安全でない、あるいは危険だと考えるものにも結び付き得る。こういう赤っ恥を避けるには、処理すべき奇妙な境界事例が何兆もある
    • もともとこのくらい悪かった。ただ、常にここまで目立って悪かったわけではない
  • 多くの C++ コードベースには “footgun”, “blow your foot off”, “unsafe”, “bug”, “leak”, “this is irresponsible”, “who the fuck wrote this” みたいな言葉が山ほどありそう

    • その通り。Gemini はコードだけでなくコメントからも情報を引っ張ってきたのだと思った
      古い C++ コードベース、とくに複数人が手を入れたコードベースなら、危険警告がどこから出てきたのかは十分想像できる
  • コードと質問に std が入っていたので混乱したのではないか、という気もする

    • 生成したコードのコメントにも std がある
      concepts について話したくないようだが、これを conception、つまり生物学的な受胎と混同しているように見える
  • 確かなのは、Google が近い将来もこの種の製品を繰り返しリリースし続けるということだ。これで公式には3回目くらいの反復のように思う
    いつか自社製品が少なくとも OpenAI のものと同じくらい良いと大衆を説得できなければ、Google の検索広告事業全体が危うくなる。おそらくそれは、YouTube 広告がさらに増えるという意味なのだろうが

  • Gemini がコルーチンも21歳未満には不適切だと見なすのか、本当に気になる

    • 私の理解では、Google は現在 google3 でコルーチンの一般利用自体を許可していないので、今のところその年齢制限は21歳よりずっと高そうだ ;)