zoukankan      html  css  js  c++  java
  • rust学习

    Rust  (github

    1. install (https://rustup.rs/)  

    2. play on line  

    curl https://sh.rustup.rs -sSf | sh
    echo 'PATH="$PATH:$HOME/.cargo/bin"' >> ~/.bashrc
    rustup doc

      https://www.jdoodle.com/execute-rust-online   

    https://www.tutorialspoint.com/compile_rust_online.php  

    Tutorial org learn (entry)    

    1. org examaple (CN)

    github  

    # install book local
    git clone https://github.com/rust-lang-cn/rust-by-example-cn
    cd rust-by-example-cn
    cargo install mdbook
    mdbook build
    mdbook serve

    grammar 

    formatting-traits  

    2. book (Translations/CN)   (Chinese)

    github(CN)  

    github(EN)  

    rustup docs --book

    3. rustlings course   

    4. Rust 基础笔记  

    5. view a project

    cargo doc --open 

    6. Rust 语言中文版  

    7. Rust教程   

    8. Rust 编程语言入门    

    Grow with Rust

    THE STANDARD LIBRARY

    Comprehensive guide to the Rust standard library APIs.

    EDITION GUIDE

    Guide to the Rust editions.

    CARGO BOOK

    A book on Rust’s package manager and build system.

    RUSTDOC BOOK

    Learn how to make awesome documentation for your crate.

    RUSTC BOOK

    Familiarize yourself with the knobs available in the Rust compiler.

    COMPILER ERROR INDEX

    In-depth explanations of the errors you may see from the Rust compiler.

    Build your skills in an application domain 

    COMMAND LINE BOOK

    Learn how to build effective command line applications in Rust.

    WEBASSEMBLY BOOK

    Use Rust to build browser-native libraries through WebAssembly.

    EMBEDDED BOOK

    Become proficient with Rust for Microcontrollers and other embedded systems.

    Master Rust

    The Reference is not a formal spec, but is more detailed and comprehensive than the book.
     

    The Rustonomicon is your guidebook to the dark arts of unsafe Rust. It’s also sometimes called “the ’nomicon.”

    READ THE ’NOMICON
     

    The Unstable Book has documentation for unstable features that you can only use with nightly Rust.

    READ THE UNSTABLE BOOK
     

    rust web framework comparison  

    comparison  

    rust python example  

    awesome   

    awesome rust  (CN)

    awesome c(CN)  

    awesome python  

    debugger

    gdbgui  

    debug-here  

    cargo install debug-here-gdb-wrapper # if you are on linux
    cd debug-here/debug-me
    echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
    cargo run 

     

    # In Cargo.toml.
    
    [dependencies]
    debug-here = "0.2"
    

    # in source file. Now it looks like this: #[macro_use] extern crate debug_here; fn factorial(n: usize) -> usize { let mut res = 1; debug_here!(); 1 }

    config xterm (EN) (CN) (wiki)

    cat ~/.Xresources

     config as follow:

     1 ! Use a nice truetype font and size by default... 
     2 xterm*faceName: DejaVu Sans Mono Book
     3 xterm*faceSize: 11
     4 
     5 ! Every shell is a login shell by default (for inclusion of all necessary environment variables)
     6 xterm*loginshell: true
     7 
     8 ! I like a LOT of scrollback...
     9 xterm*savelines: 16384
    10 
    11 ! double-click to select whole URLs :D
    12 xterm*charClass: 33:48,36-47:48,58-59:48,61:48,63-64:48,95:48,126:48
    13 
    14 ! DOS-box colours...
    15 xterm*foreground: rgb:a8/a8/a8
    16 xterm*background: rgb:00/00/00
    17 xterm*color0: rgb:00/00/00
    18 xterm*color1: rgb:a8/00/00
    19 xterm*color2: rgb:00/a8/00
    20 xterm*color3: rgb:a8/54/00
    21 xterm*color4: rgb:00/00/a8
    22 xterm*color5: rgb:a8/00/a8
    23 xterm*color6: rgb:00/a8/a8
    24 xterm*color7: rgb:a8/a8/a8
    25 xterm*color8: rgb:54/54/54
    26 xterm*color9: rgb:fc/54/54
    27 xterm*color10: rgb:54/fc/54
    28 xterm*color11: rgb:fc/fc/54
    29 xterm*color12: rgb:54/54/fc
    30 xterm*color13: rgb:fc/54/fc
    31 xterm*color14: rgb:54/fc/fc
    32 xterm*color15: rgb:fc/fc/fc
    33 
    34 ! right hand side scrollbar...
    35 xterm*rightScrollBar: true
    36 xterm*ScrollBar: true
    37 
    38 ! stop output to terminal from jumping down to bottom of scroll again
    39 xterm*scrollTtyOutput: false
    View Code

    Tell your X server to incorporate those tweak

    xrdb -merge ~/.Xresources

    debug test case

    info functions
    info functions regexp

    16 Examining the Symbol Table    (16 Examining the Symbol Table.) 

    Debugging Rust Tests    

    rust-gdb /vagrant/target/debug/deps/libzfs-37d0dad38d98d030
    b lib.rs:533
    run --test

    How do I debug a failing cargo test in GDB?

    debug info

     1 $ cargo test --lib
     2     Finished dev [unoptimized + debuginfo] target(s) in 0.03s
     3      Running target/debug/deps/hello_cargo-b786631aa108fec0
     4 
     5 running 3 tests
     6 test tests::it_works ... ok
     7 test tests::test_add ... ok
     8 test tests::test_bad_add ... FAILED
     9 
    10 failures:
    11 
    12 ---- tests::test_bad_add stdout ----
    13 thread 'tests::test_bad_add' panicked at 'assertion failed: `(left == right)`
    14   left: `-1`,
    15  right: `3`', src/lib.rs:32:9
    16 note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
    17 
    18 
    19 failures:
    20     tests::test_bad_add
    21 
    22 test result: FAILED. 2 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out
    23 
    24 error: test failed, to rerun pass '--lib'
    25 
    26 
    27 $ rust-gdb target/debug/deps/hello_cargo-b786631aa108fec0
    28 GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
    29 Copyright (C) 2016 Free Software Foundation, Inc.
    30 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    31 This is free software: you are free to change and redistribute it.
    32 There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    33 and "show warranty" for details.
    34 This GDB was configured as "x86_64-linux-gnu".
    35 Type "show configuration" for configuration details.
    36 For bug reporting instructions, please see:
    37 <http://www.gnu.org/software/gdb/bugs/>.
    38 Find the GDB manual and other documentation resources online at:
    39 <http://www.gnu.org/software/gdb/documentation/>.
    40 For help, type "help".
    41 Type "apropos word" to search for commands related to "word"...
    42 Reading symbols from target/debug/deps/hello_cargo-b786631aa108fec0...done.
    43 (gdb) info functions test_bad_add
    44 All functions matching regular expression "test_bad_add":
    45 
    46 File src/lib.rs:
    47 static void hello_cargo::tests::test_bad_add::_$u7b$$u7b$closure$u7d$$u7d$::hacffd70b508c276a(struct closure *);
    48 static void hello_cargo::tests::test_bad_add::h938c2acc2927d730(void);
    49 (gdb) b  hello_cargo::tests::test_bad_add::h938c2acc2927d730
    50 Breakpoint 1 at 0x139f7: file src/lib.rs, line 32.
    51 (gdb) run --test test_bad_add
    52 Starting program: /home/shhfeng/test/hello_cargo/target/debug/deps/hello_cargo-b786631aa108fec0 --test test_bad_add
    53 [Thread debugging using libthread_db enabled]
    54 Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
    55 
    56 running 1 test
    57 [New Thread 0x7ffff6ec4700 (LWP 22620)]
    58 [Switching to Thread 0x7ffff6ec4700 (LWP 22620)]
    59 
    60 Thread 2 "tests::test_bad" hit Breakpoint 1, hello_cargo::tests::test_bad_add::h938c2acc2927d730 () at src/lib.rs:32
    61 32            assert_eq!(bad_add(1, 2), 3);
    62 (gdb) list
    63 27        }
    64 28    
    65 29        #[test]
    66 30        fn test_bad_add() {
    67 31            // 这个断言会导致测试失败。注意私有的函数也可以被测试!
    68 32            assert_eq!(bad_add(1, 2), 3);
    69 33        }
    70 34    }
    71 (gdb) s
    72 hello_cargo::bad_add::h460b365704f64b13 (a=1, b=2) at src/lib.rs:13
    View Code

     debug detail

     1 (gdb) bt 
     2 #0  hello_cargo::bad_add::h460b365704f64b13 (a=1, b=2) at src/lib.rs:13
     3 #1  0x0000555555567a06 in hello_cargo::tests::test_bad_add::h938c2acc2927d730 () at src/lib.rs:32
     4 #2  0x00005555555676ea in hello_cargo::tests::test_bad_add::_$u7b$$u7b$closure$u7d$$u7d$::hacffd70b508c276a () at src/lib.rs:30
     5 #3  0x000055555556754e in core::ops::function::FnOnce::call_once::h859d77482d101f3d ()
     6     at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libcore/ops/function.rs:231
     7 #4  0x000055555557005f in {{closure}} () at src/libtest/lib.rs:1497
     8 #5  call_once<closure,()> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libcore/ops/function.rs:231
     9 #6  call_box<(),closure> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/liballoc/boxed.rs:749
    10 #7  0x00005555555b3fda in __rust_maybe_catch_panic () at src/libpanic_unwind/lib.rs:87
    11 #8  0x000055555558d168 in try<(),std::panic::AssertUnwindSafe<alloc::boxed::Box<FnBox<()>>>> ()
    12     at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/panicking.rs:276
    13 #9  catch_unwind<std::panic::AssertUnwindSafe<alloc::boxed::Box<FnBox<()>>>,()> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/panic.rs:388
    14 #10 {{closure}} () at src/libtest/lib.rs:1452
    15 #11 0x00005555555688a5 in std::sys_common::backtrace::__rust_begin_short_backtrace::h7988d0d59efc7a12 ()
    16     at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/sys_common/backtrace.rs:135
    17 #12 0x0000555555569045 in {{closure}}<closure,()> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/thread/mod.rs:469
    18 #13 call_once<(),closure> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/panic.rs:309
    19 #14 do_call<std::panic::AssertUnwindSafe<closure>,()> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/panicking.rs:297
    20 #15 0x00005555555b3fda in __rust_maybe_catch_panic () at src/libpanic_unwind/lib.rs:87
    21 #16 0x000055555557018d in try<(),std::panic::AssertUnwindSafe<closure>> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/panicking.rs:276
    22 #17 catch_unwind<std::panic::AssertUnwindSafe<closure>,()> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/panic.rs:388
    23 #18 {{closure}}<closure,()> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/thread/mod.rs:468
    24 #19 call_box<(),closure> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/liballoc/boxed.rs:749
    25 #20 0x00005555555b371e in call_once<(),()> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/liballoc/boxed.rs:759
    26 #21 start_thread () at src/libstd/sys_common/thread.rs:14
    27 #22 thread_start () at src/libstd/sys/unix/thread.rs:81
    28 #23 0x00007ffff77b56ba in start_thread (arg=0x7ffff6ec4700) at pthread_create.c:333
    29 #24 0x00007ffff72d541d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

    rust debugger

    Vebugger

    Debugging Rust code with vim and Conque-GDB   

    # install  Vundle firstl list then vimproc.vim
    git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
    Plugin 'vim-scripts/Conque-GDB'
    # in vim, :PluginInstall , :ConqueGdbExe rust-gdb , :ConqueGdb target/debug/$name

    plugin     

    github   

    doc 

    BKM:   

    Vim插件之Conque GDB     

    How can I integrate gdb with Vim?   

    Using ConqueGDB to debug ARM microcontroller with OpenOCD    

    vimproc.vim  

    Vundle.vim    

    如何在vim中可视化的调试c++程序?    

    Vim与GCC和gdb完美组合   

     

    vi/vim使用进阶: 在VIM中使用GDB调试 – 使用vimgdb (vimgdb)     

    rust-gdb/rust-lldb  (github)

    debugging-rust-with-gdb  

    rustc -g main.rs --emit="obj,link"
    gdb main
    
    # created two aliases for my bash to make things simple:
    
    alias rd='rustc -g --emit="obj,link"'
    
    compile_and_run() {
         rustc -g --emit="obj,link" $1 && gdb ${1%.*}
    }
    
    alias rdr=compile_and_run

    REPL

    Rusti  

    # Link failure: cannot find -lncursesw  https://github.com/murarth/rusti/issues/92
    sudo apt-get install libncursesw5-dev
    # completion https://github.com/racer-rust/racer#installation
    rustup toolchain add nightly
    cargo +nightly install racer
    export PATH="$PATH:$HOME/.cargo/bin"
    rustup install nightly-2016-08-01
    rustup run nightly-2016-08-01 cargo install --git https://github.com/murarth/rusti
    # https://github.com/murarth/rusti/issues/90 error while loading shared libraries: librustc_driver-c8005792.so
    rustup run nightly-2016-08-01 ~/.cargo/bin/rusti
    rustup run nightly-2016-08-01 target/debug/rusti
    

     

    IDE

    Rust Language Server (RLS)     

    edition 

    Rustup for managing Rust versions

     

    Tips

    1. 调试宏代码  

    rustc --pretty expanded

    2. Rust进阶之条件编译

    #[cfg(foo)]
    #[cfg(bar = "baz")]
    
    #[cfg(any(unix, windows))]
    #[cfg(all(unix, target_pointer_width = "32"))]
    #[cfg(not(foo))]

    official example

    offical doc

     Gramma

    1. PhantomData

    Doc: try by size_of 

    #![allow(unused)]
    use std::marker::PhantomData;
    use std::mem;
    
    fn main() {
    #[allow(dead_code)]
    struct Slice<'a, T: 'a> {
        start: *const T,
        end: *const T,
        phantom: PhantomData<&'a T>,
    }
    
    struct Slice1<T:> {
        start: *const T,
        end: *const T,
    }
    
    println!("{:?}", mem::size_of::<Slice<i32>>());
    println!("{:?}", mem::size_of::<Slice1<i32>>());
    }
    
    // output: 
    // 16
    // 16
    

    2. Vec.with_capacity

    Doc   

    3. typyof by type_name  

    base type of rust from Reference Doc 

    #![feature(core_intrinsics)]
    use std::mem;
    
    fn print_type_of<T>(_: &T) {
        println!("{}", unsafe { std::intrinsics::type_name::<T>() });
    }
    
    fn main() {
        print_type_of(&32.90);          // prints "f64"
        print_type_of(&vec![1, 2, 4]);  // prints "std::vec::Vec<i32>"
        print_type_of(&"foo");          // prints "&str"
        let ln = mem::size_of::<i32>() as u64;
        print_type_of(&ln)              // prints "u64" 
    }
    

    4. 错误处理(match, let and ? 用法)

    Doc

    Result is a good example.  

     5. 闭包

    Closures 

    6. Option

    map_or and related

     

    简易教程:

    易百教程 

    极客学院:

    slice宏定义, Option, 迭代器

    rust 写一个操作系统 

  • 相关阅读:
    win7下new出的内存默认是无执行权限的
    【转】 C++获得系统时间,以及1970年1月1日到现在的毫秒数
    【收藏】获取系统安装软件(vc++源码)
    opencv编译以及测试
    Vim命令合集
    在SSMS中打开DTS Package
    秋日的阳光
    又一位部门同事离职
    不要让你的孩子成为留守儿童,更不让你的父母成为空巢老人
    又将有一位同事离职
  • 原文地址:https://www.cnblogs.com/shaohef/p/10801767.html
Copyright © 2011-2022 走看看