rust

对比 rust 几种数据结构占用内存和插入速度,插入一亿条数据。

老子叫甜甜 提交于 2020-08-11 04:02:31
硬件:mbp 2019 编译参数:cargo run --release 插入 i32 条数: 100,000,000 结论 HashMap<i32,i32> 1.3G, 13s BTreeMap<i32,i32> 1.98G, 10s HashSet<i32> 650M, 13s Vec<i32> 381M, 0.27s 可以看出,Vec<i32> 没有额外的消耗,HashSet, HashMap, BTreeMap 额外消耗也很小。 代码 use std::convert::TryInto; use std::collections::{HashMap, BTreeMap, HashSet}; fn main() { // let mut a = HashMap::new(); // 1.3G, 13s // let mut a = BTreeMap::new(); // 1.98G, 10s // let mut a = HashSet::new(); // 650M, 13s let mut a = Vec::new(); // 381M, 0.27s // 1亿 条 let start = std::time::Instant::now(); for i in 0..100_000_000 { a.insert(i); // a.insert(i, i); }

Rust二叉元树的深度

半城伤御伤魂 提交于 2020-08-10 22:14:42
二元树的深度 题目:输入一棵二元树的根结点,求该树的深度。 从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 分析:这道题本质上还是考查二元树的遍历。 //==================================二元树的深度 // 错误的深度入口程序 // 这个是错的!留下来单纯是希望记得自己犯过的错误 // 有时候生活就是一路犯错掉坑走过来的。你的回头看看那一路走来的痕迹,思考一下,但是一定不要回头走! fn deep_main(){ let n: Node = make_tree(); let deep: i32 = deep(&n, 1); println!("deep :: {:?}", deep); } // 正确的深度入口程序 fn deep_main1(){ let n: Node = make_tree(); let deep: i32 = deep1(&Some(Box::new(n)), 0); println!("deep11111 :: {:?}", deep); } /*节点结构*/ #[derive(Debug)] struct Node { pid: isize, id: isize, name: String, left: Option<Box<Node>>, right: Option<Box

Why isnt Send implemented for a struct containing Arc?

こ雲淡風輕ζ 提交于 2020-08-10 20:13:09
问题 I'm using a crate to interact with Postgres with simply writing sql queries by hands (Diesel seems for my simple case) and got stuck about the multithreaded access to the database client. Here is the code: use postgres::Client; pub struct Database{ connection: Arc<Client> } impl Database { pub fn from_config(url: &str) -> Database { //... } } fn main() { let url: String = //... let db = db::Database::from_config(&url); let db_ref = Arc::new(db); consume(future(Arc::clone(&db_ref))); // <-----

Lifetime parameter problem in custom iterator over mutable references

寵の児 提交于 2020-08-10 20:00:31
问题 I'd like to implement a custom Iterator like below, but cannot solve reference problem. use itertools::Product; use std::ops::Range; struct Iter2DMut<'a, T: 'a> { data: &'a mut [T], shape: (usize, usize), idx_iter: Product<Range<usize>, Range<usize>>, } impl<'a, T: 'a> Iterator for Iter2DMut<'a, T> { type Item = &'a mut T; fn next(&mut self) -> Option<Self::Item> { if let Some((i, j)) = self.idx_iter.next() { Some(&mut self.data[i + self.shape.0 * j]) } else { None } } } and get the following

more on reimplementing c++ timerqueue in rust

穿精又带淫゛_ 提交于 2020-08-10 19:18:23
问题 continuing this saga recoding a c++ task queue in rust. Is futures the right abstraction? I have worked out how to store the function calls in a vector (I am ignoring all the set, sorting,... stuff for now). Lets just put some requests into a collection and get them run an a different thread. so I have pub struct TimerQueueItem { when: Instant, name: String, what: QIFunc, } type QIFunc = Box<dyn Fn() -> ()>; struct TimerQueue { queue: Vec<TimerQueueItem>, } I can put these in a vector and

more on reimplementing c++ timerqueue in rust

北慕城南 提交于 2020-08-10 19:18:13
问题 continuing this saga recoding a c++ task queue in rust. Is futures the right abstraction? I have worked out how to store the function calls in a vector (I am ignoring all the set, sorting,... stuff for now). Lets just put some requests into a collection and get them run an a different thread. so I have pub struct TimerQueueItem { when: Instant, name: String, what: QIFunc, } type QIFunc = Box<dyn Fn() -> ()>; struct TimerQueue { queue: Vec<TimerQueueItem>, } I can put these in a vector and

Deno 1.0 发布:为 JavaScript 和 TypeScript 提供安全运行时环境

