Slide 1

Slide 1 text

君は古の言語 M4を知っているか KLab株式会社 牧内大輔

Slide 2

Slide 2 text

自己紹介 ● 牧内大輔(MakKi) ● Twitter: @makki_d ● GitHub: makiuchi-d ● 学生の頃 ○ 専攻は発生生物学 ○ 動画関連のOSS(AviUtlの透過性ロゴとかいろいろ) ● 入社してから ○ ガラケー向けブラウザゲーム→スマホゲーム

Slide 3

Slide 3 text

最近の仕事 オンライン対戦データ中継システム ● クライアント: C# (Unity/.Net) ● サーバ: Go+MySQL(Aurora) ● 通信: WebSocket、gRPC ● 開発環境: docker-compose game (go) lobby (go) hub (go) MySQL 端末 部屋検索 gRPC 部屋作成・参加 部屋情報書き込み websocket 観戦clientとして接続 websocket clientとして接続 (Player or 観戦) HTTP(msgpack) 部屋検索・参加

Slide 4

Slide 4 text

M4 is 何?

Slide 5

Slide 5 text

M4 is 何? “ m4 は、ブライアン・カーニハンとデニス・リッチーが設計した汎用マク ロプロセッサである。その名称は、"macro" の "m" と、AP-3ミニコ ンピュータでデニス・リッチーがそれ以前に書いたマクロプロセッサ "m3" の次、というところから来ている。 出展:wikipedia http://ja.wikipedia.org/wiki/M4_(プログラミング言語)

Slide 6

Slide 6 text

マクロプロセッサ?

Slide 7

Slide 7 text

マクロプロセッサ define(`H’, `Hello, $1!!’) こんなマクロを定義して

Slide 8

Slide 8 text

マクロプロセッサ define(`H’, `Hello, $1!!’) H(traP) こんなふうに呼び出すと

Slide 9

Slide 9 text

マクロプロセッサ define(`H’, `Hello, $1!!’) H(traP) Hello, traP!! これが出力される

Slide 10

Slide 10 text

マクロプロセッサ define(`H’, `Hello, $1!!’) H(traP) Hello, traP!! これが出力される 定型文を生成するのに便利

Slide 11

Slide 11 text

M4 is 何? “ ……それ以前のマクロプロセッサとは異なり、特定のコンピュータ言語 や自然言語を対象としたものではない。ただし、もとはFORTRANの方言 であるRatforの開発で使うために開発された。 他のマクロプロセッサとは異なり、m4 は一般的なプログラミング言語と 同様、チューリング完全である。 出展:wikipedia http://ja.wikipedia.org/wiki/M4_(プログラミング言語)

Slide 12

Slide 12 text

チューリング完全?

Slide 13

Slide 13 text

チューリング完全 “ 計算理論において、ある計算のメカニズムが万能チューリングマシンと 同じ計算能力をもつとき、その計算モデルはチューリング完全(チューリ ングかんぜん、Turing-complete)あるいは計算完備であるという。 (中略) 簡単に言えば、チューリング完全であれば、実現可能なアルゴリズムや 手続きはすべて処理できるということを意味している。 出展:wikipedia http://ja.wikipedia.org/wiki/チューリング完全

Slide 14

Slide 14 text

つまり コンピュータで動かせるアルゴリズムは 全てM4でも記述できる

Slide 15

Slide 15 text

つまり コンピュータで動かせるアルゴリズムは 全てM4でも記述できる M4は万能

Slide 16

Slide 16 text

確かめてみよう

Slide 17

Slide 17 text

確かめてみよう チューリング完全性の証明 ● チューリング完全な処理系を実装できればOK

Slide 18

Slide 18 text

確かめてみよう チューリング完全性の証明 ● チューリング完全な処理系を実装できればOK チューリング完全な処理系 Brainfuck

Slide 19

Slide 19 text

Brainfuckとは +++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.++++++ +..+++.>-.------------.<++++++++.--------.+++.------.- -------.>+. Hello, world!

Slide 20

Slide 20 text

M4で実装してみた

Slide 21

Slide 21 text

bfm4 https://github.com/makiuchi-d/bfm4 KLab TechBook Vol.1 でも解説(PDFダウンロードできます) https://www.klab.com/jp/blog/tech/2022/tbf12.html

Slide 22

Slide 22 text

デモ

Slide 23

Slide 23 text

結論 M4はチューリング完全である. Q.E.D.

Slide 24

Slide 24 text

ありがとうございました。