Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
BrainFuckをつくった
Search
uzimaru0000
June 01, 2020
Technology
0
520
BrainFuckをつくった
#uzimaru生誕LT会
uzimaru0000
June 01, 2020
Tweet
Share
More Decks by uzimaru0000
See All by uzimaru0000
OGPを使いたい
uzimaru0000
0
170
git入門
uzimaru0000
1
340
Webフロントエンド入門
uzimaru0000
1
450
WebフロントエンジニアはOSの夢を見る
uzimaru0000
0
360
Elmで作るCLI
uzimaru0000
0
140
Blogを作った話 -Zli x DeNA-
uzimaru0000
1
190
Compression Vue App
uzimaru0000
0
130
好きなライブラリ_OSS
uzimaru0000
0
230
Other Decks in Technology
See All in Technology
Railsの話をしよう
yahonda
0
150
生成AI時代のセキュアコーディングとDevSecOps
yuriemori
0
100
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.8k
「れきちず」のこれまでとこれから - 誰にでもわかりやすい歴史地図を目指して / FOSS4G 2025 Japan
hjmkth
1
310
能登半島災害現場エンジニアクロストーク 【JAWS FESTA 2025 in 金沢】
ditccsugii
0
840
プロポーザルのコツ ~ Kaigi on Rails 2025 初参加で3名の登壇を実現 ~
naro143
1
240
OAuthからOIDCへ ― 認可の仕組みが認証に拡張されるまで
yamatai1212
0
120
Claude Code Subagents 再入門 ~cc-sddの実装で学んだこと~
gotalab555
6
9.1k
2025-10-09_プロジェクトマネージャーAIチャンス
taukami
0
140
今この時代に技術とどう向き合うべきか
gree_tech
PRO
2
1.8k
ユーザーの声とAI検証で進める、プロダクトディスカバリー
sansantech
PRO
1
140
カンファレンスに託児サポートがあるということ / Having Childcare Support at Conferences
nobu09
1
580
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
Building Applications with DynamoDB
mza
96
6.7k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
Unsuck your backbone
ammeep
671
58k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
A Modern Web Designer's Workflow
chriscoyier
697
190k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Facilitating Awesome Meetings
lara
56
6.6k
Designing for humans not robots
tammielis
254
26k
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Transcript
BrainFuckをつくった うじまる
はじめに
たくさん集まってくれて ありがとうございます
自己紹介 - ひよこ - 趣味 - 料理 - プログラミング -
えっちいいね - 言語 - TS - Elm
誕生日なのでBrainFuckを作りました
BrainFuckを作った 誕生日なのでは冗談 1. uzimaru.comのリニューアルに elm/parser を使いたい 2. 練習でbrainfuckのparserを作って見よう 3.
BrainFuckってなに? 難解プログラミング言語のひとつ + - > < , . [ ]
の8つの記号だけを使ってプログラミングをする言語 チューリング完全なので実質なんでも作れる[要出典] 記号部分を任意のトークンに変えるだけで自作言語()が作れる 例 : https://github.com/masarakki/nyaruko_lang
elm/parserって? elmの公式が出してるパーサーライブラリ elm的には正規表現よりこっちを使ってほしいらしい らしい
やったこと 1. 文字列(コード)を受け取る 2. 作ったParserでelmのデータ構造に落とす 3. 作られたデータ構造を使って状態を計算 4. 表示 これだけ!!
やったこと 1. 文字列(コード)を受け取る 2. 作ったParserでelmのデータ構造に落とす 3. 作られたデータ構造を使って状態を計算 4. 表示 今回はこの2つをメインに話します
(っと言っても時間がないので凄い端折ります)
Parserでelmのデータ構造にする
命令を型にする - > 右にシフト - < 左にシフト - + 加算
- - 減算 - , 入力 - . 出力 - [ ループの開始 - ] ループの終わり
命令を型にする - > 右にシフト - < 左にシフト - + 加算
- - 減算 - , 入力 - . 出力 - [ ループの開始 - ] ループの終わり
命令を型にする あとはひたすら Parserを書いていく
命令を型にする `Parser.oneOf` はリストの上からParseし ていく 一つ一つのParserはかなりシンプル
データ構造を使って状態を計算
データ構造を使って状態を計算 Parseすると `List BCmd` が返ってくる そいつを使って状態を計算する だけ!! Parserの型
データ構造を使って状態を計算 状態を右のような型で持っておく - prt 今のポインタ - cmds 残ってる命令列 - memory
状態を持っておくメモリ - input 入力値 - output 出力値
データ構造を使って状態を計算 命令一つ一つに対応する処理を書けば 終わり!! 計算は失敗する可能性があるので(ポインタ 値が負の数になったり)`Result` 型になって いる
DEMO
まとめ - elm/parserがめちゃくちゃ便利だった - ちょっと癖がある(backtrackableとか(よく分かってない))けど使いやすい - https://uzimaru.dev/elm-brainfuxk で遊べるので遊んでね - https://github.com/uzimaru0000/elm-brainfuxk
にコードがあるので興味がある人 は見てみてね
ありがとうございました!!