Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
君は古の言語M4を知っているか (LT)
MakKi
May 18, 2022
Programming
0
81
君は古の言語M4を知っているか (LT)
M4のチューリング完全性について、BrainF*ckを実装することで証明した
MakKi
May 18, 2022
Tweet
Share
More Decks by MakKi
See All by MakKi
型パラメータが使えるようになったのでLINQを実装してみた
makki_d
2
750
mallocしただけでメモリが確保できるって本当ですか?
makki_d
0
68
ホットリロードツールの作り方
makki_d
0
520
JavaプログラムをGoに移植するためのテクニック――継承と例外
makki_d
1
1.2k
JavaプログラムをGoに移植するためのテクニック――継承と例外
makki_d
4
3.1k
mallocしただけでメモリが確保できるって本当ですか?
makki_d
4
520
パッケージ外から非公開フィールドを変更する方法.pdf
makki_d
0
210
とあるライブラリをGoに移植した結果……
makki_d
1
3.8k
バーコードリーダーになろう!
makki_d
0
82
Other Decks in Programming
See All in Programming
Hasura の Relationship と権限管理
karszawa
0
180
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
42k
TSX First な Zero-Runtime SSG potato4d/dodai とその仕組み / owned static site generator #kyotojs
potato4d
0
350
OSC大阪 パスワード認証は人類には早すぎる ~ IDaaSを使ったソーシャルログインのすすめ ~
authyasan
7
1.5k
和暦を正しく扱うための暦の話
nagise
10
6.5k
ITエンジニア特化型Q&Aサイトteratailを 言語、DB、クラウドなど フルリプレイスした話
leveragestech
0
420
(新米)エンジニアリングマネージャーのしごと #RSGT2023
murabayashi
9
5.8k
domain層のモジュール化 / MoT TechTalk #15
mot_techtalk
0
120
Azure Functionsをサクッと開発、サクッとデプロイ/vscodeconf2023-baba
nina01
1
350
[2023년 1월 세미나] 데이터 분석가 되면 어떤 일을 하나요?
datarian
0
610
Spring BootとKubernetesで実現する今どきのDevOps入門
xblood
0
390
Refactor with using `available` and `deprecated`
417_72ki
3
380
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
407
21k
Automating Front-end Workflow
addyosmani
1351
200k
Creatively Recalculating Your Daily Design Routine
revolveconf
207
11k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
29
7.9k
Mobile First: as difficult as doing things right
swwweet
213
7.8k
Designing on Purpose - Digital PM Summit 2013
jponch
108
5.9k
jQuery: Nuts, Bolts and Bling
dougneiner
57
6.6k
Art Directing for the Web. Five minutes with CSS Template Areas
malarkey
196
9.9k
Optimizing for Happiness
mojombo
365
64k
How to Ace a Technical Interview
jacobian
270
21k
Happy Clients
brianwarren
90
5.8k
GraphQLの誤解/rethinking-graphql
sonatard
39
7.8k
Transcript
君は古の言語 M4を知っているか KLab株式会社 牧内大輔
自己紹介 • 牧内大輔(MakKi) • Twitter: @makki_d • GitHub: makiuchi-d •
学生の頃 ◦ 専攻は発生生物学 ◦ 動画関連のOSS(AviUtlの透過性ロゴとかいろいろ) • 入社してから ◦ ガラケー向けブラウザゲーム→スマホゲーム
最近の仕事 オンライン対戦データ中継システム • クライアント: 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) 部屋検索・参加
M4 is 何?
M4 is 何? “ m4 は、ブライアン・カーニハンとデニス・リッチーが設計した汎用マク ロプロセッサである。その名称は、"macro" の "m" と、AP-3ミニコ
ンピュータでデニス・リッチーがそれ以前に書いたマクロプロセッサ "m3" の次、というところから来ている。 出展:wikipedia http://ja.wikipedia.org/wiki/M4_(プログラミング言語)
マクロプロセッサ?
マクロプロセッサ define(`H’, `Hello, $1!!’) こんなマクロを定義して
マクロプロセッサ define(`H’, `Hello, $1!!’) H(traP) こんなふうに呼び出すと
マクロプロセッサ define(`H’, `Hello, $1!!’) H(traP) Hello, traP!! これが出力される
マクロプロセッサ define(`H’, `Hello, $1!!’) H(traP) Hello, traP!! これが出力される 定型文を生成するのに便利
M4 is 何? “ ……それ以前のマクロプロセッサとは異なり、特定のコンピュータ言語 や自然言語を対象としたものではない。ただし、もとはFORTRANの方言 であるRatforの開発で使うために開発された。 他のマクロプロセッサとは異なり、m4 は一般的なプログラミング言語と 同様、チューリング完全である。
出展:wikipedia http://ja.wikipedia.org/wiki/M4_(プログラミング言語)
チューリング完全?
チューリング完全 “ 計算理論において、ある計算のメカニズムが万能チューリングマシンと 同じ計算能力をもつとき、その計算モデルはチューリング完全(チューリ ングかんぜん、Turing-complete)あるいは計算完備であるという。 (中略) 簡単に言えば、チューリング完全であれば、実現可能なアルゴリズムや 手続きはすべて処理できるということを意味している。 出展:wikipedia http://ja.wikipedia.org/wiki/チューリング完全
つまり コンピュータで動かせるアルゴリズムは 全てM4でも記述できる
つまり コンピュータで動かせるアルゴリズムは 全てM4でも記述できる M4は万能
確かめてみよう
確かめてみよう チューリング完全性の証明 • チューリング完全な処理系を実装できればOK
確かめてみよう チューリング完全性の証明 • チューリング完全な処理系を実装できればOK チューリング完全な処理系 Brainfuck
Brainfuckとは +++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.++++++ +..+++.>-.------------.<++++++++.--------.+++.------.- -------.>+. Hello, world!
M4で実装してみた
bfm4 https://github.com/makiuchi-d/bfm4 KLab TechBook Vol.1 でも解説(PDFダウンロードできます) https://www.klab.com/jp/blog/tech/2022/tbf12.html
デモ
結論 M4はチューリング完全である. Q.E.D.
ありがとうございました。