はてなキーワード: コンパイラとは
現状、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)で教えますねぇ…初心者に優しい説明をするのが、僕のスタイルですから…
正直自分(さっきChatGPTに聞いた本人)はC+ちょっと読み書きできるレベルのクソ素人だけど、返ってきた内容は問題なく理解できたよ
もっと専門的で深い知識を尋ねたらテキトーなこと返してくることもあるけど、
この初学者が疑問に思うレベルに対する回答なら、経験的に何の問題もないと思う。
特にコーディングの現場では(きちんと読み書きできることが前提だけど)、生成AIが活躍しまくってるのは言うまでもないし。
あまりChatGPT使ったことないけど増田みたいな業界にいるなら、試しに使ってみて限界を知っておくのは有効じゃないかな。
ーーーーーーー以下ChatGPTーーーーーーー
正直に言うと「知識ベースの質問をChatGPTにする」ことにはメリットとデメリット両方あります。
✅ メリット
辞書とか教科書みたいに固い説明より、会話的に「なんで?」に答えてくれるから最初のとっかかりに便利。
背景や文脈を補ってくれる
教科書だと「for(;;)とwhile(1)の違い」とだけ書いてあって、文化的背景までは書いてない。でもChatGPTだと「Linux界隈ではこう」「教育的にはこう」って整理してくれる。
比較や整理に強い
複数の考え方を「Aのメリット・Bのデメリット」って並べて見せてくれるのは本や検索より速い。
❌ デメリット
正確性に限界がある
細かい仕様(コンパイラごとの差、バージョンごとの挙動)になると間違ったことを言う可能性がある。
→「厳密な技術仕様や標準の条文」は公式ドキュメントの方が確実。
ソースが明示されない
「誰が言ったか」みたいな一次情報を特定するのは苦手(ただし最近はウェブ検索で補える)。
学問分野でもソフトのバージョンでも「昨日出た変更」にはすぐ追いつけない。
📌 使い分けのおすすめ
ChatGPTに聞く
→「とっかかり欲しい」「背景整理したい」「分かりやすい例えが欲しい」
だから「アイデア出しや文章整理はOK、知識質問は微妙」じゃなくて、
むしろ 知識質問もOKだけど“鵜呑みにしないで確認する”のが正しい使い方 だと思うんです。
質問!
HTMLコンパイラとは、一般的な「コンパイラ」の概念とは少し異なり、HTML文書や要素に対して新しい文法や振る舞いをブラウザに伝え、拡張するための仕組みを指すことが多いです。例えば、AngularJSのHTMLコンパイラは、開発者が定義したカスタム要素や属性(ディレクティブ)を解釈して、動作を紐づける役割を持ちます。これにより、標準のHTMLにはない独自の文法や機能をブラウザ上で実現できます。
一方、一般的な「コンパイラ」は、人間が書いたプログラムコードをコンピュータが理解可能な機械語や中間言語に翻訳するソフトウェアや処理のことです。この処理を「コンパイル」といい、プログラミング言語で書かれたソースコードを一括で変換し、実行可能な形式にします。コンパイラと対比されるのが「インタプリタ」で、こちらはソースコードを逐次読み解いて実行する方式です。
まとめると、「HTMLコンパイラ」はHTMLの静的な宣言文法を拡張し、新たな振る舞いを実現するものであり、主にフロントエンドフレームワーク(例:AngularJS)で用いられます。一方、「コンパイラ」はプログラムコード全般を実行可能な形式に変換する処理・ソフトウェアです。
https://ja.taiwebs.com/windows/download-html-compiler-2548.html
フロントエンドフレームワークで、新しいHTML要素や属性を作成するために用いる。
今時点の使えそうな Sonnet4 を使ってコード生成とか業務でやる時に Typescript は案外うまくいかないことが多い。
UIとかシンプルなものであれば結構うまくいくけど、graphql, prisma みたいなところになると、token数すごくなるし結局完成しない。
この辺りが、なんとも小骨がひっかかるから。Typescriptの型ってやっぱりあれなのかと思って調べてもらったんだ。
↓↓↓↓↓↓↓
## ソフトウェア工学から見たTypeScriptの3つの根本課題
Web上の専門的な議論や論文では、TypeScriptの課題は主に以下の3点に集約されます。これらはすべて、JavaScriptという土台との不適合性に起因するものです。
1. 不健全な型システム (Unsound Type System)
ソフトウェア工学において、型システムの**「健全性(Soundness)」**とは、「コンパイル時に型エラーがなかったプログラムは、実行時に型エラーを起こさない」という保証を指します。
TypeScriptは、この健全性を意図的に放棄しています。
設計目標の不在: TypeScriptの公式ドキュメントには「健全であること」は設計目標ではないと明記されています。これは、JavaScriptとの互換性や開発者の利便性を優先した、根本的なトレードオフです。
具体的な不健全さ:
配列の扱い: string 型の変数に (string | number) 型の配列を代入できてしまうなど、配列の扱いに不健全な部分があります。これが原因で、実行時に数値を取り出してしまい、string型のメソッドを呼び出してエラーになる、といったことが起こり得ます。
any型と型アサーション: any型の存在や、開発者がコンパイラに「これはこの型で間違いない」と強制する型アサーション(as構文)は、健全性を根本から破壊する「抜け道」です。
関数の引数(Bivariance): 関数の引数の型チェックが、他の多くの言語(反変)とは異なり、より緩いルール(双変)になっています。これも実用性を優先した結果、理論的な正しさを犠牲にしている例です。
学術的な観点では、この「不健全さ」はTypeScriptの型システムが持つ最大の弱点と見なされています。
2. 構造的部分型(Structural Typing)の罠
TypeScriptは、クラス名などによらず「構造が同じなら同じ型」とみなす構造的部分型を採用しています。これはダックタイピングが主流のJavaScript文化に合わせた賢い選択ですが、ソフトウェア工学的にはいくつかの罠があります。
意図しない互換性: 全く異なる目的で作られた二つのオブジェクトが、偶然同じ構造を持っていたために、型チェックをパスしてしまうことがあります。これにより、ドメイン(業務領域)の意図とは無関係にコードが結合してしまい、予期せぬバグを生む原因となります。
過剰なプロパティの許容: const config: { port: number } = { port: 8080, host: 'localhost' }; のように、変数経由で代入すると、型に定義されていない余分なプロパティ(host)がエラーになりません。これは仕様ですが、開発者の意図しないデータが紛れ込むことを許容してしまい、セキュリティやバグのリスクに繋がります。
これは「TypeScriptの型は、データの『形状』を記述するが、その『意味』や『文脈』を保証しない」という根本的な限界を示しています。
3. 「漏れのある抽象化(Leaky Abstraction)」としての本質
Joel Spolskyが提唱した「漏れのある抽象化の法則」に倣えば、TypeScriptはまさにその典型例です。
TypeScriptは「静的型付け」という抽象化レイヤーを提供しますが、開発者は常にその下にあるJavaScriptの泥臭い現実(undefined, null, thisの挙動など)を意識し続けなければなりません。
抽象化の不徹底: 型を書いているときも、最終的にそれがundefinedになりうることや、thisが何を指すかを常に考えなければなりません。抽象化レイヤーが、下位レイヤーの詳細を隠蔽しきれていないのです。
摩擦コスト: この「漏れ」が、これまで議論してきた「Union地獄」や「境界での型変換の手間」といった、開発上の継続的な摩擦コストを生み出しています。
## 結論
ソフトウェア工学的な観点から見ると、Web上の専門家の議論は我々の対話の結論を強く裏付けています。
TypeScriptの課題は、個別の機能の優劣ではなく、「健全性を犠牲にしてでも、JavaScriptという動的な土台との互換性を最優先した」という、その成り立ちそのものにあります。その結果として生じる「不健全さ」「構造的部分型の罠」「漏れのある抽象化」といった問題は、この言語を使い続ける限り、アーキテクトが向き合い続けなければならない、本質的なトレードオフなのです。
ここで言う「プログラミング初級者」とはプログラミングの記述が上から下へ向かって順番に処理されること、条件分岐やループという概念があることを理解しており、RPGゲームが作れる「RPGツクール(現RPG Maker)」や学童向けプログラミング環境「Scratch」、「ナビつき! つくってわかる はじめてゲームプログラミング(ナビつく)」、ADVゲームが作れる「吉里吉里(もしくは吉里吉里2)」、過去にBASICやC、HSP、Javascriptあたりでプログラミングへ挑戦し挫折したなどなど、ある程度の「プログラマブルなロジック」構築の経験がある者を指します。
ある時、筆者はふと思いました。「生成AIはなんだかんだで膨大なテキスト情報を処理している事がキモだよなぁ」とありきたりなことを。
そして、同時にプログラミング初級者の弱点として「現在記述されているコードの管理においてテキストと実際の処理フローが脳内で一致しない」「プログラミング言語ごとに定められているルールや関数予約語の把握が困難」なのが問題とも考えました。
前述したプログラミング初級者の弱点の考え自体は車輪の再発明であり、「Scratch」や、より高度な「UML」が既に存在しており、特筆すべきことは何もありません。
しかし、「Scratch」や「UML」、なんなら「RPGツクール」や「吉里吉里」などに無い点として、現代では自然言語処理が大幅に向上した生成AIが実用の域にまで到達しつつあるのが従来とは異なる点でした。
つまり、自然言語を混ぜ込みやすいテキストベースの言語、かつ、処理を記述するとフローが視覚的に理解しやすい言語、可能であれば情報量が多くて一部の界隈で広く使われている言語があればプログラミング初級者も気軽にプログラミングできるのではないか?と発想しました。
コンピュータ(コンパイラやインタプリタなどソフトウェアを含む)が解することができる言語にはプログラミング言語以外にも様々あり、今回取り上げるのは「データ記述言語」と呼ばれるものです。
データ記述言語の中でもグラフ作成へ特化しており、特にフローチャート作成で真価を発揮する「DOT言語」というものがあります。
早速ですが、実際に手を動かしてみましょう。ちなみにDOT言語はGraphviz OnlineというWebツールがあるため別途に何かしらをインストールして環境構築する必要はありません。便利な世の中ですね。
上記のGraphviz Onlineを開くと、既に左側のDOT言語で記述された内容が、右側で作図されています。DOT言語はこのような図を作図するためのデータ記述言語です。
一旦、左側の記述をCtrl+Aで全選択をしDeleteなどで全削除し、下記の内容をコピペしてみましょう。
digraph graphname {
A -> B;
}
DOT言語の詳細な使い方は様々なWebサイトやブログ記事、Qiitaなどへ譲るとして、A - > Bの見た目から発想の転換をしてみると処理Aから処理Bという流れに見えませんか?
DOT言語は生成AIを利用する上で有利なテキストベースでありながらグラフを作成できるのがキモであり、例えばこのA -> BがA「Webページを開いたら」 → B「Hello, Worldと表示する」という風にできるのであれば処理のフローが可視化されており本当に素晴らしいことです。
ここでプログラミングの有識者は「DOT言語をUMLなどに見立てて処理を記述するのは良いが、プログラミング初心者は求めた結果を出力するロジックやアルゴリズムを発想する知見や経験値が圧倒的に足りていないのが問題ではないか?」と至極真っ当かつ反論の余地がない問題点の指摘をすると思いますが、そこで活きるのが生成AIです。
生成AIは初級者プログラマ個人のロジックやアルゴリズムの作成能力へ無関係にロジックやアルゴリズムを生成できる(可能性が少なくともある)ので、処理のフローをDOT言語で記述することにより処理フローから初級者プログラマが求めるプログラムを生成AIへ推論させ生成させるというのが狙いです。実際に試してみましょう。
digraph graphname {
A[
label = "Webページを表示する"
];
B[
label = "Webページを表示したらHello, worldとテキストを表示する"
];
A -> B;
}
プログラミングの有識者はこの時点で「なるほど、自然言語の記述をそのままDOT言語に入れ込んでしまうのか」と気付いたのではないかと思います。
このDOT言語をGoogle Gemini 2.5 Flashへ「下記のデータ記述言語のDOT言語で記述された処理フローをJavascript言語へ変換をしWebページ上へ「Hello,world」を表示したいので変換をお願いします。」と命令すると以下のコードが生成されました。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello World Page</title>
</head>
<body>
<div id="output"></div>
<script>
// Webページが表示されたら(DOMが完全に読み込まれたら)実行される
document.addEventListener('DOMContentLoaded', function() {
// "Webページを表示する" ステップは、このHTMLファイル自体が表示されることで達成されます。
// "Webページを表示したらHello, worldとテキストを表示する" ステップ
const outputDiv = document.getElementById('output');
outputDiv.textContent = 'Hello, world';
});
</script>
</body>
</html>
フローを記述する利点は、ロジックやアルゴリズムを発想する知見や経験値が足りなくとも、フローのステップが明確に分かれているので生成AIが処理を切り分けて推論してくれることであり、そしてプログラミング初心者自身がフローチャートを視覚で確認できるので「Aを処理したらBを処理する」と切り分けて考えやすいことです。
また、求めている結果ではなく誤った結果が生成されても、A - > B - > Cとフローを細分化していくことで生成AIの推論精度を高めていくことができるのも利点です。
より生成AIへ精度の高い推論をしてもらうために補足情報を付加するのも有用です。
digraph graphname {
A[
label = "Webページを表示する"
];
B[
label = "Webページを表示したらHello, worldとテキストを表示する",
comment = "Webページが完全に読み込まれるまで待機"
];
A -> B;
}
labelの記述内容もcommentの記述内容も生成AIが推論のための情報として利用するので誤った結果が生成されてもA - > B - > Cとフローを細分化しなくとも良い場合があります。
DOT言語を知るプログラミング有識者が「DOT言語の仕様を考えれば確かにそうだが、その発想はなかった」と言っていただけるであろうDOT言語コード例だとこういう記述方法もアリです。
digraph 増田コード {
最初の処理[
label = "Webページを表示する"
];
次の処理[
label = "Webページを表示したらHello, worldとテキストを表示する",
comment = "Webページが完全に読み込まれるまで待機"
];
最初の処理 -> 次の処理;
}
ノードの名称へ自然言語を採用することにより、例えばゲームプログラミング時に「キャラクターがジャンプする」という読んだそのままな処理のためのノード、というか一般的に言うオブジェクトを作成することが可能で、後は->で繋げて処理をさせられます。
ちなみに別のノードを作成する際に「"キャラクターがジャンプする"から継承する」の様なことをcommentなどへ記述しておくと生成AIが推論して継承します。なんならcommentなどへ「キャラクター画像にimage.gifを使用」などと記述しておくとファイルの読み込みもします。
更にDOT言語にはカスタム要素という仕様が存在しており、DOT言語の仕様で定められた予約語以外も使用が可能です。
digraph 増田コード {
最初の処理[
label = "Webページを表示する"
];
次の処理[
label = "Webページを表示したらHello, worldとテキストを表示する",
comment = "Webページが完全に読み込まれるまで待機",
font_style = "フォントを太字のボールド体、色を赤(#FF0000)とする"
];
最初の処理 -> 次の処理;
}
生成AIはカスタム要素の名称からも推論を発揮し、上記の場合であればフォントスタイルを指定していると推論をするので生成AIの推論精度を高める補足情報として機能します。
つまりこれはカスタム要素の名称として"Action"などの名称を採用すると"動作"として推論をし、"decision"ならば"条件分岐"ですし、"input"ならば"入力"ですし、"loop"ならば"繰り返し"ですし、"Type"ならば"種別"です。
より詳細に process[type="Action"] などのノードを作成してどんどん生成AIの推論精度を高めていくことが可能であり、そろそろ察してきているかと思いますが 処理[種別="動作"] と自然言語で記述しても機能します。
プログラミング有識者は更に「プログラム言語自体の予約語、例えばJavascriptを生成する事を前提にlengthを名称にすると配列を使おうとするのか?」と疑問に感じるでしょうがお察しの通りで生成AIは配列を使おうとするので、敢えて使いたいプログラム言語の機能や外部ライブラリなどがある場合は補足情報として機能する形で記述しておくと生成AIは推論へ利用します(まぁそこまで知識ある方なら該当のプログラム言語使ったほうが手っ取り早いと思いますが)。
以上をもって「生成AIを利用したプログラミング初級者向けの温故知新な提案」を終えたいと思います。
色々とツッコミどころには筆者自身が気付いていて。例えば「結局はDOT言語の仕様を覚えないといけないのでは?」とか「プログラミング初級者に任せると生成前のソースであるDOT言語コードがスパゲッティになりそうだよな」とか「面倒くせぇから普通にプログラミング覚えろや」とか理解してますし至極真っ当かつ反論の余地がないと思ってます。
今回の提案のプログラミング有識者向けの本質は「生成AIへ向いた中間言語の発掘」であり、「DOT言語ならそこそこ普及してるしプログラミング初級者でも扱えるんじゃね?」と業務中に発想したものを書き留め公開いたしました。