ChatGPTにプログラミング言語の解釈系になってもらった

ChatGPTの一つの可能性として色々試してみた結果をセルフまとめしてみました(一部、他の人のツイートもあります)。
15
kmizu @kmizu

さすがに色々試した感じ、既存のREPLに投げてる可能性は減ってきた気がするし(Scala処理系の挙動の違い辺り考えると)。ただ、同時に「そんなアホな……」という気持ちもある。時々微妙に間違いが入るけど実行結果の説明が「要約」というより「まんま」な辺りがなんかそれぽいというか。

2022-12-02 23:18:47
kmizu @kmizu

ChatGPTはどうやらC++のテンプレートメタプログラミングも「理解」してるぽい(コードは qiita.com/pink_bangbi/it… のコンパイル時FizzBuzzを拝借しました)。 pic.twitter.com/SYDYHwXXC3

2022-12-02 23:30:06
拡大
kmizu @kmizu

ちなみにコンパイル時FizzBuzzが説明できているということは……どのくらい頭が良いかはわかるんじゃないかと思います。

2022-12-02 23:32:30
Hotaka KATSUMA @amuseumjp

FizzBuzzといえばCodeGolf的な圧縮実装はどこまで解釈してくれるんだろうか…… qiita.com/ymg_aq/items/b… twitter.com/kmizu/status/1…

2022-12-03 00:36:33
kmizu @kmizu

別の例で試してくださった方がいたのでちょい(暫定)結論を修正。 ・ChatGPTは「本当にそのまま」プログラミング言語を理解しているわけではない  ・ScalaでIntを返す関数のはずがオーバーフローしないとか  ・Haskellの型チェック結果で説明にちょい嘘が今丹生してることもあった ↓

2022-12-03 00:37:35
kmizu @kmizu

ただし ・プログラミング言語理解の精度はずば抜けて高い ぽいです。C++のテンプレートメタプログラミングの説明ができたりなんかが典型ですね。人間インタプリタが出来るのと似た要領で実行結果らしきものも出力ができちゃうのかなと感じてます(ただし、100%の理解ではないのでたまにミスる)。 ↓

2022-12-03 00:37:36
kmizu @kmizu

(かなり)理解してる(ぽい)言語の種類は割と多くて、Java / C / C++ / Elixir / Scala / Haskell 辺りは結構理解精度高い感じがします。理解精度が低めの言語がどのくらいあるのかはわからんです。プログラミング言語解釈でChatGPTさん虐めてみると面白いと思うので言語スキーはどうぞ。

2022-12-03 00:37:37
kmizu @kmizu

@amuseumjp その辺は不明ですが、実際にCodeGolfやってみた結果を投げてみるとわかるのかなという気がします(今、アクセス殺到してるようですが)。

2022-12-03 00:38:24
sou7 @sou7___

Coqのコードとか書かせてみるとあまり動くのが出てこない・・・ タクティックの構文が既存のものから離れてるのと、コード上に本質的な処理の流れが浮かびづらいからかな・・・? twitter.com/kmizu/status/1…

2022-12-03 00:50:14
kmizu @kmizu

@tadsan @fate_fox ChatGPT、最初そう思ってましたが(そして、自然言語理解はまだまだとは思うものの)少なくともプログラミング言語理解の精度は高めでした。 twitter.com/kmizu/status/1… で色々試したのですが、学習結果に妙なものがまじりにくい類のものだったら有用そうな感じです。

2022-12-03 00:50:29
kmizu @kmizu

Scala 2 / 3も自動判別してる……。一番最後の例はScala 3だとエラーになるやつです。 pic.twitter.com/ZcGXEuTIGA

2022-12-02 22:19:35
kmizu @kmizu

@sou7___ Coqはイマイチでしたか……。形式言語の中では理解が難しいものだというのと、学習データが少なめなのもあるのかもしれませんね。

2022-12-03 00:52:15
えび @Jspinylobster

もしChatGPTの中にニューラルネットワークで表現されたプログラミング言語のインタプリタが存在するんだとしたら、 それをリバースエンジニアリングすることで人間の脳内インタプリタについて理解を深められるかも twitter.com/kmizu/status/1…

2022-12-03 01:19:09
kmizu @kmizu

プログラミング言語の理解度が高いということは、別言語への変換(トランスレータ)も精度高いのではと思ってやってみたら案の定だった。 pic.twitter.com/tbOqDXB5sz

2022-12-03 02:47:14
拡大
kmizu @kmizu

正確には、モナドを使って「破壊的に値を更新したようにみせかける」だけど、ともかくなかなかいい感じ。 pic.twitter.com/8hTNXc43Ga

2022-12-03 03:10:21
拡大
拡大
kmizu @kmizu

コードゴルフぽいこともできます(これはコードゴルフなのかは怪しい)。で、惜しいことに最後のやつだと演算子の優先順位の問題で2 3 4じゃなくて2 21 31になっちゃう。 でも面白ー。 pic.twitter.com/VSXEPZQAaQ

2022-12-03 03:36:57
拡大
拡大
拡大
kmizu @kmizu

ChatGPT、実はプログラミング言語好きが遊ぶには最高のツールでは(下手したら自然言語メインにするより面白い結果出してくれる)。

2022-12-03 03:44:31
kmizu @kmizu

Scalaに引数の型推論を追加したようなパチもんのプログラミング言語Scalay(仮)ができてしまった(ChatGPTと対話してる間だけの短い命)。 一応、add: (Int, Int) => Int が推論されてるのすばらですね。 pic.twitter.com/ye1g4qdkH2

2022-12-03 03:51:28
拡大
拡大
kmizu @kmizu

パチもん型推論が実装できると思わなかったので笑い転げている。途中からScalayが本当にあるものとして、なんかHaskellぽくうまいこと型推論してくれたっぽい。

2022-12-03 03:53:19
にし @ryu_cidr

コードの生成だけじゃなくてこんな言語仕様に踏み込んだ説明まで出してくれるの、、、すごい twitter.com/kmizu/status/1…

2022-12-03 03:54:20
kmizu @kmizu

そして、パチもんだったはずなのにChatGPTさんは何故かScalay言語が実在するかのように振る舞いだしてますね。 mapの型とか多相型なのになんか推論してくれちゃっってますね(Scalaの型システムを考えるとこの型推論ぽいもの何やってるの?健全性とか大丈夫なの?とか言ってはいけない)。 pic.twitter.com/DHhPon3aOO

2022-12-03 03:57:03
拡大
きしだൠ(K1S) @kis

@kmizu ユーザーをまたがったりしないのね。 pic.twitter.com/KNBfKn0cPa

2022-12-03 04:02:18
拡大
kmizu @kmizu

ということで、Rubykell言語もでっちあげてみた。こっちは新言語と認知してくれなかったぽい返答だけど、一応あえて型推論するならこんな感じ?てのが返ってきました。 pic.twitter.com/firFRPuE2B

2022-12-03 04:04:25
拡大
拡大
拡大
kmizu @kmizu

@kis そうですね。またがったらカオスになりそうです。

2022-12-03 04:04:37
kmizu @kmizu

Javaから引数の型指定を省いた新言語のパチもんとかも実はできるかな?できそうな気もする。

2022-12-03 04:09:14
きしだൠ(K1S) @kis

@kmizu たしかに。変な学習させる人も多そう

2022-12-03 04:15:26