Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
cybozu-labs-youth-10th
Search
Drumato
March 30, 2021
Programming
1.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
cybozu-labs-youth-10th
第10期ラボユース成果発表会での発表資料.
https://labs.cybozu.co.jp/en/
Drumato
March 30, 2021
More Decks by Drumato
See All by Drumato
Composable Platform Shift ~AWS全面移設におけるプラットフォームエンジニアリングの実践~
drumato
0
140
仕様と実装で学ぶOpenTelemetry
drumato
2
3k
Activities about Kubernetes operation improvements as an SRE
drumato
3
740
DEMO Apps recently implemented
drumato
0
130
Writing an experimental eBPF disassembler
drumato
0
410
An incremental approach to implement an admission controller
drumato
0
290
Components of Kubernetes Cluster
drumato
0
410
Other Decks in Programming
See All in Programming
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
1.7k
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
5.8k
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
280
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
190
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
160
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
280
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
700
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
660
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
150
AIとGame Jamで、ゲームを完成させた話
takahirosaeki
0
120
高専キャリア LT 発表内容
crysta1221
6
5.6k
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
240
Featured
See All Featured
Designing for Timeless Needs
cassininazir
1
470
Why Our Code Smells
bkeepers
PRO
340
58k
Designing for Performance
lara
611
70k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Mobile First: as difficult as doing things right
swwweet
225
10k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
660
sira's awesome portfolio website redesign presentation
elsirapls
0
410
For a Future-Friendly Web
brad_frost
183
10k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
980
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Transcript
x64/aarch64コンパイラを含む ミニツールチェーン+αの開発 第10期ラボユース成果発表会 言語処理系ゼミ 菅原大和/Drumato
一年間まとめ • x86_64/AArch64コードの生成ができるコンパイラを設計/実装した ◦ 生成コードの効率は悪いが,Typed ASTという中間表現を用いてシンプル • x86_64用のELFを生成するミニツールチェーンを実装した ◦ 上記コンパイラ+アセンブラ/リンカが協調動作する
• 高い抽象度を持たせたRust用ELFライブラリを開発した • 上記ライブラリでTUI版readelfを実装した • 既存のリンカスクリプトの欠点を考察し,一つのアイデアを提案した ◦ 後ほど解説
目次 • デモ • 一年間で達成できた目標/できなかった目標 • Linker Script Generatorについて •
これからの目標
DEMO1: ツールチェーンの動作 (6/9時点の画像)
None
DEMO2:TUI版readelfでの解析
None
一年間で達成できた目標#実装物 • peachili … 自作言語とそれをサポートするコンパイラ ◦ アセンブラとリンカをシンプルにするため,Bundlerが動いて依存関係を解決しグラフを構築 ◦ 複数のファイルで構成されたPeachiliコードから,最終的に単一のアセンブリファイルを生成 •
asmpeach … x86_64のアセンブラ ◦ 構成としては,アセンブリファイルのパーサ/命令の変換/オブジェクトファイルの生成 • pld … x86_64のstatic linker • elf-utilities … RustでELFをスマートに使えるライブラリ ◦ できるだけスマートに使えるように多くを抽象化している ▪ ex. セクション追加時にユーザがehdr.e_shnumをインクリメントしなくていい等 • elfpeach … TUIで操作できるreadelf ◦ これも最低限の機能しか持っておらず,実質プロトタイプ • py-linkage … Linker Script Generator(ただしプロトタイプ) ◦ これについては後述
一年間で達成できなかった目標 • コンパイラのアーキテクチャは結局初歩的なものだった ◦ スタックマシン実装であり,生成コードの効率は非常に悪い ◦ SecHack365参加時はなんちゃってレジスタマシン実装だったが,よっぽど速い ◦ 最適化パスは実装できなかった •
作りたかった言語機能のいくつかを保留にした ◦ Arena Allocatorのような標準ライブラリ ◦ RustのEnumやZigのtagged unionのような機能 ◦ Goのような言語組み込みのテストフレームワーク
活動2ヶ月後に とりあえず "最小の自作ツールチェーン"は 達成した
まだまだ開発することは沢山ある (動的リンカ/言語拡張/LTO/etc)
ところで,他になにか "新しいこと"はできないか?
アイデア: Linker Script Generatorについて
Linker Script Generator#background • 既存のリンカはconfiguration interfaceにリンカスクリプトを用意 • リンカスクリプトは重要かつ便利だが,学習コストが高い ◦ 特に日本語のドキュメントは少なく,理解しづらい
• section size/location pointerの計算など,ある程度表現力を持つ ◦ yamlなどの(学習コストが低くて)読みやすい形式では代替できない ◦ "スクリプト"の機能がなければならない
Pythonライブラリを動かして configを"生成"できないか?
Linker Script Generator#proposal in Python • 新たに文法を覚える必要はない ◦ 普通のPythonライブラリを使ったコーディング •
Pythonの計算を経由して,最終的に数値がハードコードされたyamlを生成 ◦ 出力フォーマットを指定でき,リンカスクリプトのフォーマットも吐ける ▪ 既存リンカ/自作リンカのどちらでも役立つ • 別にPythonじゃなくても,"スクリプト"レベルのフットワークで書ければ良い
Linker Script Generator#proposal in Python • 現状はほぼプロトタイプであり,机上の空論 • 鋭意実装中 ◦
elf-parserとfile-translator, リンカスクリプトの仕様に即した計算機能
None
成果発表後の目標
これからの目標(一部) • elf-utilitiesはRustで一番使われるELFライブラリを目指したい • elfpeachにも高級な機能を用意したい ◦ e.g. シンボルテーブルのフィルタリング機能 • 最適化コンパイラの理論と実装
◦ まずはx64のバックエンドだけを変更する • py-linkageはGNU ldのデフォルトスクリプトを置き換えられるぐらいの規模 がほしい
最後に • メンターの方々には多くの助言を頂きました ◦ 特に川合さんにはラボユース活動自体の紹介もしていただきました • ユース生/研究生の皆さんの活動が励みになりました ◦ xxさんも頑張ってるし,私も頑張ろう ここで改めてお礼させていただきます
一年間(以上)ありがとうございました!