Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
ありがとうございました。