用小齒輪來帶動大齒輪 - 用Rust做Rust的開發工具
How to learn?
By writing some side projects
Asking for
Rust Project ?!!
Asking for Rust Side project ???
What is Trait of Rust ?
Trait of Rust
Trait of Rust
-
No peak, No GC (X)
-
Smooth mem usage (X)
-
Hard to find a job (O)
-
write it daily (O)
Trait of Rust
Peak and periodic
Smooth and constantly
Trait of Rust
X coordinate is Date !
Lack a lot of things
but a lot of side projects
:)
How to find a Rust Side project ???
For example
What's in my laptop?
Archlinux - An OS in kiss way
packer - An arch user repository manager
tig - A command line git viewer (C)
zsh - one of cool shell (c?)
qtile - a hackable tile windows manger (python)
neovim - a text editor
python - a good script language (C)
json - a data format
Redox OS
Redox is a Unix-like Operating System written in Rust, aiming to bring the innovations of Rust to a modern microkernel and full set of applications.
Too hard to me
RUA
I use it, it's good and nothing need to be fixed or enhanced.
Nu Shell &
wtftw
Window Tiling For The Win. A tiling window manager written in Rust
Neovide
This is a simple graphical user interface for Neovim. Where possible there are some graphical improvements, but it should act functionally like the terminal UI.
It is really cool
RON? what is this?
RON - Rusty Object Notation
RIIR
A little bit crazy?
Why RIIR
Efficacy &
Safe
use Rust
- Participate it
- And learn more
Still Why Rust?
System Call for Windows Server running IIS.
Find the line with error
"fatal error" by kerolic is licensed under CC BY-NC-SA 2.0
Some cable plugin & Green light for OK
Option
fn checked_division(dividend: i32, divisor: i32) -> Option<i32> {
if divisor == 0 {
None
} else {
Some(dividend / divisor)
}
}
Result
fn sqrt(x: f64) -> Result<f64, &'static str> {
if x < 0.0 {
Err("Do not sqrt the negative number")
} else {
Ok(x.sqrt())
}
}
Rust don't put wires into box and pretend clear
"DSCF2319.JPG" by em978 is licensed under CC BY-NC 2.0
Rust make every thing ordered
"6148-336-448_Server_room_cabling_nightmare" by DrJohnBullas is licensed under CC BY-NC-ND 2.0
How to deal
Option & Result
Directly Unwarp
let quotient = checked_division(a, b).unwrap()
- You 100% sure there is always a value
- use default value - the pythonic thought
let quotient = checked_division(a, b).unwrap_or_default()
- use my default value - the pythonic thought
let quotient = checked_division(a, b).unwrap_or(1)
let quotient = checked_division(a, b).expect("Message")
- You 100% sure there is always a value
Click
me !
Result to Option
let root = sqrt(x).ok()
- Change the result to option
- use default value - the pythonic thought
let root = sqrt(x).err()
let root = sqrt(x).or(sqrt(-x))
- use fail back Result
For All Conditions
match checked_division(a, b) {
Some(i) => { ... },
None => {...}
}
match sqrt(a) {
Ok(i) => { ... },
Err(e) => {...}
}
For one Condition
if let Some(r) = checked_division(a, b) {
r
}
if checked_division(a, b).is_none() {
}
if checked_division(a, b).is_some() {
}
if let Ok(r) = sqrt(a) {
r
}
if let Err(e) = sqrt(a) {
e
}
if sqrt(a).is_ok() {
}
if sqrt(a).is_err() {
}
What's the main problem when relocated?
"IMG_3461" by Jemimus is licensed under CC BY 2.0
Where are scissors & tape ?
Borrow & Return
let char_list = vec!['c', 'o', 's', 'c', 'u', 'p'];
let mut sentence = char_list;
sentence.push('.');
println!("{:?}", sentence);
//println!("{:?}", char_list);
Borrow & Return
let char_list = vec!['c', 'o', 's', 'c', 'u', 'p'];
{
let mut sentence = char_list;
sentence.push('.');
println!("{:?}", sentence);
}
println!("{:?}", char_list); // not work
Is Rust Object oriented ?
impl & trait
use std::default::Default;
#[derive(Debug)]
struct Car {
gas: i32,
gas_consumption: i32
}
impl Car {
fn try_to_go(&mut self, mile: i32) -> Result<i32, &'static str> {
...
}
}
Rust is good,
help you work better
Back to topic
Nvim translation plugin
That is my scenario
It is done in Python
Try to RIIR
Rust Develop Cycle
-
coding
-
cargo check
-
cargo test
Let's do it
- Download nvim config https://bit.ly/2Xv6Hin
- untar and copy nvim folder to ~/.config
- (optional) modify ~/.config/init.vim to your github
- (optional) fork this projct https://github.com/yanganto/coscup
- nvim :Pluginstall
- cd ~/.config/nvim/plugged/coscup cargo build
- Yes, It is ready to go
You also can try neovide
Have fun with Rust
Q & A
Thanks for listening
Find your interesting side project & share!
COSCUP2020
By Antonio Yang
COSCUP2020
This workshop helps people have fun with Rust in Taiwain.
- 1,483