久し振りの更新です。巷では先日リリースされたばかりのGPT-4oの話題でもちきりですが、私も当日深夜2時のライブストリーミングを見てその後すぐにGPT-4oを試しています。性能に関する雑感としては
- 全般的にはGPT-4-Turboより頭が良い
- Claude 3 Opusと比較すると、お堅い & 無難な回答を返す傾向あり
- ただし、Opusよりハルシネーションは起きにくい印象
- 画像認識の性能が凄い
辺りでしょうか。特に最後の点は特筆すべきことで、GPT-4-Turboの画像認識よりだいぶ性能が向上したおかげで今までだとやりにくかったことも簡単にできるようになっています。その際たるものが先日バズった
GPT-4oの画像認識力と理解力をもってすればいけるやろと思ってやってみたら実際いけた。
— kmizu (@kmizu) 2024年5月14日
ペーパープロトタイピングから最初のHTML書き起こすのにかなり使えるのでは。
つーか指示そのものを画像の中に書いたの読み取ってくれるの何か世界の壁を超えて対話してる感があって凄い#GPT4o pic.twitter.com/3XHMFg3yye
でしょうか。とはいえ、今回の本題は画像認識機能でなくタイトルの通り、プログラミング言語開発にGPT-4o(の画像認識部分でない部分)を役立てるというものです。
ちょくちょく停滞気味なのが玉に瑕ですが、私は現在日本語プログラミング言語「ぬこ」を開発しています。
特徴としては
- ある程度日本語ぽく書ける
もし(...) x でなければ y
など
- Hindley-Milner型推論
- 関数型プログラミング言語
- 不変データ構造、高階関数のサポート
などが挙げられます。さて、プログラミング教育をやるようになってここ数年、漠然と考えていたことがありました。それは抽象構文木の概念をどうやって初心者に教えるかということです。実際、Scratchは抽象構文木を割と素直に視覚化したプログラミング言語および開発環境ともいえ、知られているようにプログラミング教育で大きな成果を収めています。
しかし、一方でScratchである程度「プログラム」が書けるようになっても、そこから先のテキストベース言語に移行する際に大きなギャップがあり、ここでつまづく人も少なくありません。
そんなこんなで色々考えを巡らせていましたが、今夜、ふと「プログラミング言語内でvisualize(1 + 2)のようにしたら、グラフィカルな形でASTを表示してくれればいいんでは」という(誰でも思いつきそうな)着想が浮かびました。実際、Nimではdumptreeという機能があるそうです。
ただ、調べてみた限り、dumptreeはアスキーアート風味に木構造を表示する代物のようで、惜しいけど求めてるものとはちょっと違うという感じでした。
ともあれ自作のプログラミング言語なら自分で作りこむしかないのですが、最初思い浮かんだのはJavaで書かれた木構造(かグラフ構造)描画ライブラリを使うことでした。しかし、調べてみると木構造の方は実用に耐えるものがあまりなさそうでしたし、グラフ構造描画ライブラリを使って木構造を描画するのは多少手間がかかります。
なんとかいいアイデアがないものかと考えていたのですが、ふと「JTreeを使って、素直にNukoの抽象構文木をビジュアライズすればいいんじゃね?」と思い至りました。というわけでChatGPTの出番です。
こんな感じのリクエストを出したら、見事にASTを受け取ってSwingのJTreeとして表示するライブラリができました。それを早速Nuko言語に組み込んでみた結果が以下です。
可視化した結果はまだ粗削りですが、これは手で修正してもよし、さらにChatGPTに依頼してリッチな見た目にしてもらうことも容易でしょう。
驚くべきは、最初にアイデアを思いついてから、ChatGPTに質問して実際に組み込むまでわずか1時間で完了したことです。少なくとも以前の私だったらここまで素早く思いついたアイデアを自作の言語に組み込むことはできなかったでしょう。ChatGPT様!といった感じです。
ChatGPT (GPT-4o) でなくても、Claude 3 OpusやGemini 1.5Pro、GPT-4-Turboでもできそうなことではあるのですが、以前に比べて一発でほぼ動くコードが出る確率が高くなったように感じます。
そんなこんなで、ChatGPTにコード生成させると便利な例の紹介でした。