精华内容
下载资源
问答
  • Rust 语言入门

    2016-07-01 14:44:00
    Java语言毫无疑问地稳坐霸主位置了。如今很难找到哪台机器上没有安装JDK。有了虚拟机,确实很方便,不需要过多地考虑机器环境,一次编写到处运行基本实现了。但,隔着一层“虚拟机”,无论怎样优化,总还是比直接...

        Java语言毫无疑问地稳坐霸主位置了。如今很难找到哪台机器上没有安装JDK。有了虚拟机,确实很方便,不需要过多地考虑机器环境,一次编写到处运行基本实现了。但,隔着一层“虚拟机”,无论怎样优化,总还是比直接编译到本地指令慢些。

        C语言总还是有用武之地的。如果特别看重效率,比如一些核心算法,总是想着用C重写。

        C语言要想真正驾驭确实很难,而且不同程序员间水平差异巨大。要组个称心的团队,难啊。上个世纪七十年代的语言,奋斗到今日还要担纲主角,可以算个奇迹了。几十年的软件工程实践,已经为我们积累了宝贵的经验。需要恰当地反应到新语言中。

        Go语言希望能代替C,称为21世纪的C语言。GO的确也做得很好,至少是足够简单、实用。

        但,GO语言在语言层面并无太多的创新,仅仅是没有泛型,没有解构匹配就很可惜了。

        Rust语言则提出了很多革命性的解决方案。虽然比GO复杂,但其后的空间广阔!

        Rust采用了 所有权、引用借用、生命期等一系列全新的概念来解决内存分配的问题。这是所有高级语言要面对的头疼问题。C把责任全推给程序员,如果你思路不严谨,内存泄漏,活该!Java等一大部分后起之秀使用“垃圾回收”制度。管杀不管埋,有专门的收尸队。什么时候来收,你说了不算。

        Rust无垃圾回收,却实现了内存的自动管理。这是低成本、高效率的内存管理。所有可能出现的内存资源问题,都交给编译器搞定,不是在“运行期”修补!这恐怕是Rust最引以为豪的特性了。属于Rust宣称的:“零成本抽象”。

        Rust有很多激动人心的特性,比如泛型,比如对并发的支持(与Go语言类似)

        万事开头难,还是先安装一下环境吧。

    ------------------------------------

     登陆官网,下载Windows下的安装包,我选的是32位for GNU的。

    rust-1.9.0-i686-pc-windows-gnu.msi

        安装很简单,几乎是一键完成。实际上,Rust可以不用安装,直接拷贝解压到某个目录下就可以的。安装只不过是自动设置了环境变量path指向了rust的bin目录。这对于我等程序员出身易如反掌。

        安装后做个小测试。随便找个位置,打开cmd窗口。输入: rustc --version

        如打印出版本信息,则安装成功了。

        再写个小程序试试。做个文本文件,改名:my.rs 内容:

        fn main(){

           println!("hello, rust!");

        }

        先编译一下:  rustc my.rs

        看看目录下,是否生成了 my.exe, 运行它就可以了。

        作为程序员,总不能只用记事本,至少需要一个代码编辑环境,最少要能够代码着色啊,能代码提示、补全就更好。

        这里推荐:SublimeText3。

        从官方下载该编辑工具。免费版与注册版的差异是时不时弹出对话框,脸皮厚度够,这倒无大妨碍。

        sublimeText支持强大的插件扩展。

    (1) 安装 package controler
    ctrl + ` (tab 上方的键)
    输入(很长,只有一行,是个python脚本):

    import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read()) 

    等待完成,提示重启。

    (2) 安装Rust插件

    此时,preferences 下多了一项:package control, 运行它(有快键:ctrl + shift + p)

    输入:ins,选install Packages

    等待弹出可安装插件的列表。再输入rust,

    安装前3个就可以了。

    (3)其中的第3个插件,RustAutoComplete,代码自动补全,额外需要两个东西:一个是外部工具 racer, 一个是Rust编译器的源代码。

    对于第一个,下载racer的rust源码,并编译。这需要Rust的管理工具cargo,已经随着rust发行了。

    找个靠谱的位置,运行cmd,输入:

    git clone https://github.com/phildawes/racer.git 

    就会下载racer源代码(如果不知道git怎么安装,那个另一个问题)

    然后,

    cd racer

    cargo build

    等待编译完成吧......

    一切ok后,到racer/target/debug 目录下寻找我们的产品: racer.exe

    把它安排到个 path 能看见的位置。

    对于第二项,直接到rust网站找到源码下载。下载后解压,做个环境设置:

    RUST_SRC_PATH = D:\1_GREEN\RUST\rustc-1.9.0\src

    这时候,cmd下,运行racer.exe 就不会出错了。

    一切ok,回头设置 sublimeText:

    preferences | package settings | RustAutoComplete | Settings - user

    该文件中写入:

    {
    // racer.exe绝对路径
    "racer": "racer.exe",
    // rust源码文件路径
    "search_paths": [ "D:\\1_GREEN\\RUST\\rustc-1.9.0\\src" ]
    }

    重启 sublimeText, 应该可以自动代码补全了。

     

    转载于:https://www.cnblogs.com/gyhang/p/5633029.html

    展开全文
  • rust语言中文入门教程 在过去的几年中,Rust从在Mozilla员工的实验室中培养出的好奇心,变成了编写下一代本机应用程序和裸机解决方案的有力竞争者。 但是这些进步来自Rust提供了自己的工具链和组件管理系统,以及它...

    rust语言中文入门教程

    在过去的几年中,Rust从在Mozilla员工的实验室中培养出的好奇心,变成了编写下一代本机应用程序和裸机解决方案的有力竞争者。 但是这些进步来自Rust提供了自己的工具链和组件管理系统,以及它自己的功能和怪癖。

    本文介绍了在Rust中设置工作环境,配置IDE以及充分利用Rust为应用程序开发提供的工具集的基础知识。

    [ 什么是Rust? 安全,快速,轻松地进行软件开发的方式 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

    相关视频:使用Rust开发更安全的软件

    快速开始使用旨在创建快速的系统级软件的Rust新手。 这个两分钟的动画讲解者展示了Rust如何绕过令人烦恼的内存和管理编程问题。

    了解Rust每晚,beta和稳定版本

    Rust的工具链主要由Rust编译器rustc以及用于管理Rust安装的工具组成。 由于Rust正在不断开发中,因此Rust工具链的设计使其易于保持最新。

    通常通过多个渠道提供软件项目,以分离代码的稳定版本和beta版本。 Rust的工具链以相同的方式工作,为其工具链提供了三个渠道:

    • 稳定:要点发布,每六周左右出现一次。
    • Beta:下一个要点发布的候选人,出现的频率更高。
    • 每晚:最直接的构建,可以使用最先进的功能,但不能保证其稳定性。

    正如开发人员Karol Kuczmarski指出的那样 ,最好将每晚的Rust频道视为自己的语言。 某些Rust功能(例如编译为WebAssembly)仅在夜间通道中可用,并且只能由特殊的编译器指令激活。 换句话说,它们甚至不会在beta或稳定版上进行编译。

    这是设计使然,因为无法保证夜间功能将在其他任何地方得到支持。 但是,这些功能中的许多功能最终都会从夜间渠道逐步退出,进入Beta和稳定版本。 (例如,从Rust 1.30开始,编译为WebAssembly即可稳定运行。)

    简而言之:

    1. 使用稳定的实际生产工作。
    2. 使用Beta测试即将推出的版本的当前软件,以查看升级是否会中断。
    3. 每晚使用具有Rust最新功能的沙盒实验。

    选择用于Rust开发的操作系统

    Rust 支持 32位和64位版本的所有三个主要平台( Windows,Linux和MacOS),每个版本都有官方二进制文件。 其他许多平台也都有官方二进制文件,但它们没有相同级别的自动测试范围。 这些二等平台包括适用于iOS,Android和Linux的ARMv6和ARMv7。 MIPS Linux和MIPS64 Linux; x86 iOS,Windows和Linux的32位版本; WebAssembly 其他平台,例如Windows XP或试验性的HaikuOS,都通过非官方版本得到支持。

    Rust的开发团队表示,尽可能广泛地移植不是Rust的使命之一。 例如,尽管Rust在许多ARM体系结构上都可用,但是不能保证在低端硬件平台上将正式支持Rust。

    也就是说,应该为大多数常见的主流用例(即32位和64位Windows,Linux和MacOS)提供受支持的Rust构建。

    如果您打算在Windows上的Rust中进行开发 ,请牢记工具链。 Rust在Windows上支持两个工具链:

    • 本机Microsoft Visual C(MSVC)ABI
    • GCC链接器使用的Gnu ABI。

    由于Windows内置的几乎所有C / C ++软件仍然使用MSVC,因此您将希望在绝大多数时间使用MSVC工具链。 如果您需要GCC,则最有可能是要与Windows中使用GCC构建的第三方库进行互操作。

    好消息是,Rust的工具链管理系统使您可以同时安装MSVC GCC工具链,并且可以逐个项目地在它们之间进行切换。

    Rust的编译目标之一是WebAssembly,这意味着您可以用Rust编写并部署到Web浏览器。 WebAssembly本身的边缘仍然很粗糙,Rust对它的支持也是如此。 但是,如果您有雄心壮志并且想让自己的手变得凌乱,请阅读 Rust和WebAssembly开发人员编写的书 ,其中详细介绍了将WebAssembly编译为Rust的过程。 这本书包括一个简单项目的教程,一个用Rust编写并作为WebAssembly部署的Conway的《人生游戏》的实现。

    使用rustup开始您的Rust设置

    Rust提供了称为rustup多合一安装程序和工具链维护系统。 下载rustup并运行它; 它将获取Rust工具链的最新版本并为您安装它们。

    rustup维护的最关键的工具是:

    • rustup本身。 每当发布新版本的rustup或其他工具时,您都可以运行rustup update并自动rustup update所有内容。
    • rustc ,Rust编译器。
    • 货物,Rust的包装和工作区经理。

    默认情况下, rustup从稳定通道安装Rust。 如果要使用beta或夜间版本,则必须安装这些通道(例如rustup install nightly ), 并将 Rust设置为默认使用它们( rustup default nightly )。 您还可以在编译Rust应用程序时手动指定要使用的通道 ,因此不必每次在项目之间移动时都设置和重置默认值。

    您还可以使用rustup安装和维护自定义工具链。 这些通常由非官方的第三方Rust版本用于不受支持的平台,因为这些平台通常需要自己的链接器或其他特定于平台的工具。

    锈更新 IDG

    rustup会将Rust工具链的所有部分更新为最新版本。 在这里,夜间工具链(具有尖端的语言和可能不稳定的语言组件)与稳定版本分开进行更新。

    为IDE配置Rust

    尽管Rust是一种相对较新的语言,但它已经获得了许多常见IDE的强大支持。 开发人员Manuel Hoffman在areweideyet.com网站上维护着一个项目来跟踪这种支持的状态。

    通过称为Rust Language Server(RLS)的功能,使Rust能够与IDE良好配合是其开发团队的一个明确目标。 RLS从Rust自己的编译器(而不是第三方解析器)提供有关代码的实时反馈。

    锈langserver IDG

    Rust的Language Server项目允许将实时反馈从Rust编译器提供给您正在使用的代码的IDE。 此处显示的Visual Studio Code具有对Rust语言服务器可用的一些最完整的支持。

    以下是支持Rust的IDE:

    创建您的第一个Rust项目

    Rust项目旨在具有一致的目录结构,其中代码和项目元数据以某种方式存储在其中。 代码存储在src子目录中,有关项目的详细信息存储在项目根目录中的两个文件中: Cargo.toml (项目的基本信息)和Cargo.lock (自动生成的依赖项列表)。 您可以手动创建该目录结构和元数据,但是仅使用Rust自己的工具来完成这项工作就容易了。

    提示: Rust的示例在线学习指南Rust提供了交互式代码示例,可以在浏览器中直接对其进行编辑和运行。 它涉及几乎所有主要的Rust概念,尽管在讨论中相对较晚地引入了一些更关键的概念,例如借用和生存期。

    Rust的Cargo工具可管理Rust项目以及它们使用的库或“库”。 要在其自己的目录中启动名为my_project的新Rust项目,请输入cargo new my_project (对于使用.Net Core的 C#开发人员,请考虑dotnet new命令。)新项目与该名称一起出现在带有该名称的子目录中,以及基本项目清单( Cargo.toml文件)和项目源代码的存根。 ,位于src子目录中。

    创建新项目时,将在项目的src目录中自动创建一个main.rs文件。 该文件包含一个基本的“ hello world”应用程序,因此您可以通过编译和运行它来立即测试Rust工具链。

    “ hello world”应用程序的源代码:

    fn main() {
    println!(“Hello World!”);
    }

    要构建并运行它,请输入项目目录的根目录,然后键入cargo run 请注意,默认情况下,Cargo以调试模式构建项目。 要以发布模式cargo run --release ,请使用cargo run --release 二进制文件内置在项目的target/debugtarget/release子目录中,具体取决于您使用的编译配置文件。

    锈你好世界 IDG

    编译Rust项目时,将获取并自动编译其所有依赖项。 对于出现警告或错误的所有内容,都会显示详细的逐行反馈。

    使用Rust板条箱

    程序包管理是任何现代编程环境的关键部分。 为此,Rust提供了“ crates”,它们是打包成与Rust工具一起分发的第三方库。 您可以在Rust官方包注册表Crates.io中找到板条箱。

    如果您的项目依赖于特定的板条箱,则需要通过编辑项目的Cargo.toml文件来指定该板条箱。 执行此操作的标准方法是手动操作-即,直接使用文本编辑器直接编辑Cargo.toml 下次重建项目时,Rust自动获取任何需要的依赖项。

    提示:尽管这两个工具是非官方的第三方项目,但它们可以通过命令行更新cargo-edit-locally cargo-edit工具和cargo-edit-locally两种工具。

    当您构建依赖于外部包装箱的Rust项目时,默认情况下,Cargo在Crates.io上查找这些包装箱; 您无需手动获取它们。 如果您需要不在注册表中托管的板条箱,例如私有存储库中的某些板条,您还可以通过URL而不是板条箱名称来引用项目中的板条箱。

    请注意,某些包装箱只会在Rust的夜间频道上安装和构建,因为它们使用其他频道中没有的实验功能。 如果您在发布频道上并尝试安装这样的板条箱,则在编译本身失败之前,您不会收到任何警告。 板条箱文档通常提到是否需要夜间频道,因此在添加之前请仔细阅读,更不用说编译了。

    板条箱可以包含二进制文件。 有些是在Rust开发中使用的命令行工具。 其他是通用工具(例如ripgrep )。 要安装这些板条箱之一,只需键入cargo install <crate name> 这不是分发用Rust创建的二进制文件的唯一方法,但是它是Rust开发人员在涉及Rust工具的工作流中获取它们的便捷方法。

    将Rust交叉编译到另一个平台

    因为Rust支持多个工具链,所以即使在相同的Rust安装中,您也可以将Rust应用程序编译到目标操作系统和环境,该目标操作系统和环境与您要编译的目标操作系统和环境不同。

    这种交叉编译需要在您使用的平台上与目标平台匹配的工具链。 有时,就像与Windows上的Linux进行交叉编译一样,反之亦然,这涉及到拥有GCC链接程序。 但是有时候,它更复杂。 例如,要交叉编译到MacOS ,您需要Xcode IDE库才能完成工作-cctools(Apple等效于binutils)和MacOS SDK。

    第三方工具提供了解决这些困难的一些方法:

    • 这样的工具之一就是Trust ,它是Travis CI和AppVeyor模板,可以自动发布Rust项目的二进制发行版。 尽管它需要使用Travis CI和AppVeyor服务,并且可以将您的项目托管在GitHub上,但是它可以为Linux,Windows和MacOS构建。
    • Cross的另一个项目直接在64位x86 Linux主机上运行,​​但是提供了其创建者所描述的“零设置”交叉编译功能,可以跨多种目标进行编译,包括64位Windows和MIPS。
    • crossbuild项目提供了一个多体系结构的Docker映像,可用于在所有三个主要平台之间交叉构建。

    翻译自: https://www.infoworld.com/article/3234929/rust-tutorial-get-started-with-the-rust-language.html

    rust语言中文入门教程

    展开全文
  • The Rust Programming Language This is the main source code repository for Rust. It contains the compiler, standard library, and documentation. Note: this README is for users rather than contributors. ...
  • The Rust Programming Language This is the main source code repository for Rust. It contains the compiler, standard library, and documentation. Note: this README is for users rather than contributors. ...
  • Rust教程:Rust语言入门

    千次阅读 2020-05-16 22:13:54
    在过去的几年中,Rust从在Mozilla员工的实验室中培养出的好奇心,变成了编写下一代本机应用程序和裸机解决方案的有力竞争者。 但是这些进步来自Rust提供了自己的工具链和组件管理系统,以及它自己的功能和怪癖。 ...

    在过去的几年中,Rust从在Mozilla员工的实验室中培养出的好奇心,变成了编写下一代本机应用程序和裸机解决方案的有力竞争者。 但是这些进步来自Rust提供了自己的工具链和组件管理系统,以及它自己的功能和怪癖。

    本文介绍了在Rust中设置工作环境,配置IDE以及充分利用Rust为应用程序开发提供的工具集的基础知识。

    [ 什么是Rust? 安全,快速,轻松地进行软件开发的方式 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

    相关视频:使用Rust开发更安全的软件

    快速开始使用旨在创建快速的系统级软件的Rust新手。 这个为时两分钟的动画讲解者展示了Rust如何绕过令人烦恼的内存和管理编程问题。

    了解Rust每晚,beta和稳定版本

    Rust的工具链主要由Rust编译器rustc以及用于管理Rust安装的工具组成。 由于Rust正在不断开发中,因此Rust工具链的设计使其易于保持最新。

    通常通过多种渠道提供软件项目,以分离代码的稳定版本和beta版本。 Rust的工具链以相同的方式工作,为其工具链提供了三个渠道:

    • 稳定:要点发布,每六周左右出现一次。
    • Beta:下一个要点发布的候选人,出现的频率更高。
    • 每晚:最直接的构建,可以使用最先进的功能,但不能保证其稳定性。

    正如开发人员Karol Kuczmarski指出的那样 ,最好将每晚的Rust频道视为自己的语言。 某些Rust功能(例如编译为WebAssembly)仅在夜间通道中可用,并且只能通过特殊的编译器指令激活。 换句话说,它们甚至不会在beta或稳定版上进行编译。

    这是设计使然,因为无法保证夜间功能将在其他任何地方得到支持。 但是,这些功能中的许多功能最终都会从夜间渠道逐步退出,进入Beta和稳定版本。 (例如,从Rust 1.30开始,编译为WebAssembly即可稳定运行。)

    简而言之:

    1. 使用稳定的实际生产工作。
    2. 使用Beta测试即将推出的版本的当前软件,以查看升级是否会中断。
    3. 每晚使用具有Rust最新功能的沙盒实验。

    选择用于Rust开发的操作系统

    Rust 支持 32位和64位版本的所有三个主要平台( Windows,Linux和MacOS),每个版本都有官方二进制文件。 其他许多平台也都有官方二进制文件,但它们没有相同级别的自动测试范围。 这些二等平台包括适用于iOS,Android和Linux的ARMv6和ARMv7。 MIPS Linux和MIPS64 Linux; x86 iOS,Windows和Linux的32位版本; WebAssembly 其他平台,例如Windows XP或试验性的HaikuOS,都通过非官方版本得到支持。

    Rust的开发团队表示,尽可能广泛地移植不是Rust的使命之一。 例如,尽管Rust在许多ARM体系结构上都可用,但是不能保证在低端硬件平台上将正式支持Rust。

    也就是说,应该为绝大多数常见的主流用例(即32位和64位Windows,Linux和MacOS)提供受支持的Rust构建。

    如果您打算在Windows上的Rust中进行开发 ,请牢记工具链。 Rust在Windows上支持两个工具链:

    • 本机Microsoft Visual C(MSVC)ABI
    • GCC链接器使用的Gnu ABI。

    由于Windows内置的几乎所有C / C ++软件仍然使用MSVC,因此您将希望在绝大多数时间使用MSVC工具链。 如果您需要GCC,则最有可能是与Windows中使用GCC构建的第三方库进行互操作。

    好消息是,Rust的工具链管理系统使您可以同时安装MSVC GCC工具链,并且可以逐个项目地在它们之间进行切换。

    Rust的编译目标之一是WebAssembly,这意味着您可以用Rust编写并部署到Web浏览器。 WebAssembly本身的边缘仍然很粗糙,Rust对它的支持也是如此。 但是,如果您有雄心壮志并且想让自己的手变得凌乱,请阅读 Rust和WebAssembly开发人员编写的书 ,其中详细介绍了将WebAssembly编译为Rust的过程。 本书包括一个简单项目的教程,一个用Rust开发并作为WebAssembly部署的Conway的《人生游戏》的实现。

    使用rustup开始您的Rust设置

    Rust提供了称为rustup多合一安装程序和工具链维护系统。 下载rustup并运行它; 它将获取Rust工具链的最新版本并为您安装它们。

    rustup维护的最关键的工具是:

    • rustup本身。 每当发布新版本的rustup或其他工具时,您都可以运行rustup update并自动rustup update所有内容。
    • rustc ,Rust编译器。
    • 货物,Rust的包装和工作区管理器。

    默认情况下, rustup从稳定通道安装Rust。 如果要使用beta或夜间版本,则必须安装这些通道(例如rustup install nightly ), 并将 Rust设置为默认使用它们( rustup default nightly )。 您也可以在编译Rust应用程序时手动指定要使用的通道 ,因此不必每次在项目之间移动时都设置和重置默认值。

    您还可以使用rustup安装和维护自定义工具链。 这些通常由非官方的第三方Rust版本用于不受支持的平台,因为这些平台通常需要自己的链接器或其他特定于平台的工具。

    锈更新 IDG

    rustup会将Rust工具链的所有部分更新为最新版本。 在这里,夜间工具链(具有尖端的语言和可能不稳定的语言组件)将与稳定版本分开进行更新。

    为Rust配置您的IDE

    尽管Rust是一种相对较新的语言,但它已经获得了许多常见IDE的强大支持。 开发人员Manuel Hoffman在areweideyet.com网站上维护着一个项目来跟踪这种支持的状态。

    通过称为Rust Language Server(RLS)的功能,使Rust能够很好地与IDE配合使用是其开发团队的明确目标。 RLS从Rust自己的编译器(而不是第三方解析器)提供有关代码的实时反馈。

    锈langserver IDG

    Rust的Language Server项目允许将实时反馈从Rust编译器提供给您正在使用的代码的IDE。 此处显示的Visual Studio Code具有对Rust语言服务器可用的一些最完整的支持。

    以下是支持Rust的IDE:

    创建您的第一个Rust项目

    Rust项目旨在具有一致的目录结构,其中代码和项目元数据以某种方式存储在其中。 代码存储在src子目录中,有关项目的详细信息存储在项目根目录中的两个文件中: Cargo.toml (项目的基本信息)和Cargo.lock (自动生成的依赖项列表)。 您可以手动创建该目录结构和元数据,但是仅使用Rust自己的工具来完成这项工作就容易了。

    提示: Rust的示例在线学习指南Rust提供了交互式代码示例,可以在浏览器中直接对其进行编辑和运行。 它涉及几乎所有主要的Rust概念,尽管在讨论中相对较晚地引入了一些更关键的概念,例如借用和生存期。

    Rust的Cargo工具可管理Rust项目以及它们使用的库或“库”。 要在其自己的目录中启动名为my_project的新Rust项目,请输入cargo new my_project (对于使用.Net Core的 C#开发人员,请考虑dotnet new命令。)新项目将显示在具有该名称的子目录中,以及基本项目清单( Cargo.toml文件)和项目源代码的存根。 ,位于src子目录中。

    创建新项目时,将在项目的src目录中自动创建一个main.rs文件。 该文件包含一个基本的“ hello world”应用程序,因此您可以通过编译和运行它来立即测试Rust工具链。

    “ hello world”应用程序的源代码:

    fn main() {
    println!(“Hello World!”);
    }

    要构建并运行它,请输入项目目录的根目录,然后键入cargo run 请注意,默认情况下,Cargo以调试模式构建项目。 要以发布模式cargo run --release ,请使用cargo run --release 二进制文件内置在项目的target/debugtarget/release子目录中,具体取决于您使用的编译配置文件。

    锈你好世界 IDG

    编译Rust项目时,将获取并自动编译其所有依赖项。 对于出现警告或错误的所有内容,都会显示详细的逐行反馈。

    使用Rust板条箱

    程序包管理是任何现代编程环境的关键部分。 为此,Rust提供了“ crates”,它们是打包成与Rust工具一起分发的第三方库。 您可以在Rust官方包注册表Crates.io中找到板条箱。

    如果您的项目依赖于特定的板条箱,则需要通过编辑项目的Cargo.toml文件来指定该板条箱。 执行此操作的标准方法是手动操作-即,直接使用文本编辑器直接编辑Cargo.toml 下次重建项目时,Rust自动获取任何需要的依赖项。

    提示:尽管这两个工具是非官方的第三方项目,但它们可以通过命令行更新cargo-edit-locally cargo-editcargo-edit-locally两个工具。

    当您构建依赖于外部包装箱的Rust项目时,默认情况下,Cargo在Crates.io上查找这些包装箱; 您不需要手动获取它们。 如果您需要不在注册表中托管的板条箱,例如私有存储库中的某些板条,您还可以通过URL而不是板条箱名称来引用项目中的板条箱。

    请注意,某些板条箱只会在Rust的夜间频道上安装和构建,因为它们使用其他频道中没有的实验功能。 如果您在发布频道上并尝试安装这样的箱子,则在编译本身失败之前,您不会收到任何警告。 板条箱文档通常提到是否需要夜间频道,因此在添加之前请仔细阅读,更不用说编译了。

    板条箱可以包含二进制文件。 有些是在Rust开发中使用的命令行工具。 其他是通用工具(例如ripgrep )。 要安装这些板条箱之一,只需键入cargo install <crate name> 这不是分发用Rust创建的二进制文件的唯一方法,但是它是Rust开发人员在涉及Rust工具的工作流中获取它们的便捷方法。

    将Rust交叉编译到另一个平台

    因为Rust支持多个工具链,所以即使在相同的Rust安装中,您也可以将Rust应用程序编译到目标操作系统和环境,该目标操作系统和环境与您要编译的目标操作系统和环境不同。

    这种交叉编译需要您正在使用的平台上与目标平台匹配的工具链。 有时,与在Windows上交叉编译到Linux或从Windows交叉编译到Linux一样,这涉及到的只有GCC链接器。 但是有时候,它更复杂。 例如,要交叉编译到MacOS ,您需要Xcode IDE库才能完成工作-cctools(Apple等效于binutils)和MacOS SDK。

    第三方工具提供了解决这些困难的一些方法:

    • 这样的工具之一就是Trust ,它是Travis CI和AppVeyor模板,可以自动发布Rust项目的二进制发行版。 尽管它需要使用Travis CI和AppVeyor服务,并且可以将项目托管在GitHub上,但它可以为Linux,Windows和MacOS构建。
    • Cross的另一个项目直接在64位x86 Linux主机上运行,​​但是提供了它的创建者所描述的“零设置”交叉编译功能,可以跨多种目标,包括64位Windows和MIPS。
    • crossbuild项目提供了一个多体系结构的Docker映像,可用于在所有三个主要平台之间交叉构建。

    From: https://www.infoworld.com/article/3234929/rust-tutorial-get-started-with-the-rust-language.html

    展开全文
  • Rust语言入门、关键技术与实战经验

    千次阅读 2019-03-23 11:53:25
    Rust语言入门、关键技术与实战经验 https://blog.csdn.net/paladinzh/article/details/88368608 2016-03-25 07:48唐刘0阅读85 编者按:高可用架构分享及传播在架构领域具有典型意义的文章,本文由唐刘在高可用...

    Rust语言入门、关键技术与实战经验

    https://blog.csdn.net/paladinzh/article/details/88368608

    2016-03-25 07:48 唐刘    0  阅读 85

    编者按:高可用架构分享及传播在架构领域具有典型意义的文章,本文由唐刘在高可用架构群分享。转载请注明来自高可用架构公众号「 ArchNotes 」。

    唐刘,PingCAP 首席架构师,现致力于下一代分布式数据库 TiDB、分布式存储 TiKV  的开发。开源爱好者,Go、Rust 等语言爱好者和实  践者。

    大家好,我是 PingCAP 的唐刘,今天很荣幸跟大家来分享一下 Rust 相关知识以及我们团队使用 Rust 的实战经验。

     

    为什么选择Rust

    首先来说说最近 Go 社区讨论比较多的事情,Dropbox 将底层的类 S3 服务改用 Rust 来重写了,一下子让 Rust 增加了很多知名度,谁叫 Dropbox 这种公司通常都是技术架构上面的风向标。大家普通关注的一个问题:

     

    为什么 Dropbox 不用 Go,反而用一门学习曲线比较陡峭的 Rust 来进行开发?

     

    其实这个问题也同样适用于我们,一个自认为 Go 经验非常丰富的团队,为什么不用 Go 反而要选择 Rust?

     

    介绍一下我们在做的事情。我们团队从事的是下一代分布式数据库的开发,也就是俗称的 NewSQL,整个理论基础基于 Google 的 F1 以及 Spanner,所以自然我们的 NewSQL 也是分成了两块,一个是无状态的 SQL 层,也就是现阶段已经开源出来的 TiDB(http://dwz.cn/2XZkSm),另一个就是分布式 KV 层,我们叫做 TiKV,预计会在4月份开源。

     

     

    TiDB 是使用 Go 编写的,熟悉 Go 的同学都应该知道,用 Go 来写分布式应用那是非常的快捷方便的,而且我们团队的成员都有非常深厚的 Go 编程经验,但是在决定做 TiKV 的时候,我们没有使用 Go,或者使用 C++,Java 这些更流行的静态语言,反而是选择了一门我们自身完全不熟悉的语言 Rust,Why?

     

    先来说说使用 Go 会遇到的问题:

     

    • GC,虽然 1.6 之后 Go 的 GC 已经改善的很好了,而且我们觉得以后会越来越好,但是对于一个对性能要求非常高的分布式应用,我们倾向选择一门没有 GC 的语言,这样在内存上面更加可控。

    • Cgo,TiKV 使用 RocksDB 作为其底层存储 engine,如果用 Go,我们需要使用 Cgo 来进行 RocksDB的调用,而 Cgo 对性能还是有比较大的损耗的。

     

    再来说说不选择 C++ 或者 Java,C++ 主要是大规模开发对整个团队要求非常高,而我们自己也觉得用 C++ 不可能 hold 住在短时间内做出产品,所以自然放弃。而 Java,我们团队没几个人精通 Java,也直接放弃了。

     

    所以,我们最终将目光落到了 Rust 上面,主要在于 Rust 有几个很 cool 的 feature,就是 type safety,memory safety 以及 thread safety,这个后续详细说明。

     

    Rust 的基础入门

    在 Rust 的官网上面,我们可以看到 Rust 的介绍,它是一门系统编程语言,性能好,同时在编译阶段就能帮你检测出内存,多线程数据访问等问题,保证程序安全健壮。

     

    也就是说,使用 Rust 写程序,如果能通过编译,你就不用担心类似 C++ 里面很多 memory leak,segment faut,data race 的问题了,但这一切都是有代价的。Rust 上手非常不容易,难度可以跟 C++ 媲美,如果是 Go,没准学习一个星期都能开始给项目贡献代码,但换成 Rust,可能一个月都还在跟编译器作斗争,研究为啥自己的代码编译不过。

     

    因为我不清楚大家有多少人接触过 Rust,所以这里列出来一些例子,让大家对 Rust 的语法有一个基本了解。

     

    首先就是最通用的 Hello world:

     

    (点击图片可全屏缩放图片)

     

    fn 是 Rust 的关键字,用来定义函数,函数名字是 main, println! 是一个 macro,在 rust style 里面,macro 都是在末尾使用“!”来表示的。

     

    我们接下来定义几个变量,下面就开始显示出 rust 跟其他语言的不一样的地方了:

     

    (点击图片可全屏缩放图片)

     

    上面我们声明了一个 u32 类型的变量,但是没有初始化,然后打印它的值,在一些语言里面,譬如 Go,会打印出 0,但是在 Rust 里面,这没法编译通过,编译器会提示:

     

    (点击图片可全屏缩放图片)

     

    上面的错误告诉我们使用了一个没有初始化的变量,我们先来初始化一下,变成这样:

     

    (点击图片可全屏缩放图片)

     

    上面我们首先定义了一个初始值为 0 的变量,然后改成 10 打印,编译,发现如下错误:

     

    (点击图片可全屏缩放图片)

     

    这次编译器告诉我们对一个 immutable 的变量进行了更改。在 Rust 里面,变量是分为 immutable 和 mutable 的,我们必须显示地定义这个变量到底能不能改动。我们使用 mut 关键字来告诉 Rust 这个变量是 mutable 的,如下:

     

    (点击图片可全屏缩放图片)

     

    这下就能正常编译了。

     

    通过上面一些简单的例子,大家应该对 Rust 有了一个初步的印象,更加详细的了解可以去参考官网。

     

    让 Rust 开发变 easy 的关键技术点

    前面在为什么选择 Rust 里面,我提到了因为 Rust 有几个很 cool 的特性,能让我们写出不容易出错的并发程序。而且我认为,只要理解掌握了这个关键点,用 Rust 进行程序开发就很 easy了。

     

    Type safety

     

    Rust 是一门严格要求类型安全的语言,在 C/C++ 的世界里面,我们可以无拘无束的进行类型转换,譬如:

     

    (点击图片可全屏缩放图片)

     

    这种在 C/C++  里面很常见的处理方式,在 Rust 里面是不被允许的,譬如:

     

    我们会得到如下编译错误:

     

    如果强制做这种内存转换,我们可以使用 unsafe,显示的告诉 Rust 这么做是不安全的,但是你别管了:

     

    (点击图片可全屏缩放图片)

     

    通常情况下面,Rust 是不允许写上面这样的代码的,所以它将 unsafe 的选择权显示的交给了程序员,而我们通过 unsafe 也能清晰的知道哪里是不安全的代码,需要注意的。

     

    Memory safety

     

    下面进入 Rust 最令人抓狂的一个关键点了。Rust 是能够保证程序的 memory  safety 的,那么是如何保证的呢?首先我们需要了解的是 Rust 里面 ownership 以及 move 的概念。

     

    Ownership + move

     

    在Rust里面,任何资源只可能有一个 ownership,譬如一个最简单的例子:

     

     

    这里我们使用 let 将一个 vector 给绑定到 a 这个变量上面了,我们就可以认为 a 现在是这个 vector 的 ownership。然后对于这个 vector 的 resouce,同一个时间只允许一个 ownership。我们来看下面这个代码:

     

    (点击图片可全屏缩放图片)

     

    在上面的例子中,我们将 a 赋值给了 b,同时继续打印 a[0] 的值,这个在大多数语言都没有任何问题的操作,在 Rust 里面,是会报错的,如下:

     

     

    为什么呢?在打印 a[0] 之前,我们进行了 let b = a 这样的操作,这个操作,在 Rust 里面叫做 move,含义就是把 a 对 vector 的 ownership 移交给了 b,a 放弃了对 vector 的 ownership。因为 a 已经对这个 vector 没有 ownership 了,自然就不能访问相关的数据了。

     

    ownership 和 move 的概念应该算是学习 Rust 第一个坑,我们也很容易写出如下代码:

     

    (点击图片可全屏缩放图片)

     

    这个代码照样是编译不过的,因为 do_vec 这个函数,a 已经将对 vector 的 ownership 给 move 了。

     

    所以通常我们只要看到 let b = a 这样的代码,就表明 a move 掉了 ownership 了,但有一个例外,如果a的类型实现了copy trait,let b =a 就不是move,而是 copy 了,下面的代码是能正常编译的:

     

     

    上面的代码里面,let b = a,a 并没有 move,而是将自己的数据 copy 了一份给 b 使用。通常基本的数据类型都是实现了 copy trait,当然我们也可以将我们自定义的类型实现 copy,只是就需要权衡下 copy 的性能问题了。

     

    Borrow

     

    前面我们举了一个 do_vec 的例子,如果真的需要在调用这个函数之后继续使用这个 vector,怎么办呢?

     

    这里我们就开始接触到了第二个坑,borrow。上面说了,move 是我给你了 ownership,而 borrow 则是我借给你这个 resource 的使用权,到时候还要还给我:

     

    (点击图片可全屏缩放图片)

     

    上面的例子中,我们在参数里面使用了 & 来表示 borrow,do_vec 这个函数只是借用了 a,然后函数结束之后,还了回来,这样后续我们就能继续使用 a 了。

     

    既然 borrow,当然就能用了,于是我们就可能写这样的代码:

     

    然后 Rust 又华丽丽的报错了,输出:

     

    因为我们的 borrow 只是 immutable 的 borrow,并不能改数据。在前面我们也提到过,如果要对一个变量进行修改,必须显示的用 mut 进行声明,borrow 也是一样,如果要对一个 borrow 的东西显示修改,必须使用 mutable borrow,也就是这样:

     

    (点击图片可全屏缩放图片)

     

    borrow 还有 scope 的概念,有时候我们写这样的代码:

     

    (点击图片可全屏缩放图片)

     

    发现编译器又报错了,输出:

     

     

    因为我们之前用 y 来对 x 进行了mutable 的 borrow,但是还没还回去,所以后面 immutable的 borrow 就不允许。这个我们可以通过 scope 来显示的控制 mutable 的生存周期:

     

     

    (点击图片可全屏缩放图片)

     

    这样在 printIn! 进行 immutable 的 borrow 的时候,y 这个mutable 的 borrow 已经还回来了。

     

    一个变量,可以同时进行多个 immutable 的 borrow,但只允许一个 mutable 的 borrow,这个其实跟 read-write lock 很相似,同时允许多个读锁,但一次只允许一个写锁。

     

    Lifetime

     

    在 C++ 里面,相信大家对野指针都印象深刻,有时候,我们会引用了一个已经被 delete 的对象,然后再次使用的时候就 panic 了。在 Rust 里面,是通过 lifetime 来解决这个问题的,不过引入了 lifetime 之后,代码看起来更丑了。一个简单的例子:

     

    (点击图片可全屏缩放图片)

     

    我们定义了一个 struct,里面的 field b 是对外面一个 u32 变量的引用,而这个引用的 lifetime是 ’a。使用 lifetime 能保证b 引用的 u32 数据的生存周期一定是大于 A 的。

     

    但是在上面的例子中,我们在一个 scope 里面,让 b 引用了 c,但是 c 在 scope 结束之后就没了,这时候 b 就是一个无效的引用了,所以 Rust 会编译报错:

     

    Thread safety

     

     

    前面我们提到,Rust 使用 move,borrow 以及 lifetime 这些机制来保证 memory safety,虽然这几个概念不怎么好理解,而且很容易大家写代码的时候就会陷入与编译器的斗争,但是我个人觉得只要理解了这些概念,写 Rust 就不是问题了。

     

    好了,说完了 memory safety,我们马上进入 thread safety了。大家都知道,多线程的程序很难写,有且稍微不注意,就会出现 data race 等情况,导致数据错误,而且偏偏这样的 bug 还能难查出来。

     

    譬如在 Go 里面,我们可以这样:

     

    (点击图片可全屏缩放图片)

     

    上面的例子很极端,大家应该也不会这面写代码,但实际中,我们仍然可能会面临 data race 的问题。虽然 Go 可以通过 --race 打开 data race 的检查,可通常只会用于 test,而不会在线上使用。

     

    而 Rust 则是在源头上面完全让大家没法写出 data race 的代码。首先我们先来了解 Rust 两个针对并发的 trait,Send和 Sync:

     

    •  Send

      当一个类型实现了 Send,我们就可以认为这个类型可以安全的从一个线程 move 给另一个线程去使用。

    • Sync

      当一个类型实现了 Sync,我们就可以认为这个类型可以在多线程里面通过 shared reference(也就是 Arc)安全的使用。

     

    上面的概念看起来比较困惑,简单一点就是如果一个类型实现了Send + Sync,那么这个就能在多线程下面安全的使用。

     

    先来看一个简单的例子:

     

    (点击图片可全屏缩放图片)

     

    上面就是一个典型的多线程 data race 的问题了,Rust 是编译不过的,报错:

     

     

    前面说了,我们可以通过 Arc 来保证自己的类型在多线程下面安全使用,我们加上 Arc。

     

     

    (点击图片可全屏缩放图片)

     

    现在我们的 vector 能多线程访问了,但是仍然出错:

     

    (点击图片可全屏缩放图片)

     

    因为我们不光是要多线程 read,而且还需要多线程去 write,自然 Rust 不允许,所以我们需要显示的进行加锁保护,如下:

     

    (点击图片可全屏缩放图片)

     

    所以,如果我们要对一个数据进行安全的多线程使用,最通用的做法就是使用 Arc<Mutex<T>> 或者 Arc<RwLock<T>>进行封装使用。

     

    当然,除了 Arc + Lock 之外,Rust 还提供了 channel 机制方便进行线程之间的数据通讯,channel 类似于 Go 的 channel,一端 send,一端 recv,这里就不详细说明了。

     

    这里在提一点,因为在 Rust 里面,对于多线程使用的数据,我们必须明确的进行 lock 保护,这个编程风格直接带到了后来我们写 Go 。在 Go 里面,我以前写 lock,通常会这样:

     

    (点击图片可全屏缩放图片)

     

    使用一个 mutex 变量 m 来对数据 v1,v2 进行多线程保护,但这种写法其实很容易就容易忘记这个 lock 到底要保护哪些数据。自从受 Rust 影响了之后,我就喜欢写成这样了:

     

    (点击图片可全屏缩放图片)

     

    上面就是显示的将 lock 以及需要保护的数据放到一个 struct 里面,大家一看代码就知道这个 lock 要保护哪些数据了。

     

     

    Rust 开发实战经验

    前面说了是 Rust 的一些基本 feature,这里开始说下我们项目中用 Rust 的相关经验。

     

    Cargo

     

    如果要用 Rust进行项目开发,首先就需要了解的就是 Cargo,Cargo 是 Rust 一个构建以及包管理工具,现在应该已经成了 Rust 开发项目的规范了。Cargo 的使用还是很简单的,大家可以直接去看浏览官网 (https://crates.io/)。

     

    quick_error!

     

    最开始,我们在写 C 程序的时候,通过定义不同的 int 返回值来表示一个函数是不是有 error。然后到了 C++,我们就可以通过 expection 来处理 error 了。不过到底采用哪种标准,都是没有定论的。

     

    到了 Go,直接约定了函数最后一个返回参数是 error,官方还有一篇 blog 来介绍了 Go 的error handling (http://blog.golang.org/error-handling-and-go)。

     

    在 Rust 里面,error 也有相应的处理规范,就是 Result,Result 是一个 enum,定义是这样的:

     

     

    (点击图片可全屏缩放图片)

     

    也就是说,我们的函数都可以返回 Result,外面去判断,如果是 Ok,那么就是正确的处理,如果是 Err 则是错误了。

     

    这里有篇 error handling 的详细说明 (https://doc.rust-lang.org/book/error-handling.html)。

     

    通常大家都会按照上面的规范来处理 error,也就是定义自己的 error,实现其他 error 转成自己 error 的 from 函数,然后在使用 try! 在代码里面简化 error 的处理。

     

    但是很快我们就发现了一个很严重的问题,定义自己的 error,以及将其他 error 转成我们对应的 error 是一件非常冗余复杂的事情,所以我们使用 quick_error!(http://dwz.cn/2XZpNo)来简化整个流程。

     

    Clippy

     

    当我第一次写 Go 代码的时候,我对 Go 的 fmt 印象特别深刻,以后再也不用担心编码风格的争论了,Rust 也有相关的 rust fmt,但是更令我惊奇的是 Rust 的 Clippy 这个工具。Clippy 已经不是纠结于编码风格了,而是直接告诉你代码要这么写,那么写不对。

     

    一个很简单的例子:

     

     

    (点击图片可全屏缩放图片)

     

    这个代码是能编译通过的,但是如果我们打开了 Clippy 的支持,直接会提示:

     

    (点击图片可全屏缩放图片)

     

    也就是告诉你,别用 to_string,用 to_owned。

     

    我们都知道,要开发一个高性能的网络服务,通常的选择就是 epoll 这种基于事件触发的网络模型,在 Rust,现阶段成熟的库就是 MIO。MIO是一个异步 IO 库,对不同的操作系统提供了统一抽象支持,譬如 Linux 下面就是 epoll,UNIX 下面就是 kqueue,Windows 下是 IOCP。不过 MIO 为了统一扩平台,在一些实现上面做了妥协。

     

    MIO

     

    譬如在 Linux 下面,系统直接提供了 event fd 的支持,但 MIO 为了兼容 UNIX,使用了传统的 pipe 而不是 event fd 来进行 event loop 的 awake 处理。

     

    这里在单独说下 MIO 提供的另一种线程通讯 channel 机制,虽然我们可以用 Rust 自己的 thread channel 来进行线程通讯,但如果引入 MIO,我更喜欢用 MIO 自己的 channel,主要原因是采用的 lock free queue,性能更好,但有 queue size 限制问题,发送太频繁但接受端没处理过来,就会造成发送失败的问题了。

     

    Rust 语言的美中不足

    我们团队已经使用 Rust进行了几个月的开发,当然也遇到了一些很不爽的地方。

     

    首先就是库的不完善,相比于 Go,Rust 的库真的太不完备了。我觉得现阶段 Rust 仍然没有大规模的应用,lib 不完备占了很大一个原因。

     

    TiKV 是一个服务器程序,自然就会涉及到网络编程,官方现阶段的 net mod 里面,只有 block socket 的支持,这个完全没法用来开发高性能网络程序的。幸好有 MIO,但光有 MIO 是远远不够,在 Go 里面,我们很方便的使用 gRPC 来进行 RPC 的编写,但是在 Rust 里面,我觉得还得在等很长一段时间,看能不能有开源的实现。

     

    再来就是在 Mac OS X 下面,panic 出来的堆栈完全没法看,没有 file 和 line number 的信息,根本没法方便的查 bug。

     

    当然,毕竟 Rust 是一门比较新的语言,还在不断的完善发展,我们还是很有信心它能越来越好的。

     

    Q & A

    1. Go 的 Cgo 在效率上面与 Rust FFI 有啥区别?

    唐刘:我自己写过一个简单的测试,就是都循环调用 Snappy 的 MaxCompressedLength 这个函数 10000 次,发现 Rust 的 FFI 比 Go 的 Cgo 要快上一个数量级,虽然这么测试不怎么精确,但至少证明了 Rust 的 FFI 性能更好。

     

    2. 在官方的介绍中,Rust 的首选平台是 Windows, 那是否可以生成 dll. 你们的 IDE 用的是什么?

    唐刘:我没用过 Windows,所以也不知道怎么生成 dll,开发 Rust 的 ide 也就是常用的那几个,譬如 Vim, Emacs, Sublime 这些,反正都有 Rust 的插件支持。

     

    3. Rust 调用 C 的库方便吗?

    唐刘:Rust 通过 FFI 调用 C,很方便的,这里有相关文档 (https://doc.rust-lang.org/book/ffi.html),但毕竟这涉及到跨语言,代码写起来就不怎么好看了。而且 FFI 需要 unsafe保护,所以通常我们会在外面在 wrap 一层 Rust 的函数。

     

    4. Rust 性能指标如何?

    唐刘:Rust 性能这个不怎么好衡量,因为我们只是在一些特定的环境下面做过跟 Go 的对比,譬如 Cgo vs FFI 的测试,这方面性能是比 Go 要好的。另外,Rust 是一门静态语言,没有 GC,所以我觉得他的性能不会是问题,不然 Dropbox 也不可能将类 S3 的应用用 Rust 写了。

     

    5. Rust 周边生态如何? 如跟常用的 DBSQL/MQ 等第三方系统的 binding?

    唐刘:Rust 的生态只能呵呵来形容了,跟 Go,Java 这些的没法比。虽然有常用的 MySQL 等的 binding,但我没用过。主要原因在于官方的网络 IO 是同步的,所以必须借助多线程来进行这些处理,而用 MIO 这种异步模式,大家也知道写出来的代码逻辑切割很厉害。所以通常我们也不会拿 Rust 来做这些复杂的业务系统开发,感觉还是 Go 更合适。

    展开全文
  • Rust语言入门练习1

    2020-06-08 21:44:55
    Rust语言试图解决c++的这个内存管理的弊端,但是处于对效率及底层处理的要求,放弃了c#和java甚至go那样基于垃圾回收器的处理方式,而是采用了全新的一套处理方式,很有意思。这是个兼顾效率和安全的编程语言,不经...
  • 原创 洋芋 Rust语言中文社区 前天 这是一篇博文翻译,略有删减,整理代码方便统一阅读,Github链接:https://github.com/lesterli/rust-practice/tree/master/head-first/async-primer。 原文在2月11号的【Rust日报...
  • rust 编程入门 开发运维 (DevOps) Rust is a systems programming language that you can use to write applications with high performance. Rust is being used by some of the top companies like Dropbox and ...
  • Rust 语言新人入门指南

    万次阅读 多人点赞 2019-09-26 14:58:08
    首先,学习 Rust 不能急躁。如果你抱着之前 1 天上手 Python, 2 天入门 Go 的经验和优越感来学习 Rust 的话,你可能会遭遇严重的失败感。如果你来自 ...
  • rust 编程入门Rust has been voted Stack Overflow’s most loved programming language for five years in a row. This article will tell you why Rust is awesome. Rust已连续五年被评为Stack Overflow最受欢迎的...
  • rust 入门

    2021-02-23 15:22:00
    rust 语言入门1.数据类型1.1 整数型1.2 浮点类型1.3 字符型2 所有权 //TODO2.1 所有权转移2.2 只读变量2.3 借用 borrowing2.3.1 所有权回收2.3.2 所有权借用2.3.3 可变借用 borrowing mutableend 智能指针 //TODO 1....
  • rust 入门 “所有文档,工具和社区都是很棒的-您拥有成功编写Rust代码的所有工具。” Yelp基础架构工程师Antonio Verardi 那么,当所有这些都提供给您时,为什么还要犹豫学习一种新的编程语言呢? 现在轮到您...
  • 五分钟入门rust语言

    千次阅读 多人点赞 2020-01-15 19:11:30
    2015年5月15日,Rust编程语言核心团队正式宣布发布Rust 1.0版本,之后连续4年,在Stack Overflow开发者「最受喜爱编程语言」评选中获得第一名。 2019年7月4日,社交网络巨头Facebook联合其他100个行业巨头,对外宣布...
  • 使用Cargo入门rust语言

    2016-02-02 16:47:49
    rust语言是mozilla公司发布的一门系统级编程语言,据说目的是能够代替C语言。 没错,这个公司一直在搞操作系统,现在搞了一门写操作系统的语言。 这里主要说一下安装rust后怎么搞。我的是win8系统,用的是gitbash...
  • 小白必备!Rust 编程语言入门教程

    千次阅读 2018-04-18 15:57:59
    都喜欢或希望使用 Rust 语言进行开发。 这个数字真是令人难以置信! 那么 Rust 有什么益处呢? 今天,我们就来了解一下 这种类似 C 的语言的精彩亮点, 并演示为什么它是您一定要学习的语言。首先,我们来快速...
  • 本文以实例为导向,讲解 Rust 这门语言,适合有一定其他面向对象语言基础的人员快速入门。 本文将讲解如下内容: - Hello World 从头起 - 各种类型各种算 - 各式流程来控制 - 数组集合一锅出 - 找些对象侃一侃 ...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 247
精华内容 98
关键字:

rust语言入门