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 | 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 = ;
debug_here!(); }

config xterm (EN) (CN) (wiki)

cat ~/.Xresources

config as follow:

 ! Use a nice truetype font and size by default...
xterm*faceName: DejaVu Sans Mono Book
xterm*faceSize: ! Every shell is a login shell by default (for inclusion of all necessary environment variables)
xterm*loginshell: true ! I like a LOT of scrollback...
xterm*savelines: ! double-click to select whole URLs :D
xterm*charClass: :,-:,-:,:,-:,:,: ! DOS-box colours...
xterm*foreground: rgb:a8/a8/a8
xterm*background: rgb://
xterm*color0: rgb://
xterm*color1: rgb:a8//
xterm*color2: rgb:/a8/
xterm*color3: rgb:a8//
xterm*color4: rgb://a8
xterm*color5: rgb:a8//a8
xterm*color6: rgb:/a8/a8
xterm*color7: rgb:a8/a8/a8
xterm*color8: rgb://
xterm*color9: rgb:fc//
xterm*color10: rgb:/fc/
xterm*color11: rgb:fc/fc/
xterm*color12: rgb://fc
xterm*color13: rgb:fc//fc
xterm*color14: rgb:/fc/fc
xterm*color15: rgb:fc/fc/fc ! right hand side scrollbar...
xterm*rightScrollBar: true
xterm*ScrollBar: true ! stop output to terminal from jumping down to bottom of scroll again
xterm*scrollTtyOutput: false

Tell your X server to incorporate those tweak

xrdb -merge ~/.Xresources

debug test case

How do I debug a failing cargo test in gdb?

Ask GDB to list all functions in a program

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:
run --test

How do I debug a failing cargo test in GDB?

debug info

 $ cargo test --lib
Finished dev [unoptimized + debuginfo] target(s) in .03s
Running target/debug/deps/hello_cargo-b786631aa108fec0 running tests
test tests::it_works ... ok
test tests::test_add ... ok
test tests::test_bad_add ... FAILED failures: ---- tests::test_bad_add stdout ----
thread 'tests::test_bad_add' panicked at 'assertion failed: `(left == right)`
left: `-`,
right: ``', src/lib.rs:32:9
note: Run with `RUST_BACKTRACE=` environment variable to display a backtrace. failures:
tests::test_bad_add test result: FAILED. passed; failed; ignored; measured; filtered out error: test failed, to rerun pass '--lib' $ rust-gdb target/debug/deps/hello_cargo-b786631aa108fec0
GNU gdb (Ubuntu 7.11.-0ubuntu1~16.5) 7.11.
Copyright (C) Free Software Foundation, Inc.
License GPLv3+: GNU GPL version or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from target/debug/deps/hello_cargo-b786631aa108fec0...done.
(gdb) info functions test_bad_add
All functions matching regular expression "test_bad_add": File src/lib.rs:
static void hello_cargo::tests::test_bad_add::_$u7b$$u7b$closure$u7d$$u7d$::hacffd70b508c276a(struct closure *);
static void hello_cargo::tests::test_bad_add::h938c2acc2927d730(void);
(gdb) b hello_cargo::tests::test_bad_add::h938c2acc2927d730
Breakpoint at 0x139f7: file src/lib.rs, line .
(gdb) run --test test_bad_add
Starting program: /home/shhfeng/test/hello_cargo/target/debug/deps/hello_cargo-b786631aa108fec0 --test test_bad_add
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". running test
[New Thread 0x7ffff6ec4700 (LWP )]
[Switching to Thread 0x7ffff6ec4700 (LWP )] Thread "tests::test_bad" hit Breakpoint , hello_cargo::tests::test_bad_add::h938c2acc2927d730 () at src/lib.rs:
assert_eq!(bad_add(, ), );
(gdb) list
} #[test]
fn test_bad_add() {
// 这个断言会导致测试失败。注意私有的函数也可以被测试!
assert_eq!(bad_add(, ), );
}
}
(gdb) s
hello_cargo::bad_add::h460b365704f64b13 (a=, b=) at src/lib.rs:

debug detail

 (gdb) bt
# hello_cargo::bad_add::h460b365704f64b13 (a=, b=) at src/lib.rs:
# 0x0000555555567a06 in hello_cargo::tests::test_bad_add::h938c2acc2927d730 () at src/lib.rs:
# 0x00005555555676ea in hello_cargo::tests::test_bad_add::_$u7b$$u7b$closure$u7d$$u7d$::hacffd70b508c276a () at src/lib.rs:
# 0x000055555556754e in core::ops::function::FnOnce::call_once::h859d77482d101f3d ()
at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libcore/ops/function.rs:
# 0x000055555557005f in {{closure}} () at src/libtest/lib.rs:
# call_once<closure,()> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libcore/ops/function.rs:
# call_box<(),closure> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/liballoc/boxed.rs:
# 0x00005555555b3fda in __rust_maybe_catch_panic () at src/libpanic_unwind/lib.rs:
# 0x000055555558d168 in try<(),std::panic::AssertUnwindSafe<alloc::boxed::Box<FnBox<()>>>> ()
at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/panicking.rs:
# catch_unwind<std::panic::AssertUnwindSafe<alloc::boxed::Box<FnBox<()>>>,()> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/panic.rs:
# {{closure}} () at src/libtest/lib.rs:
# 0x00005555555688a5 in std::sys_common::backtrace::__rust_begin_short_backtrace::h7988d0d59efc7a12 ()
at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/sys_common/backtrace.rs:
# 0x0000555555569045 in {{closure}}<closure,()> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/thread/mod.rs:
# call_once<(),closure> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/panic.rs:
# do_call<std::panic::AssertUnwindSafe<closure>,()> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/panicking.rs:
# 0x00005555555b3fda in __rust_maybe_catch_panic () at src/libpanic_unwind/lib.rs:
# 0x000055555557018d in try<(),std::panic::AssertUnwindSafe<closure>> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/panicking.rs:
# catch_unwind<std::panic::AssertUnwindSafe<closure>,()> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/panic.rs:
# {{closure}}<closure,()> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/libstd/thread/mod.rs:
# call_box<(),closure> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/liballoc/boxed.rs:
# 0x00005555555b371e in call_once<(),()> () at /rustc/91856ed52c58aa5ba66a015354d1cc69e9779bdf/src/liballoc/boxed.rs:
# start_thread () at src/libstd/sys_common/thread.rs:
# thread_start () at src/libstd/sys/unix/thread.rs:
# 0x00007ffff77b56ba in start_thread (arg=0x7ffff6ec4700) at pthread_create.c:
# 0x00007ffff72d541d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:

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" $ && gdb ${%.*}
} 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 = ""))]
#[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 写一个操作系统 

