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
RustでShell作ろう
Search
tera
December 17, 2016
Programming
960
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RustでShell作ろう
平成28年12月17日(土): 第二回 帰ってきたhojiroLT にて話しました
tera
December 17, 2016
More Decks by tera
See All by tera
ピッてやるとシュッてなるやつを作った話
tera
0
270
Pythonを読む
tera
0
230
importを理解したかった
tera
0
670
HTTPをしゃべろう~Firefoxになるために~
tera
0
260
Other Decks in Programming
See All in Programming
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
380
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
500
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
270
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
460
AHC070解法紹介
eijirou
0
130
JRuby: Past, Present, and Future
headius
0
190
iOSDC2026登壇資料.pdf
riofujimon
0
180
Are APIs Still Relevant in the AI Era?
soyuka
0
300
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
200
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
110
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
350
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
390
Featured
See All Featured
Side Projects
sachag
456
43k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
480
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Paper Plane
katiecoart
PRO
4
53k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.8k
30 Presentation Tips
portentint
PRO
1
400
The Mindset for Success: Future Career Progression
greggifford
PRO
0
510
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
580
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Transcript
RustでShell作ろう
自己紹介 • 正弦波・レポート手書き学科16生 • S E C C O N
0 点 • Twitter:@tera_3939
Shellとは
Shellとは • シェル (shell) はオペレーティングシステム (OS) のユーザーのた めにインタフェースを提供するソフトウェアであり、カーネルの サービスへのアクセスを提供する。それだけではなく、この用語 は非常にゆるやかに応用され、特定のコンポーネントの周辺に構
築された任意のソフトウェアを含むこともある。例えば、ウェブ ブラウザや電子メールクライアントはHTMLレンダリングエンジ ンの「シェル」といわれることがある。OSの内部(カーネル) とユーザーの間にある外殻であることから、このように呼ばれる。 - 引用:https://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%AB
Shellとは • シェル (shell) はオペレーティングシステム (OS) のユーザーのた めにインタフェースを提供するソフトウェアであり、カーネルの サービスへのアクセスを提供する。それだけではなく、この用語 は非常にゆるやかに応用され、特定のコンポーネントの周辺に構
築された任意のソフトウェアを含むこともある。例えば、ウェブ ブラウザや電子メールクライアントはHTMLレンダリングエンジ ンの「シェル」といわれることがある。OSの内部(カーネル) とユーザーの間にある外殻であることから、このように呼ばれる。 - 引用:https://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%AB
例えば • cmd.exe • PowerShell • bash • fish •
MATE • Unity(Unityではない)
Rustとは
Rustとは • MozillaがC++の代替のために開発したプログラミング言語 • メモリ安全 • 並列 • はやい •
コンパイラがあたまいい
今回やったこと • “Tutorial – Write a Shell in C”のlshをRustで書いてみようとした •
https://brennan.io/2015/01/16/write-a-shell-in-c/ • 脱線したら終わらなかった • 許してほしい
lshの構造 builtinの関数 lsh_launch lsh_execute lsh_split_line lsh_read_line lsh_loop
lsh_read_line
lsh_read_line &&lsh_loop
lsh_split_line
lsh_split_line
lsh_execute
None
ビルトインコマンド • lshではcd, help, exitの三つを実装している
ビルトインコマンド • lshではcd, help, exitの三つを実装している •絶対必要なコマンドが無い
SLコマンド
SLコマンド • slはUnix系オペレーティングシステム (OS) のコマンドの一つ。 コンソール画面をアスキーアートで描かれた蒸気機関車 (SL) が 走り抜ける。 •
1987年に歌代和正によって開発され、ニュースグループの fj.sourcesに投稿された物を嚆矢とする[1]。以来、「作者不 明」として流布し、さまざまな改変バージョンが製作された。 現在Linuxなど各種Unix系OSのディストリビューション用とし て公式に採用されているものは、1993年当時東京工業大学の学 生であった豊田正史(現・東京大学准教授)によって、より派 手に改造されたバージョンである。 -引用:https://ja.wikipedia.org/wiki/Sl_(UNIX)
None
Rustで書こう • ソースコードはGitHubにある • https://github.com/mtoyoda/sl • ncursesというライブラリを使えばOK • だけど……
入れられない…… • WindowsでもUbuntuでもダメだった • Windowsはlink.exeがNon-UTF-8云々のエラーで死 • Ubuntuは今朝やったら普通に入った
代案 • SLはC言語で書かれている • RustにはC言語で書かれた関数を呼ぶ仕組みがある • RustからSL走らせる関数を呼べばOK
FFI • Foreign Function Interface (他言語関数インターフェース) • RustからC言語で書かれた関数が呼べる
やりかた
ディレクトリ構造
Cargo.tomlを編集 • build=“build.rs” • gcc=“0.3” • などを追加
build.rsを書く
よぶ
はしる
課題 • 実はデータをうまく渡してやれてない • 文字列配列の渡し方がわからない
まとめ
たすけて • 今回作ったやつのソースコード • → https://github.com/tera3939/rust_shell