はてなキーワード: コンパイラとは
逆方向、生成AIがバイナリを「読む」未来は来る。というか知っている範囲では検証はされている、製品として売られているかは知らない。セキュリティ会社とかだと多分公開しない。メーカー系も公開しない。
実際は、バイナリを直接読むんじゃなくて逆汗したasmを逆コンパイルするのにLLMを使う系。既存でも逆コンパイラはあるけれどもっといい感じに読みやすくしようというやつ。
ふと思ったけれど、ターゲット限定して特定の難読化ツールの逆トランスレーターのファインチューニングが千万ていどなら、ハッカーとか金出して作りそう
生成AIが直接機械語やバイナリを出力するようになるのではないか、という問いは本質的に間違っている。
自分は、まだ素朴なニューラルネットワークで光学文字認識(OCR)の精度を出していた頃から似たようなことを考えていたので、少し他人よりも蓄積がある。
これは、Large Language Model(LLM)を開発する企業が資金を集めるために多少誇張した未来を語るという文脈では大目に見た方が良いが、正確性に欠ける。
本質的な問いは、なぜ我々は、ノイマン型コンピュータを用いて、主記憶に置かれたプログラムをCPUを用いて実行する形式をとるのか、というものである。
まず、筋の悪い反論から説明し、妥当な反論にも触れたうえで、本質的に問うべき課題を説明する。
これは明確に、いいえ、と答えることが出来る。
最初こそ人間による補助は必要だが、LLMを含むAIは明確な目標があれば人間のデータなしでも十分に学習することが出来る。
これは身近なところでは将棋、有名なものだと囲碁で実証された研究が存在する。
そのため、単純に「機械語は人間による学習データが少ないので扱いが難しいだろう」という反論は成立しない。
そういったものはLLMではないだろうという指摘は可能だが、LLMでそういったAIを出力することは限定的とはいえ現在でもできる。将来できないと言うだけの論拠にはならない。
英語に限った話ではなく、人間が意思疎通に用いる言語である自然言語(natural language)は、曖昧さやばらつきがある。
これを形式言語(formal language)という、曖昧さを無くして語彙や文法を限定した言語に記述しなおすことで、厳密にする手法がある。
この形式言語での表現が、アルゴリズムやデータ構造になり、現代のノイマン型コンピュータにおけるプログラムそのものと言うことが出来る。
なぜ限定的かと言えば、形式言語の一種であるプログラミング言語には曖昧さが許容されているからである。
ほとんどのプログラミング言語では、同じ目的を達成する為に複数の記述が許容されている。
主に、人間が書きやすいから、とか、複数の人間で書きやすいように、といった理由で、曖昧さが許容されている。
そのため、機械へ命令するためには厳密さが必要だからプログラミング言語が必要だ、と言う反論は妥当ではあるが、弱い。
なぜ大統一プログラミング言語のように、自然言語の意図を機械に伝えるための形式言語が一種類になっていないかと言えば、人間の認知能力には限界があるからだ。
そのため、簡易で曖昧さを含むために最適化はできないが十分な性能を持つプログラミング言語や、非常に複雑で記述量も多くなるが大人数で作業するには最適なプログラミング言語などが複数存在する。
これらはいずれも、人間が楽に記述できる形式言語であったり、人間同士が齟齬なくコミュニケーションを取るために必要な形式言語である。
ありていに言って、人間や人間たちが理解可能な形式言語でないと機械にその意図を伝えることが出来ないから、と言える。
ただし、コンパイラから出力されたニーモニックやLLVM-IRを監査できる人間は現代では非常に少なく、現状ほぼ監査なく受け入れていると言って良い。
何故非常に少なくなったかと言えば、機械に伝える意図が大規模になり、単純にマンパワーが足りなくなったので監査しきれなくなっただけに過ぎない。
(もちろん、途方もない努力の末に最適化が進み、ほぼどの様な書き方をしても最適な機械語が出力されるようになったから、とも言える)
同様の理屈で、単純に大規模になり監査が間に合わなくなったので、受け入れるようになる未来が来ないとは言い切れない。
本質的な問いは、なぜ我々はノイマン型コンピュータを用いて機械に意図を伝えるのか、である。
ASIC(Application Specific Integrated Circuit)と呼ばれる、特定の用途向けの集積回路がある。
蟹チップとして、Realtek社のNIC(Network Interface Card)をご存じの方も多いと思う。
必要十分な処理があらかじめ定まっているのであれば集積回路を組んだ方が高効率省電力にできる。
暗号化や復号もASICで行われることが多く、ブロック暗号はその性質上集積回路での実装が容易であり、それに向けた研究も行われている。
一般的にも、ハードウェアエンコーダーなどでお世話になっている人も多いと思う。
ではなぜ、我々は身近な全てをASICにしないのか。
それは、書き換えできず、単純な処理しかできず、大量生産しないとコストに見合わないからである。
FPGAのように、ハードウェア記述言語を用いて集積回路を書き換えるものも、ほぼ同様の理由で研究開発用途や産業用途に留まっている。
(一部のPLD (Programmable Logic Device)は根強く産業利用されているし、大規模に展開され高効率を要求されかつ書き換えを求められるネットワーク機器では一部採用が進んでいる)
汎用的で書き換えが可能、伝える意図を変更できる様々な処理が可能な機械に価値があるから、である。
ここ半年から1年で急激にLLMの性能が上がったと感じている人と、コーディングツールとしてLLMの利用が洗練されたと感じている人の間には溝がある。
自分は、LLM自体は順調に進歩し続けているが、それほど劇的な変化はない、という立場をとっている。
これはモデルそのものが質的に大きく変化したと感じないから、である。
しかし、プログラミングの世界に限って観ると、コーディングエージェントや実利用では大きな変化があったと思う。
この、"コーディングを取り巻く環境としてのLLM利用"という文脈は、"LLMの進化"という文脈とは異なる、という点は頭の隅にでも覚えて帰ってほしい。
これは、LLMから直接と言う意味であれば、個人的にはNOだと思う。
ただし、LLMに指示すればバイナリが出力されるという意味であれば、個人的にはYESと答える。
この二つは明確に異なるので、今後自分の意見を述べる際には区別すると良いと思う。
コーディング周りの環境が劇的に整備されつつある、という話題に軽く触れたのはこのためで、LLMが直接バイナリを出力しなくても、結果が同じであれば人々はそれほど気にしない。
例えば、現時点でもローカルのLLMに指示するとGO言語で書かれたコードが生成され、ローカル環境に合わせたシングルバイナリが出力される一連のパイプラインを組むことはできる。
自分の想定する、未来のAIがバイナリを直接出力するというのは、この延長にあると思う。AIがイコールLLMである必要はどこにもない。
少しでもクラウド上でのサーバー処理について触れると、廃棄容易性(Disposability)は俎上に上がる。いつでも落とせていつでも捨てられる、という性質のことである。
こうした、単機能バイナリをコンテナ等に載せて処理し、日に数度デプロイするような環境だと、LLMがバイナリを出力するというのもそれほど遠い未来の話には思えなくなる。
LLMが機械語を出力する未来は個人的には来ないと思う。それは難易度が高いからではなく単純にメリットが少ないからである。
ただし、パイプラインが組まれた一環として、LLMがバイナリを出力する未来は、それほど不思議には思わない。現時点でも可能である。
単純なLinterから進んで静的解析や、動的な結合試験が組み込まれているCICDパイプラインが珍しいとまでは言えない現代において、来るべき近未来像としては妥当性がある。
(その場合、ソースコードはログとして機能し、テキストで保管が容易な、次回以降変更可能なコンテキストの一部になるだろうと思う。今後変更不要ならHDLでFPGAを弄った方が早い)
現代人のすべてがJavaで同一の書き方をしているのではない現状において、自然言語では揺らぎが強すぎて形式言語ほど意図を機械に伝えきれないという反論は、弱い。
それよりは、現代のLLMはコンテキストウィンドウが人間の数倍~数十倍程度で、適切に分割して処理しなければならず、大規模なソフトウェアを丸ごと扱えるほどではない、という反論の方が適切である。
ただ、LLMに適したプログラミング言語が生まれるのではないかと言う予測には懐疑的である。既存のプログラミング言語を使う方が人間が読みやすい。
AIが、人間が欲しいバイナリに適したプログラミング言語をLLMを用いて書き、LLMを用いてレビューし、テストツールでテストし、コンパイラでビルドし、ツールでデプロイし、実稼働するという未来予想図が、荒唐無稽とは思えない。
LLMに適したプログラミング言語が生まれる未来よりも、(冗長であっても)人間可読性の高いコードやSelf-documenting codeが生成される未来の方が、来そうに思う。
また、おそらくこの文章のもつくであろう「どんなプロンプトで書いたのか」という、一定以上の長さの文章はLLMが出力しただろうと仮定する人間が増えている(そしてある程度の妥当性がある)現状において、プロンプトで指示してデプロイまでされる未来はそこまで遠いとも思えない。
ただ、購入できるハードウェアの性能とコストが律速になるので、よほど特殊な(CPUやGPUの設計をLLMが劇的に改善する)状況にならない限り、5~10年はプログラマーが消えることは無いと思う。
金に糸目をつけないのであれば、再来年当たりからはLLMレビューのみで仕様バグ以外のほぼ無いプロダクトが世に出てもおかしくは無いと思う。
人類の言語そのものを目的関数としてそれに対して最適化するのがLLMなのだから、人類の認知で到底不可能なことはやりようがないだろう。
一文で本質を突いている。AIの能力限界を構造的に説明している。
今よりもAIが進歩した未来では「自然言語で与えられた仕様から機械語を出力するように訓練されたAI」が出てくるかもしれないけど、そいつの内部をよく観察したら結局今日の高級言語みたいなもので思考していた、みたいなオチになるんじゃないんですかね
結論と完全に一致。内部に抽象化レイヤーが生まれるという洞察。
マシン語でエラーを吐き出されても、元となるプログラミング言語での設計がすっ飛ばされていたら、どこの何が問題なのかが照合困難で修正が困難なのが根幹な気がします。
検証・修正サイクルに意味の単位が必要という話を、実務的な観点から der 表現。
計算機科学について何一つ知らなかったとしても、ニーモニックを無作為に並べるよりソースからコンパイルした結果の方が解空間が圧倒的に小さいのだから、機械語の生成は AI 以前に単なる探索として悪手だ、というのが自然な発想だと思うんだけど。
探索空間という観点からの指摘。高級言語は制約を与えて解空間を狭める役割がある。
抽象化した方が簡潔に記述できるのはAIにとっても同じことで、そっちの方がAIも理解しやすいし、生成しやすい。現在の機械語、アセンブリ、高級言語の階層構造が崩れるとは思えない。
「AIにとっても同じ」という視点が正しい。人間向けとAI向けが乖離しないことを理解している。
「AIが直接機械語書けばプログラミング言語は要らないのでは?」的な話はみんな最初に頭を過るだろうけど、コードを出力するのがLarge "Language" Modelである以上は意味論から組み立てる高級言語の方がそりゃ相性いいでしょうね。
AIを何かgodlikeな超知性だと思っている人間が多いけど、人間にとって「機械語よりも高級言語の方が当然書きやすい」のと同様、AIにとっても「機械語よりも高級言語の方が当然書きやすい」よなぁという話
「AI向け言語は人間にも使いやすいはず」という結論と同じ方向。
CPUへの命令にまで細かく分解された機械語なんて、それが何をするための処理なのかはAI(LLM)でも大変だと思いますよ。そのCPUへの命令群で何をやろうとしているのかなんていう情報はほぼ捨て去っているわけなので。
機械語には意味がエンコードされていない、という議論の核心部分。
機械語派は抽象化の力を舐めすぎ。型なし言語はトークン削減量に対して失われる確定情報量が多すぎ。LLMが内部で型を推論したら本当にトークンが削減できるか怪しい。全能AIを仮定するなら、「人が作ったハード上で機械語を直接書く」なんて中途半端で「ハードごと最適化」くらいの夢を語ってほしい。
AIが機械語を直接書くようになるとか言っている人は、機械語にこそ真の価値があると思ってるんですかね?いかなる音声も元にせず、指示に従ってレコードに直接溝を刻んで音を鳴らす技術が広まれば、音楽がさらに発展するとでも思っているんでしょうか?
AI専用言語にせよ機械語を直接出力にせよ、人の持つ高レベルの意図や仕様、アルゴリズムを正しく反映したデータセット、意味構造が保存された対応データが存在しないから難しいというか現実的に無理よなぁ
学習データの観点から。意味構造が保存されたデータがないと学習できない。
「AI がマシン語を吐いたらプログラミング言語はいらない」系の話が出てくるのは「AIは人間の言葉より、機械の言葉の方が本当は理解しやすいはずだ」という思い込みから来ているのじゃないかと思っていて
誤解の根源を正確に特定している。
まず機械語を直接記述するメリットがない。現代コンパイラ、インタープリタは超優秀(OSや組み込みの一部だけ)。人類のプログラム資産は高級言語がほとんど。AIの学習先もそれ、よってAIは高級言語で出力するほうが成績が良い
AIが直接機械語を出力すべきか?という話題が流行っている。直感的には、動作中のAIの中身を調べると、結局はコンパイラやプログラミング言語に相当する構造が即席で構成されてそう。つまり同じことを高いコストでやる感じになり
内部に抽象化レイヤーが生まれるという洞察。mod_poppoさんと同じ結論。
意味推論がLLMの得意技なので、意味を削ぎ落とした本質の塊である機械語は理解できず、意味の羅列である高級言語こそがむしろ生成AIに最適化されている。
コンパイラって優秀だから、AIといえども生で機械語を読み書きするよりもコンパイラ介した方がいいと思うんだよな。そのくらいLLMって機械寄りじゃなくて人間寄りなんだと思う。元がニューロンの模倣だし。
高レベルになるとコンパイラの出力を疑って生成されたコードを読まないといけない状況は普通にあるので、高水準なAI生成のコードが何をやってるか理解するスキルは当面は必須だと思う
もし仮にAIが機械語を吐き出せるとしても、高速に、決定論的に、段階的に、最適に動作するコンパイラを使わず、低速で、確率論的で、逐次的で、最適な動作ができないAIを利用する意義はほぼないと思う
コンパイラとの比較で、AIに機械語を吐かせるメリットのなさを指摘。
機械語は冗長で複雑かつ非常に正確な出力が必要なので、高級言語を使って既存のコンパイラやビルドパイプラインに乗せる方がAIにとっても効率が圧倒的に良いと聞いて確かになぁと思いました。
自然言語を処理するのがLLMなので、不自然な機械語は難しいだろうね。1命令ごとに「それは何を目的とした操作か」とか文脈でわかりにくいしねぇ。
AI時代の人間の仕事は、信頼性確約(=こういう理屈で大丈夫、と説明できること)が大きな領分を占めるだろうと推測されるので、機械語だけで良いとか言ってるやつは責任を取る気皆無なゴミ野郎です。
LLMに機械語を出力させようとするやつは「AIは機械なんだから機械語は簡単に扱える」という意味不明な思考をしてるだけなのでまともに取り扱うような相手ではない。名字が山口な人は長州方言が話せるんですよねとか言ってるくらい支離滅裂
人間がソフトウェアに「こう動いてほしい」という意図と「ソースコードがどのように変更されたか」の対応はGitHubとかに大量のデータがあるのでそれを学習すればコーディングするAIは作れる気がするけど、人間の意図と機械語の対応は学習データが全然ないからAI作れないように思う
「よく使うロジックを共通部品化する」とか「とはいえ局所最適な命令も欲しい」とかを考えると、中間言語を用意して最終的な機械語へコンパイルする、という流れは必要と思う。つまり、「AI用に最適化されたプログラミング言語」があるべき。
AIは人とのコミュニケーションをいかにスマートにするかにとんでもなく時間を掛けてきたわけで、人が直接読み書きできない機械語を出力しても意味がないよね。
AI機械語コーディング、やろうと思えばできるが普通はやらないような可読性の低いコーディング方法が多すぎて、AIチャンに本気出されるとバグったときに修復不能になりそうな気がする
これだけAIが発展したならAIに直接機械語作らせればいいじゃんみたいな言説をたまに見るけど、それどうやって今のLLMと同じ水準まで学習するの?といつも思ってる
ロジックに従っているわけだから、ソースで想定外の挙動をした被疑箇所前後にロガーやらブレークポイントを仕込むという原始的だが確実なデバッグが、いきなり機械語を吐かれると出来ないんよ。
デバッグ実務の観点から。意味の単位がないとデバッグできない。
AIにしか読めない言語より、人類が発見的に設計したんじゃない人類にもAIにも優しいプログラミング言語・中間表現・機械語をデータドリブンに統計的に正しくAIが作るって方向に行かないですかね
AIが直接機械語吐くのは遠回りしてるだけだから無いとして、完全に人間がプログラムを読まなくなったらプログラミング言語はどう進化するのかは気になる
「無い」と断じた上で、次の問いを立てている。建設的。
プログラミング言語は人間の認知負荷、記憶量の限界、ミステイク、スパゲティコード理解できないためにあるので、AIだったら直接機械語吐くだろ。常考。
反論: 完全に逆。プログラミング言語は「人間の限界を補うため」ではなく「意味を構造として保持するため」にある。AIも意味を扱う以上、意味を表現する層が必要。「常考」と言いながら何も考えてない。
シンギュラリティ前夜 アダム(AI)が、人間には理解できないどころか、読むことすらできないコードを出力し始めた。後に判明することだが、それは機械語だった。
反論: SFポエム。「人間に読めない=機械語」という発想が、まさに今回の議論で否定されてる誤解そのもの。AIが人間を超えるとしたら、ローレベルに降りるんじゃなくてハイレベルに登る方向。
なんかLLM界隈?では「AIがやがて機械語をだす(ので実用的にはコンピュータ言語は不要になる)」と言うと、無知だとか実情知らないとかブロックしてやるとか言われる見たいだけど。数年は無理だけど、いずれそうなると予想してる。
反論: 「数年は無理だけど、いずれそうなる」の根拠がゼロ。なぜそうなるのか、意味と機械語のギャップをどう埋めるのか、何も説明してない。批判されてる理由を理解してない。
プログラム言語って人間が扱うために自由度を削り取った結果の産物やから、AIに機械語で作ってもらって最適解であれば、現代の言語の宗教感ってほぼほぼ否定されるのです
反論: 「人間が扱うために」という前提が間違い。自由度を削ってるのは「意味を保持するため」。AIも意味を扱う以上、同じ制約を受ける。「宗教感」とか言って茶化してるけど、構造を理解してない。
「まだ」人間が安心する為では無いのですか?コンパイル後の機械語を読む人が殆ど居ない事は受け入れてるのに、将来的にAIが機械語出力する事に忌避感を感じるのは論理的とは言えません
反論: コンパイラの出力を読まないのは「コンパイラが検証済みだから」。AIの出力は検証が必要。この二つを同列に扱うのがおかしい。「論理的とは言えません」と言いながら、論理が破綻してる。
AIが機械語はけば、は数ヶ月前にメンバーと話になった。結論は、いまはあかんやろけど数年後に、もう人間が見る必要全然ないわ、となったらありうるな、となった。
反論: 「人間が見る必要がなくなったら」という仮定自体が検討されてない。人間が見なくていいとして、AIはどうやって検証・修正するの?意味の単位がない機械語で?その議論が抜けてる。
機械語って逆にトークン消費するの?お〜…じゃあLIFE3.0時代のAIは機械語ではなくAI用に最適化された人間には読めない言語で思考する、という方向性なのかな。
反論: 「人間には読めない言語」がなぜ生まれると思うのか。AIは人間の認知を模倣してるので、AIにとって扱いやすい言語は人間にも扱いやすい方向に収束する。逆方向には行かない。
中間言語不要派の言い分:AIが直接機械語を出力可能で、効率最適化が進む。人間の都合で言語が存在するが、AIなら移植性や抽象化不要で中間層をスキップできる。
反論: Grok自身が「中間言語不要派の言い分」として紹介してるけど、これ全部間違い。「人間の都合で言語が存在する」が誤り。意味を扱うために言語が存在する。AIも意味を扱う。
反論: 「うまくやってくれるかもしれん」で済む話じゃない。なぜうまくいくのか、検証・修正はどうするのか、何も考えてない。
反論: これは自虐なので反論というより…正直でよろしい。専門外だと自覚してるなら、なぜそう思ったのか掘り下げて、専門家の意見を聞く姿勢があれば良いと思う。
筋の悪い言説に共通するのは:
1. 「高級言語=人間のため」という誤解 - 意味を扱うための構造だと理解してない
2. 「AIは機械だから機械語が得意」という誤解 - AIは人間の認知を模倣してると理解してない
https://zenn.dev/ryo369/articles/d02561ddaacc62
このあたりを読んで、2026年はコードレビュー「しいや派」と「すんな派」に分かれる年になるんじゃないかと思った。
※「しいや」は「〜したほうがいいよ」ではなく「〜しなさい」のニュアンス
ここでタイトルにジハード(聖戦)と書いたのは、この対立が単なる手法論ではなく価値観の相違だからだ。
しかも、どちらもそれなりに正しい。
しいや派「レビューしないのは無責任だ!AI エージェントは禁止だ!」
すんな派「全部読むのは非現実的だ!AIエージェント使えないとか今の時代にありえない!」
これさ
愚かな人間の都合など完全無視、LLMのための高効率プログラミング言語「Sui」(粋)
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2069573.html
別にいいんだけど、どうにもブクマカ含めて、しっくり来る批判できてないんだよな
それが気になってしょうがない
俺ごときが言ってもアレだから、Gemini3.0先生に頼んだよ(一時チャット、Pro 3.0 思考モード)
ユーザーが提供した情報と、一般的なLLMの技術特性に基づき、プログラミング言語「Sui」についての冷静かつ客観的な評価をまとめます。
感想: 一言で言えば、**「思想実験としては極めて面白いが、実用性とLLMの学習原理を無視した『早すぎた最適化』」**です。
作者の「人間ではなくLLMを主客にする」という視点の転換は、アーティスト的・哲学的な問題提起としては鋭いですが、現在のLLM(Transformerアーキテクチャ)の動作原理を工学的に捉えると、メリットよりもデメリットが上回る可能性が高いです。
メリット:
・トークン効率の改善: Python等と比較して記述が圧倒的に短くなるため、出力速度の向上と課金コストの削減(トークン節約)は確実に達成できます。
・構文エラーの激減: 括弧やインデントの複雑なルールを排除しているため、「閉じ忘れ」などの単純なSyntax Errorは減るでしょう。
・コンテキストウィンドウの節約: 長いプログラムでもコンテキスト(メモリ)を圧迫しにくくなります。
・学習データとの不一致: LLMは「大量の人間用コード(Pythonなど)」を学習して賢くなっています。未知の言語「Sui」を書かせるには、Few-shot(プロンプトでの例示)に頼るしかありませんが、これではLLM本来の推論能力やコーディング能力(事前学習の重み)を活かせません。
・ブラックボックス化: 生成されたコードがバグっていた場合、人間が読んで直すことが不可能です。「LLMに直させる」にしても、LLM自身がSuiのロジックを深く理解していないため、無限ループ(幻覚の連鎖)に陥るリスクが高いです。
・CoT(Chain of Thought)の阻害: 最近の研究では、LLMは「冗長な思考過程」を出力することで論理的整合性を保つことがわかっています。極限まで圧縮された記号列は、LLMの「考える余地」を奪い、論理破綻を招く可能性があります。
正しいと思う所(Agree)
理由: 人間にとっての「読みやすさ(可読性)」は、機械にとって単なるトークンの無駄遣いです。if x > 10: よりも ? x 10 の方が情報密度が高いのは事実です。
理由: TransformerのAttentionメカニズムにとって、遠く離れた ( と ) の対応関係を維持するのは計算コストが高く、ミスの原因になりやすいです。ネストを排除する方向性は機械的処理として正しいです。
正しくないと思う所(Disagree)
・「可読性を排除しても良い」:
理由: ソフトウェア開発においてコーディングは「書く」時間より「読む・直す」時間の方が長いです。AI生成コードであっても、最終責任は人間が負う現状では、人間が検証不可能なコードは「危険なバイナリ」と同義であり、プロダクトには採用できません。
理由: 前述の通り、現在のLLMは「人間語の確率分布」を学習したモデルです。「LLMにとって自然な言語」とは、実は「人間にとって自然な言語(英語やPython)」そのものです。Suiは「計算機にとっては最適」ですが、「現在のLLMにとっては異言語」です。
パース(解析)は容易になりますが、LLMは「前の行の文脈」を読んで次の行を出力するため、行を独立させすぎると文脈の連続性が失われ、複雑なアルゴリズムの構成力が落ちる可能性があります。
LLMが最も苦手とする「深いネスト構造の維持」を回避する策として有効です。アセンブリ言語に近いフラットな構造は生成難易度を下げます。
これが最大の問題点です。LLMは変数名(user_id, total_price など)に含まれる「意味」を使って推論を行っています(Semantic Grounding)。すべてを記号化すると、LLMは変数の役割を見失い、論理的なバグを埋め込みやすくなります。
トークン効率は最強ですが、1文字の違いで意味が激変するため、LLMの確率的な「ゆらぎ」による1文字ミスが致命的なバグになります。冗長さはエラー訂正の役割も果たしています。
goto 文の多用はスパゲッティコードを生みます。LLMにとっても、構造化プログラミング(if/forブロック)の方が、「ここからここまでがループ」というチャンク(塊)として認識しやすいため、一概にジャンプ命令が良いとは言えません。
>現在のLLMは「人間語の確率分布」を学習したモデルです。「LLMにとって自然な言語」とは、実は「人間にとって自然な言語(英語やPython)」そのものです。
ここ!マジで覚えてね
LLMはこれまでの機械よりも人間に近いと思ってほしい、人が苦手なことはAIも苦手
機械は論理的でロジックに強くて〜っていうのはAIには通用しない
ついでに、「LLM用プログラミング言語」の潮流について
「LLMのための言語」という文脈は、大きく2つのトレンドに分かれます。Suiは後者に属しますが、主流は前者です。
・DSPy, Guidance, Microsoft Guidance:
・プロンプトエンジニアリングを構造化し、LLMの出力を型(JSONなど)に強制したり、思考プロセスを制御するためのフレームワーク。
・SGLang:
・これらは「人間がLLMを操るための言語」であり、実用化が進んでいます。
・Gorilla LLMなどの試み: API呼び出しに特化したファインチューニングなどがありますが、独自の「新言語」を作らせるよりも、既存の Python や JSON を正しく出力させる方向(Constrained Decoding)が業界の標準解です。
・擬似コード: 論文レベルでは、Pythonの代わりに中間的な擬似コードを出力させ、それをコンパイラで処理する手法も研究されていますが、Suiほど極端な記号化は稀です。
後者については
現状の最適解: 現在のLLMを使う限り、「LLM用言語」の最適解は Python です。なぜなら、世界中のGitHubのコードを学習しており、LLMが「最も流暢に話せる言葉」だからです。無理にSuiを話させるのは、日本人にエスペラント語で詩を書かせるようなもので、パフォーマンスは落ちます。
総評: Suiは、「既存のLLM(GPT-4など)に書かせる言語」としては失敗する可能性が高いですが、「未来のAIネイティブなコード生成のあり方」を示唆するアート作品としては高く評価できます。作者の「愚かな人間に合わせるな」というパンクな精神は、エンジニアリングの枠を超えた鋭い批評性を持っています。
お前らは安易にオレオレ言語作るんじゃないぞ、作るにしてもAIに聞きなよ?
聞く時は忖度させるんじゃないぞ?
この作者もAIに乗せられたのかもしれんし
______
プロンプト
以下が「LLM用プログラミング言語」としてメリットがありそうか、感想を教えて下さい。
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2069573.html
https://github.com/TakatoHonda/sui-lang
・思想的に正しいと思う所、正しくないと思う所を理由込みでまとめてください
・最近のLLM用プログラミング言語についてもまとめてください
・そもそもLLM用プログラミング言語という目標自体の評価をしてください
(省略)
Qiita の文化変質は、技術系コミュニティ全般で起きている知的インフレの縮図みたいなものなんだよね。昔は
みたいに基盤技術を自前で握りつぶした記事が純粋に評価されていた。なぜなら、それを書ける人がそもそも少なく専門性で差別化できていたから。
昔は「Pythonで形態素解析器自作」なんて、アルゴリズム・CS基礎・実装力が揃ってないと無理だった。
難しいことをやってそうに見える記事を、凡人でも量産できるという環境が生まれた。
Qiita を読む層が「実装力を鍛えたいエンジニア → とりあえず AI 触りたいライト層」に変わった。
「再現性のないLLMコピペ」「AIツール使ってみた」みたいなのが評価される。
本気の記事は長く、コードが多く、前提知識も重い。そして PV が伸びない。
つまりQiita のインセンティブ構造と、高度技術記事のインセンティブ構造がズレた。
理由は明確で、読む側がそれを理解できないので評価する母集団がいない。
昔はユーザ層が技術ガチ勢寄りだったので、少数でも濃い支持があった。
今はライト層が母集団なので、希少な高度記事が埋もれるのは自然。
Qiita がライト層に最適化した結果、本気の人たちは別の場所へ移動した。
1.4ナノを目指すのは結構で、まぁそりゃ頑張ってトライアンドエラーやってりゃいつかは稼働し生産にこぎつけるだろうが
量産開始したころには他社はその先に行ってる。
それでは商売にならないんです。
18ヶ月程度で次のプロセスルールが稼働し始める、稼ぎの本丸はそちらに移る。
半導体価格は月次(年次ではない)3%下がる。DRAMはもっとエグい。
1個一万円の半導体が翌月には9700円になり、1年後には7000円になってる。
3年後だと3500円。そういう世界。
1個1万円をどれだけ長く維持できるかが勝負になる。この期間で一気に稼ぐ。
半導体産業の面白いのは、では世代交代したら古い設備は用無しか?
現代のデジタル機器には無数の半導体が組み込まれており全てが最先端である必要はない。
例えば、ルーターだったり、制御装置だったり。ASICだったり。
話が逸れるが、この仕組みに気がついたのがスティーブ・ジョブズ。
iPhoneが登場するまで携帯電話向けのSoCは2,3世代古い設備で製造されていた。
サーバーやパソコン向け最先端プロセスルールの半導体工場が稼ぎ終わった後の設備で組み込み用SoCが作られており、
携帯電話もそれらが使われていた。
ジョブズのアイデアは「最先端で作れば携帯の性能一気に上るじゃん」
もちろんOSやコンパイラ、ライブラリ群の整備も大きいのだけど、この半導体チートが「iPhone=高性能」の印象を作った。
だから歩留まりも収率も良い。ウェハー単価は高いけど採算は取れる、ジョブズはこれに気がついた。
Android勢がこれに追いつく(最先端プラントで泥用ARMが製造される)のに5年かかった。
ラピダスに話に戻るが、2ナノ。1.4ナノを作るのはそれほど難しくはない。試作品なら。
しかし大規模装置産業の半導体工場は試作と量産技術はまったく別物。
試作品ができたら量産はあと一歩、にはならない。別物。
例えば、一昔前話題になったフッ化水素、12ナインとか、日本が強いよね。
半導体を作るには大量に使う。
試作品、ラボレベルでメーカーから届いた試験管の少量を扱うのと、
ローリーで輸送され(ここでも汚れる)、プラント内に備蓄され(ここでも汚れる)、配管が適切に設計され、制御され、製造装置に供給されるラインが構築され、その配管で送液され(ここでも汚れる)、半導体が洗浄され(ここでも汚れる)、使用済み廃液が確実に回収する仕組みが構築されており。。。
書けば簡単なようでめちゃくちゃ難しい。別次元の技術やノウハウがある。
そしてTSMCの強みはこれらの製造インフラを高レベルで高速に構築し改善できる、それらの人材も揃ってる、育ってる。
つまりプラント立ち上げが早く競合他社が追いつく前に1個1万円で売り切ってしまう。
競合他社が追いついたときには7000円になってる。
TSMCは1万円で売り切って爆益を出し、それを原資に次のプラントを立ち上げる。
1.4ナノだろうが3年後には1個3500円にしかならんのです。
TSMCは戦略的に旧世代の価格を下げてくるのでさらに出遅れ他社の利益率は下がる。
一日でも、一ヶ月でも早くプラント稼働させるのが利益の源泉なのだが、日本企業、しか国策官営企業にそんなもん不可能なのです。
んなもんラピダスの中の人だって百も承知だろう、でも頑張ってる、頑張ってるフリ、宣伝。
ちなみにJASM(TSMC)熊本ですら22nmしか作っていない。
台湾の経済安全保障のため最先端を避けたという説明だけど、ウソです。
作れないの。
天下のTSMCプラント立ち上げ部隊ですら、異国の地でサプライヤー全て巻き込んで最先端プロセスを稼働させる事はできない。
彼らは新工場の設計、プロジェクトマネジメント、立ち上げ、安定量産、これらの業務にそれぞれ精鋭の専属部隊がいる。
実際、JASM熊本も公式な量産開始から一年経ってもフル稼働はしていない。アメリカで大トラブルを起こしているのも御存知の通り。
量産って難しいんです。簡単じゃないんです。小さな外的要因一つで製造は止まる。
現状、LLM(というかtransformer)を超えるAI技術ってなんかあるんすか?
バイナリを生成するならただのコンパイラを使えばいいだけすよね?
お前も馬鹿の部分集合?
AIにとっては、Pythonのような中間表現を生成させる方が得意であると考えられます。
中間表現(Pythonなど): 人間が理解しやすいように設計されており、抽象度が高いです。AIは、より少ないトークンで複雑なロジックを表現でき、学習データも豊富にあるため、意味的な整合性やロジックの正確性を保ちやすいです。
機械語: 抽象度が非常に低い(CPUの命令レベル)です。特定のCPUアーキテクチャに依存し、メモリ管理やレジスタ割り当てといった低レベルの詳細をすべて正しく処理する必要があります。これはAIにとって学習が複雑で、小さなミスがプログラム全体の破損につながりやすくなります。
中間表現: 比較的長いコンテキストを保持しやすく、デバッグやエラーの特定も高レベルで行えます。
機械語: 必要な命令数が多くなりがちで、AIが長大なバイナリシーケンスを生成する際に、コンテキストウィンドウ内に必要な情報すべてを保持しきることが難しくなる可能性があります。また、中間表現と比べて意味的な構造が薄いため、AIがバグのないコードを生成するのが格段に困難になります。
中間表現: Pythonのような高級言語は、特定のハードウェアに依存しないため、移植性が高いです。
機械語: 特定のアーキテクチャ(例: x86, ARM)に完全に依存するため、AIが異なる環境向けにコードを生成する場合、それぞれのアーキテクチャごとに学習と生成を行う必要があり、汎用性が低くなります。
現在のAI(特に大規模言語モデル)の能力は、人間が扱う高レベルの抽象的な概念やロジックの理解に優れているため、その能力を最大限に活かせる中間表現の生成の方が得意です。
機械語の生成は、極めて精密で低レベルな制御が要求されるため、AIにとってはるかに難易度が高いタスクとなります。
AIが中間表現を生成した場合でも、その後の処理(コンパイルやJITコンパイル)によって最適化され、最終的な機械語が生成されます。
これは従来のコンパイラ設計と同じアプローチであり、AIは「何をすべきか」という高レベルの指示に集中し、コンパイラが「どのように効率的に実行するか」という低レベルの処理を担当する、役割分担の面でも合理的です。
Q.
生成AIにソフトウェア開発を支援してもらう場合、ソースコードの作成を依頼する形式が多いと思いますが、実行ファイルを直接出力してもらうことも技術的には可能なのでしょうか?
A.
生成AIによる実行ファイルの直接出力は、技術的には極めて困難です。現在のLLM(大規模言語モデル)ベースの生成AIは、ソースコードの生成には向いていますが、実行可能なバイナリファイルを直接出力することには根本的な制約があります。
技術的な制約
LLMはテキストベースのトークン処理を基本とする設計であり、バイナリデータを直接扱うことができません。実行ファイルは0と1の連続したバイナリコードですが、LLMはこの形式でデータを生成するようには訓練されていないため、バイナリファイルを直接出力することは現在のアーキテクチャでは実現が困難です。
従来のソフトウェア開発では、ソースコード→コンパイル→アセンブル→リンクという複数段階のプロセスを経て実行ファイルが生成されます。各段階で最適化や機械語への変換が行われるため、この過程を完全に省略してAIが直接バイナリを生成することは技術的に非常に複雑です。
研究レベルでは、バイナリデータを扱う試みも存在します。例えば、LLM4Decompileのような研究プロジェクトでは、バイナリコードを逆コンパイルする際にバイナリを一度アセンブリ言語に変換してからLLMで処理しています。逆に言えば、生成時も同様の変換プロセスが必要になると考えられます。
実務では、生成AIにソースコードを作成してもらい、それを従来のコンパイラやビルドツールで実行ファイルに変換する方式が標準的です。この方法であれば、デバッグやテストも容易で、生成されたコードの品質を確認しながら開発を進められます。
なお、フォントファイルのようなバイナリ形式でもオープンソースとして扱われる例はありますが、これはフォントという特定用途の場合であり、汎用的な実行ファイル生成とは異なります。
Q.
A.
おっしゃる通り、画像生成AIもバイナリを出力しているという点では共通していますが、実は根本的に異なる仕組みで動作しています。
アーキテクチャの違い
画像生成AIは拡散モデル(Diffusion Model)やGANなど、視覚データに最適化された専用のアーキテクチャを使用しています。一方、LLMはTransformerベースのテキスト処理に特化した構造を持っています。画像生成では、ノイズから段階的に画像を生成するプロセスを経て、最終的にピクセル値という数値データ(バイナリ)を出力します。
画像ファイルのバイナリは連続的な数値(ピクセル値)の集合であり、各ピクセルが色情報を持つという規則的な構造です。最近の研究では、画像をビットプレーン(bit-plane)として扱い、XOR演算でノイズを加えるBinary Diffusion Probabilistic Model(BDPM)のような手法も開発されています。
対して、実行ファイルのバイナリは機械語命令の複雑な配列であり、CPUが直接実行できる命令コード、データセクション、リンク情報などが厳密な形式で配置されています。わずかなビット誤りでもプログラムが動作しなくなるため、画像のような連続値とは性質が大きく異なります。
画像生成AIは、ImageNetやLAIONなどの大量の画像データセットで訓練されており、ピクセルパターンを学習します。一方、実行ファイルを生成するには、コンパイルプロセス全体(構文解析、最適化、機械語変換、リンク)を学習する必要がありますが、これは単純なパターン学習では実現できません。
したがって、画像生成AIが成功しているのは、画像という特定のドメインに特化した設計と、規則的なデータ構造があるためであり、同じ手法を実行ファイル生成に適用することは技術的に非常に困難です。
もうアラフォーになるんだけど、でも、夢は捨てきれていない。
劣っている自分でも、プログラミングなら負けないと言えるようになりたかった。
諦めればいいんだけど、でも、自分にはプログラミングしかない。
「コンピューターサイエンスのすべての分野に精通」してないのを恥じている。
いや、「インフォメーションエンジニアリングのすべての分野に精通」してないのも恥じている。
全部を上手くできない自分が、ただただ劣っていて嫌で仕方がない。
「コンピューターサイエンスのすべての分野に精通」している人がいるなかで、自分ができてないのが嫌になる。
なんで、自分にはできないんだと永遠に責め続けてしまう。できる人がいるのに、どうして自分にはできないのか。
全部できていたい、なんで全部できていないのか、それが自分の頭の問題だということを受け入れたくない。
UT入ってIS行くような人ができることが出来ないことに勝手に差を感じてる。
プログラミングが得意になるように頑張った。
お前は劣っているのだから、要領よく文系としては生きられないからと。
しかし、だからといってあきらめたくない。全部上手くできるようになりたい。
少しづつあがいてるけど、結局、やることなすことうまくいかない。
React/Vueみたいなフロントエンドフレームワークも作れてない。
出来てないことだらけなのに、まだ挑戦していたいと思ってしまう。
たぶん、脳の病気なんだと思うけど、でも、やめたくない
一等賞になれないのだろうけど、でも、一等賞を目指したくなる
これよく言われてるけどなんか違うよな
C/C++でCSやHWに近いレイヤーにいる人なら普通にコンパイラのバグかどうかまで追うために簡単に出力されたアセンブラコード見ることあるし
この手のこと言ってる人って全てのレビューもLLM任せって感じなんですかね
JavaScriptベースのWebでなく各種ネイティブアプリで単体テストレベルだと問題なくて結合して実際に動かすとバグってるってケースを人の手が介在しないレベルで解消できるのっていつになるんだろ
コード理解してないけど AI 使ってなら書けるって人は今後、普通になってくるだろうし、それはアセンブラ/マシンコードを理解してない人がコンパイラ使ってたのと大して変わらんのでは、という気もしなくない。— mattn (@mattn_jp) October 8, 2025
ウィィィィス!どうも〜█████でぇぇすぅ〜
スゥゥゥ…え〜とですねぇ、無限ループの話ですけども…
あ〜なるほどなるほど、専門学校でプログラム勉強してるんですねぇ。僕もね、昔ちょっとだけプログラミングやったことあるんですよ。スゥゥゥ…まぁ僕の場合は独学でしたけどね、専門学校とか行かなくても、才能があればできちゃうんですよねぇ…
で、while(1)とfor(;;)の話ですけども…スゥゥゥ…
これはねぇ、多分ね、昔のC言語の時代からの話だと思うんですよ。僕が思うにはね、for(;;)の方がコンパイラ的に最適化されやすいっていう、まぁ都市伝説みたいなのがあったんじゃないかなぁ…
スゥゥゥ…でもね、正直言うとね、while(true)が一番読みやすいですよね。僕もそう思いますよ。初学者の人にはね、while(true)を教えるべきだと思うんですよねぇ…
あのね、僕が昔ちょっとだけやったバイト先でも、プログラマーの人がいたんですけど、その人もwhile(true)使ってましたもん。スゥゥゥ…
でもね、ネットで誰かが言ってたっていうのは…まぁ多分古い時代の人の意見じゃないですかねぇ。今の時代、コンパイラの最適化技術も進歩してるし、可読性の方が大事ですよねぇ…
スゥゥゥ…あのね、プログラミングってね、他の人が読んだときに分かりやすく書くのが一番なんですよ。僕もね、動画作るときもそうなんですけど、視聴者のことを考えて作らないといけないんですよねぇ…
まぁfor(;;)推しの人は、多分昔からプログラミングやってる人で、なんかこう…古い慣習にこだわってる人なんじゃないですかねぇ。スゥゥゥ…
でもね、君みたいな初学者の人は、while(true)で全然いいと思いますよ。むしろその方が、コードの意図がはっきりしてていいじゃないですか。
スゥゥゥ…専門学校の先生には、while(true)の方が可読性高いですよねって聞いてみたらいいんじゃないですかねぇ。多分先生も同じこと言うと思いますよ。
まぁ僕も、もしプログラミングの動画作るとしたら、絶対while(true)で教えますねぇ…初心者に優しい説明をするのが、僕のスタイルですから…