本秂侑毒 提交于 2020-08-10 16:35:20
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 经过了为期 2 年的开发,Deno 终于在 2020 年的 5 月份完成了 1.0 版本。其官方网站宣称,Deno 为 JavaScript 和 TypeScript 提供了一个安全的运行时环境。听起来是不是和 Node.js 类似?没错,就是这样,因为 Deno 是由 Node.js 的原班人马开发的。Ryan Dahl(Deno 和 Node.js 作者)之前发表过一篇文章——“关于 Node.js 最让他后悔的 10 件事”。为了解决文章中提到的问题,他创造了 Deno。和 Node.js 一样,Deno 可以在 V8 引擎上运行 JavaScript,TypeScript 和 WebAssembly 应用。对于应用开发者来说,相对于 Node.js,在使用 Deno 开发时有些地方是需要注意的。 在模块方面,Node.js 是二进制模块化文件,而 Deno 是单个二进制文件应用。它没有使用像 NPM 那样复杂的依赖管理解决方案。取而代之的是,当开发人员需要定义依赖关系时,只需要在源码中直接使用 URL 即可。截至目前,已经大约有超过 500 个第三方的 Deno 模块可以供使用。看看这种方式是否可以在企业应用中进行推广,将是一件很有趣的事情。因此,Deno

Java收入不再最低,Python被TypeScript击败,2020全球开发者调查报告出炉

北慕城南 提交于 2020-08-10 11:58:11
Stack Overflow 2020 年度全球开发者调查报告出炉。报告显示,JavaScript 连续八年成为最常用的编程语言,而在最受开发者喜爱的编程语言榜单中,Python 排名第三,较去年下降一位,被 TypeScript 超越。另一值得关注的结果是,Java 语言的薪酬收入不再是最低了。 机器之心报道,参与:魔王、杜伟。 近日,Stack Overflow 发布了 2020 年度全球开发者报告。这是 Stack Overflow 发布的第十次年度开发者调查结果,在今年 2 月份有将近 65000 名开发者参与了此次调查。 与 2018 年 的 10 万参与者和 2019 年 的 9 万参与者相比,这次调查的参与者数量出现下降。Stack Overflow 表示「今年,我们不打算成为规模最大的调查,而是想使此次调查更具代表性,能够代表全球各地程序员的多样性。」 这次调查涉及开发者基本情况、技术、工作和社区多个方面。机器之心选取了该调查报告的核心内容进行介绍,完整报告参见以下链接: 报告地址: https:// insights.stackoverflow.com /survey/2020#community 调查结果概览 在过去五年的最受开发者喜爱的技术榜单中,Python 语言的排名持续上升。但今年 Python 被 TypeScript 击败,从去年的第二名掉到了第三

Python 为什么没有 main 函数?为什么我不推荐写 main 函数?

十年热恋 提交于 2020-08-10 05:32:05
毫无疑问 Python 中没有所谓的 main 入口函数,但是网上经常看到一些文章提“Python 的 main 函数”、“建议写 main 函数”…… 有些人是知情的,他的意图可能是模仿那些正宗的 main 函数,但还有不少人明显是被误导了(或自己误解了),就写出来很累赘的代码。 本期“Python 为什么”栏目来聊聊 Python 为什么没有 main 函数? 在开始正题之前,先要来回答这两个问题: 所谓的 “main 函数”是指什么?为什么有些编程语言需要强制写一个 main 函数? 某些编程语言以 main 函数作为程序的执行入口,例如 C/C++、C#、 Java、Go 和 Rust 等,它们具有特定的含义: main 函数名是强制的,也就是要求必须有一个 main 函数 main 函数最多只能有一个,也就是说程序的入口是唯一的 语法格式有一定的要求,具有相对固定的模板 为什么要强制一个 main 入口函数呢? 这些语言是编译型语言,需要把代码编译成可执行的二进制文件,为了让操作系统/启动器找到程序的起点,所以要约定这一个函数。简单地说,就是在一大堆代码里,需要定义一个显著的可用于执行的开头。 不难看出,main 函数是那些语言中重要而不可缺的有机组成部分。 然而,我们再来看看 Python,情况就大不相同了。 Python 是解释型语言,即脚本语言,运行过程是从上往下

.NET 异步详解(更新)

萝らか妹 提交于 2020-08-10 05:05:13
前言 博客园(cnblogs.com)中有很多关于 .NET async / await 的介绍,但是很遗憾,很少有正确的,甚至说大多都是“从现象编原理”都不过分。 最典型的比如通过前后线程 ID 来推断其工作方式、在 async 方法中用 Thread.Sleep 来解释 Task 机制而导出多线程模型的结论、在 Task.Run 中包含 IO bound 任务来推出这是开了一个多线程在执行任务的结论等等。 看上去似乎可以解释的通,可是很遗憾,无论是从原理还是结论上看都是错误的。 要了解 .NET 中的 async / await 机制,首先需要有操作系统原理的基础,否则的话是很难理解清楚的,如果没有这些基础而试图向他人解释,大多也只是基于现象得到的错误猜想。 初看异步 说到异步大家应该都很熟悉了,2012 年 C# 5 引入了新的异步机制: Task ,并且还有两个新的关键字 await 和 async ,这已经不是什么新鲜事了,而且如今这个异步机制已经被各大语言借鉴,如 JavaScript、TypeScript、Rust、C++ 等等。 下面给出一个简单的对照: 语言 调度单位 关键字/方法 C# Task<> 、 ValueTask<> async 、 await C++ std::future<> co_await Rust std::future::Future<>