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
970
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
270
Other Decks in Programming
See All in Programming
AWSに止められる覚悟してますか?
morizo_1984
2
540
Domain-Driven Transformation
hschwentner
2
2.3k
Web Framework Benchmark Battle 2026, Any%
a_matsuda
2
2.1k
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
150
Kotlinの15年とServer-Side Kotlin
n_takehata
1
150
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
160
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
590
Next.js: The final boss of Web Performance
guaca
0
260
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
Agents on Rails - Rails at Scale 2026
irinanazarova
0
560
contenteditable と日本語入力に向き合う
colorful12
0
200
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
380
Featured
See All Featured
Six Lessons from altMBA
skipperchong
29
4.5k
We Have a Design System, Now What?
morganepeng
55
8.4k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
540
Crafting Experiences
bethany
1
380
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
The Limits of Empathy - UXLibs8
cassininazir
2
720
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
540
The Invisible Side of Design
smashingmag
301
52k
The Curse of the Amulet
leimatthew05
3
16k
Documentation Writing (for coders)
carmenintech
77
5.6k
RailsConf 2023
tenderlove
30
1.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
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