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
Echo_itself_by__.pdf
Search
ライガー
March 30, 2024
Programming
64
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Echo_itself_by__.pdf
ライガー
March 30, 2024
More Decks by ライガー
See All by ライガー
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
490
Programming Viewing with Reserved Keywords
raiga0310
0
120
愛知県なんもないよね~www
raiga0310
0
58
クソコード鑑賞会
raiga0310
0
180
make HTTP server with Axum, Rust
raiga0310
0
150
Other Decks in Programming
See All in Programming
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
240
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
250
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
230
AIを紡ぐPMのお話
swdtkuy
0
120
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
530
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
230
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
6
2k
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
600
リアルな遅延を測る仕様
kota_yata
1
120
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
710
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
520
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
120
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
270
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
290
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
220
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.4k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
170
How to Ace a Technical Interview
jacobian
281
24k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
660
Darren the Foodie - Storyboard
khoart
PRO
3
3.7k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
370
Writing Fast Ruby
sferik
630
63k
Transcript
Echo itself by 🦀 Genkai LT #5 Generated by DALL-E3
Prompt: "自己言及するカニ"
Introduce raiga0310/AHOXA/ライガー Backend Rust/TypeScript/PHP https://profile.a6x.dev ***twitter***: @ahoxa1rx
Quineって知ってる?
Quine クワイン 自身のソースコードと同じ文字列を出力するコード 任意のプログラミング言語 [注]で実装できる 注:任意の計算可能な文字列を出力できるプログラミング言語にはクワインが存在する、別に チューリング完全である必要はない
Quineの例(C)
ナイーブな実装
長い
もう少し簡単な例
None
ナイーブなQuineのポイント このコードは「このコードは「 ...」を出力する」を出力する ↑のような再帰的な出力を考える …が無限に増えないように考える さっきの例だとプリプロセッサとマクロ展開を利用した実装 「出力部の前後」をどう出力するかとかが結構重要
きれいな(?)Quine
Haskell
Scheme & Common Lisp
HQ9+
ほんへ(Rust)
実装パターン • ナイーブな実装 ◦ フォーマットの出力形式を利用する • ズル(?) ◦ Built-inマクロを使います •
macro_rules!でオレオレマクロ ◦ 魔術 • Bling-Bang-Bang-Born • 他にもあるかもしれないけど自分で作って :heart:
ナイーブ実装
徐々に実装していく まず普通に出力してみる
このコードを入れてみる
このままだと再帰地獄なので、前後半に分ける
Rustのフォーマット記法 デバッグ記法を活用する format!系列(文字列に展開する系)の記法 https://doc.rust-lang.org/std/fmt/index.html#syntax
None
None
Rustのフォーマット記法 基本的には「{}」を使って順序で展開する 「{:?}」や「{:#?}」を使うとDebugトレイトの実装にしたがって展開される 「:」の前後で展開する際のオプションをつけれる 前に「数値」または「識別子」を入れるとそれを参照する
例
さっきの書きかけの実装をもう一度見てみる
この実装で足りない部分 愚直実装なのでこのままだと無限引数が生える • 『引数の数を減らす』『Quineの要件を満たす』両方やる →さっきのパラメータ参照するフォーマット記法を使う (+エスケープ記法もつかうのでデバッグ形式を使う )
実装(formatかかったのはゆるして)
ズル(?)な実装
include_str!()がズル ファイルの内容自体を取得できる Quineのためにあると行っても過言ではない (は?)
macro_rules!を使う
macro_rules! 文法拡張記法 = 黒魔術 ルールにマッチするパターンを別の値・式に変換する
縁の下の力持ちなのだが...... Actix-webのルーティング記法、Serenityのコマンド、#[tokio::main]などなど 標準出力のprint!()系の可変長引数を受容できる仕組みもマクロによるもの 実装によっては危惧されるべき動作を起こしやすい 気をつけて実装しようね(臆病すぎるのもあれだけど )
あとはナイーブな実装とほぼ同じ 注意するポイント format!系マクロでの{}のエスケープは2重にすること「{{」「}}」とか(1敗) 出力したあとに使えるようにするにはエスケープを残したいので {:?}をつかおうね(2敗)
まずコード自体を素直に入れてみる
オレ自身がフォーマッタになることだ
おまけ:Bling-Bang-Bang-Born
pelmers/quine参照
なにこれ 後半のコードの文字をすべて ASCIIで配列表現したものをcharにキャストして出力する力技
AAもあるよ なに食べたらひらめくの? https://rosettacode.org/wiki/Quine#Rust
Thx for listening ;)
おまけ https://x.com/mathlava/status/1762633882443411920?s=20