Update: tài liệu dễ đọc hơn: http://rust-lang.github.io/book/
Rust thuộc loại ngôn ngữ nào?
Rust là một sản phẩm xuất phát từ Mozilla - tổ chức đứng sau Firefox thần thánh.
Rust is a systems programming language focused on three goals: safety, speed, and concurrency.
Vậy đừng lôi Rust ra làm web rồi chê này kia. Những lĩnh vực mà Rust quảng cáo là phù hợp:
- embedding in other languages
- programs with specific space and time requirements
- and writing low-level code like device drivers and operating systems.
Cài đăt: https://www.rust-lang.org/en-US/downloads.html
Kiểm tra version:
$ rustc --versionNhững người code Rust được gọi là : Rustaceans
rustc 1.12.1 (d4f39402a 2016-10-19)
File code Rust có đuôi ".rs". Tên dùng dấu ``_`` để phân cách giữa các từ, như hello_world.rs
$ cat main.rsRust là compiled language, tức phải "build" từ file source ".rs" thành file binary, sau đó chạy file binary.
fn main() {
println!("Hello, FAMILUG!");
}
$ rustc main.rs
$ ./main
Hello, FAMILUG!
Everything is a tradeoff in language design.
Cargo
Cargo là một phần quan trọng của Rust, quan trọng đến mức khi học lập trình bao nhiêu ngôn ngữ khác bạn sẽ không thấy người ta giới thiệu package manager ngay ở bài Hello, world. Chả ai nói về ``pip`` khi bắt đầu học Python cả.Cargo làm gì? 3 thứ
- building your code
- downloading the libraries your code depends on
- and building those libraries.
Nó đi kèm với Rust, nên tự có sau khi cài Rust
$ cargo --versionCargo cần file code phải nằm trong thư mục ``src``, và một file config tên là Cargo.toml với nội dung:
cargo 0.13.0-nightly (109cb7c 2016-08-19)
[package]Giờ thì build
name = "hello_world"
version = "0.0.1"
authors = [ "HVN <hvn@familug.org>" ]
$ cargo buildRồi chạy
Compiling hello_world v0.0.1 (file:///Users/hvn/me/rusty/hello_world)
Finished debug [unoptimized + debuginfo] target(s) in 0.28 secs
$ ./target/debug/hello_worldDùng lệnh cargo run để vừa build xong chạy luôn:
Hello, FAMILUG!
$ cargo run
Finished debug [unoptimized + debuginfo] target(s) in 0.0 secs
Running `target/debug/hello_world`
Hello, FAMILUG!
Crate /kreɪt/
Eng: A slatted wooden case used for transporting goods.Vie: sọt để đựng đồ / thùng không đóng kín
Rust dùng từ ``crate`` để chỉ library (thư viện) / package
A ‘crate’ is a package of Rust code.Thử build một software viết bằng Rust lấy từ GitHub về:
$ git clone git@github.com:BurntSushi/ripgrep.git; cd ripgrepBản build trên là build để debug, chưa tối ưu, build lại với --release:
...
$ cargo build
Updating registry `https://github.com/rust-lang/crates.io-index`
Downloading docopt v0.6.86
Downloading log v0.3.6
Downloading memmap v0.2.3
Downloading walkdir v0.1.8
Downloading term v0.4.4
Downloading memchr v0.1.11
Downloading thread_local v0.2.7
Downloading libc v0.2.17
Downloading regex v0.1.77
Downloading rustc-serialize v0.3.19
Downloading env_logger v0.3.5
Downloading num_cpus v1.1.0
Downloading deque v0.3.1
Downloading lazy_static v0.2.1
Downloading aho-corasick v0.5.3
Downloading fnv v1.0.5
Downloading utf8-ranges v0.1.3
Downloading regex-syntax v0.3.7
Downloading thread-id v2.0.0
Downloading kernel32-sys v0.2.2
Downloading winapi v0.2.8
Downloading winapi-build v0.1.1
Downloading strsim v0.5.1
Downloading fs2 v0.2.5
Downloading rand v0.3.14
Compiling winapi v0.2.8
Compiling winapi-build v0.1.1
Compiling strsim v0.5.1
Compiling log v0.3.6
Compiling utf8-ranges v0.1.3
Compiling libc v0.2.17
Compiling rustc-serialize v0.3.19
Compiling fnv v1.0.5
Compiling regex-syntax v0.3.7
Compiling kernel32-sys v0.2.2
Compiling lazy_static v0.2.1
Compiling term v0.4.4
Compiling walkdir v0.1.8
Compiling fs2 v0.2.5
Compiling num_cpus v1.1.0
Compiling thread-id v2.0.0
Compiling memchr v0.1.11
Compiling thread_local v0.2.7
Compiling rand v0.3.14
Compiling memmap v0.2.3
Compiling aho-corasick v0.5.3
Compiling deque v0.3.1
Compiling regex v0.1.77
Compiling env_logger v0.3.5
Compiling grep v0.1.3 (file:///Users/hvn/me/rusty/ripgrep/grep)
Compiling globset v0.1.0 (file:///Users/hvn/me/rusty/ripgrep/globset)
Compiling docopt v0.6.86
Compiling ripgrep v0.2.3 (file:///Users/hvn/me/rusty/ripgrep)
Finished debug [unoptimized + debuginfo] target(s) in 31.75 secs
./target/debug/rg 127 /etc/hosts
1:127.0.0.1 localhost
$ cargo build --releaseTạo project mới bằng cargo
Compiling libc v0.2.17
Compiling strsim v0.5.1
Compiling rustc-serialize v0.3.19
Compiling utf8-ranges v0.1.3
Compiling regex-syntax v0.3.7
Compiling log v0.3.6
Compiling lazy_static v0.2.1
Compiling winapi-build v0.1.1
Compiling winapi v0.2.8
Compiling kernel32-sys v0.2.2
Compiling fnv v1.0.5
Compiling term v0.4.4
Compiling walkdir v0.1.8
Compiling rand v0.3.14
Compiling fs2 v0.2.5
Compiling memchr v0.1.11
Compiling thread-id v2.0.0
Compiling thread_local v0.2.7
Compiling memmap v0.2.3
Compiling aho-corasick v0.5.3
Compiling num_cpus v1.1.0
Compiling deque v0.3.1
Compiling regex v0.1.77
Compiling grep v0.1.3 (file:///Users/hvn/me/rusty/ripgrep/grep)
Compiling docopt v0.6.86
Compiling env_logger v0.3.5
Compiling globset v0.1.0 (file:///Users/hvn/me/rusty/ripgrep/globset)
Compiling ripgrep v0.2.3 (file:///Users/hvn/me/rusty/ripgrep)
Finished release [optimized + debuginfo] target(s) in 77.56 secs
$ cargo new hello_familug --binLệnh này tạo ra những thứ sau:
Created binary (application) `hello_familug` project
$ find hello_familug/ -depth 1
hello_familug//.git
hello_familug//.gitignore
hello_familug//Cargo.toml
hello_familug//src
Copy lại code helloworld:
$ cp hello_world/src/main.rs hello_familug/src/main.rsChốt:
$ cd hello_familug/
$ cargo build --release
Compiling hello_familug v0.1.0 (file:///Users/hvn/me/rusty/hello_familug)
Finished release [optimized] target(s) in 0.14 secs
$ ./target/release/hello_familug
Hello, FAMILUG!
Different people learn differently! Choose whatever’s right for you.Lược dẫn theo: https://doc.rust-lang.org/book/getting-started.html
Hết.
Bài tiếp: Học Rust để tính tóan
HVN at http://familug.org
Bạn muốn tự học Python? bấm ngay vào http://pymi.vn/tutorial/
No comments:
Post a Comment