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
RustでShell作ろう
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
tera
December 17, 2016
Programming
0
940
RustでShell作ろう
平成28年12月17日(土): 第二回 帰ってきたhojiroLT にて話しました
tera
December 17, 2016
Tweet
Share
More Decks by tera
See All by tera
ピッてやるとシュッてなるやつを作った話
tera
0
260
Pythonを読む
tera
0
220
importを理解したかった
tera
0
660
HTTPをしゃべろう~Firefoxになるために~
tera
0
240
Other Decks in Programming
See All in Programming
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
380
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
200
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
0
930
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
130
Grafana:建立系統全知視角的捷徑
blueswen
0
330
Oxlint JS plugins
kazupon
1
800
2026年 エンジニアリング自己学習法
yumechi
0
130
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
510
AI巻き込み型コードレビューのススメ
nealle
0
130
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
600
CSC307 Lecture 09
javiergs
PRO
1
830
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
0
310
YesSQL, Process and Tooling at Scale
rocio
174
15k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
290
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
0
270
Game over? The fight for quality and originality in the time of robots
wayneb77
1
110
A Soul's Torment
seathinner
5
2.2k
Code Review Best Practice
trishagee
74
20k
It's Worth the Effort
3n
188
29k
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
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