rust学习的更多相关文章

  1. Rust学习资源和路线

    Rust学习资源和路线 来源 https://rust-lang-cn.org/article/23 学习资源 The Rust Programming Language 堪称Rust的"T ...

  2. 【译】通过 Rust 学习解析器组合器 — Part 1

    原文地址:Learning Parser Combinators With Rust 原文作者:Bodil 译文出自:掘金翻译计划 本文永久链接:https://github.com/xitu/gol ...

  3. [追热点]Rust学习资源整理

    为什么选择Rust 在一次演讲中,谈到微软为解决相应内存问题所做的工作,微软研究人员 Matthew Parkinson 提到了微软正在开发的基于 Rust 的新编程语言 Verona. 摘自:[Ru ...

  4. Rust学习-阶段1学习总结

    学习Rust已经两周了,基本上是断断续续的在学,或者是在上下班坐公交时,或者是在ODC没事做时.现在已经学习了Rust程序设计语言的前5章,是时候做一个总结了.关于数据类型或者if else这种内容我 ...

  5. rust学习小记(1)

    本文的学习资料来自 Rust 程序设计语言 简体中文版 推荐用idea来写rust,装好插件rust和toml即可 cargo(包管理) 可以使用 cargo build 或 cargo check  ...

  6. Rust学习笔记1

    这是一份不错的rust教程,目前包括4个block和4个project.全部完成后可以用rust实现一个简单的key-value存储引擎. 注意:Windows下rust貌似会遇到一些bug,强烈建议 ...

  7. Rust学习笔记一 数据类型

    写在前面 我也不是什么特别厉害的大牛,学历也很低,只是对一些新语言比较感兴趣,接触过的语言不算多也不算少,大部分也都浅尝辄止,所以理解上可能会有一些偏差. 自学了Java.Kotlin.Python. ...

  8. Rust学习(一)

    为什么学习Rust 最近在看Linux相关新闻的时候,看到了Linux内核正在将Rust集成至内核内的消息,且越来越多的嵌入式开发可以使用Rust编程.以往笔者的技术栈只有 C语言 ,C++也只是浅尝 ...

  9. Rust 学习 0

    安装Rust 后,本地有文档: file:///usr/local/share/doc/rust/html/index.html file:///usr/local/share/doc/rust/ht ...

  10. rust学习(二)

    play on line match if #![allow(unused)] fn write_bar(size: u64){ match size{ o => println!(" ...

随机推荐

  1. 《JAVA高并发编程详解》-volatile和synchronized

  2. ASP.NET SignalR 系列(六)之连接事件

    本章主要介绍下SignalR自带的连接事件 其实再前面的示例中,有出现了一些事件的重载,比如 public override Task OnConnected() 下面简单介绍一下SignalR提供了 ...

  3. 2019 拼多多java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.拼多多等公司offer,岗位是Java后端开发,最终选择去了拼多多. 面试了很多家公司,感觉大部分公司考察的点都差 ...

  4. 十大Intellij IDEA快捷键(附IDEA快捷键详细列表及使用技巧)

    十大Intellij IDEA快捷键(附IDEA快捷键详细列表及使用技巧) Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论.每个人都有自己的最爱, ...

  5. OpenGL ES教程系列(经典合集)

    为了搞透播放器的开发,花了些时间收集这些资料,虽然我已经搞定opengles渲染视频的内容,但是想玩玩opengles,往深里玩,图像处理这块是个好的方向,所以opengles是值得好好学的.   O ...

  6. python的交互式shell-ipython体验

    ipython的python比较优秀的交互式shell,比python console功能更加强大更加的贴近开发及调试程序,也支持在linux下直接执行linux命令 00x-install 源码安装 ...

  7. Yii2 路由美化

    一.美化路由形式 如:localhost/index.php?r=site/index 这种路由形式对SEO不友好,那么是否可以对路由进行一下美化呢?在Yii2中我们可以将路由必成以下的形式: 如:l ...

  8. vsftp网络服务

    1. vsftp概述 FTP是File Transfer Protocol(文本传输协议)的简称,用于Internet上的文件的双向传输.使用FTP传输时,具有一定程度的危险性,因为数据在因特网上面是 ...

  9. VMware15.5版本安装Windows_Server_2008_R2

    VMware15.5版本安装Windows_Server_2008_R2一.从VMware15.5中新建虚拟机1.打开VMware,在首页面选择创建新的虚拟机. 2.新建虚拟机向导,选择典型配置. 3 ...

  10. Cloudera Certified Associate Administrator案例之Troubleshoot篇

    Cloudera Certified Associate Administrator案例之Troubleshoot篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.调整日志的进 ...