自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(128)
  • 收藏
  • 关注

原创 6.1儿童节 | 静待花朵绽放

SPRING六月天你看,绿了芭蕉,红了樱桃美丽的六月伊始,迎来了孩子们的节日。一组有趣的数据,带你聆听孩子们的心里话。愿祖国的每一株花朵,都能在理解与关爱中喜悦绽放!“世上只有妈妈好有妈的孩子像块宝”360儿童手表发布的国内首份《儿童成长状况大数据报告》显示:在全部家长中,妈妈与孩子通电话的占比最高,为55.9%,超过了包括父亲在内的家庭成员总和。除此以外,送孩子上学的家长...

2021-06-01 20:02:12 285

原创 当心!你可能不经意间泄露了隐私数据

​当你注册一个新的网站或者APP,你是否知道自己的个人信息已经暴露?当你面对人脸识别或者开通各类权限,你是否会想到个人数据已经被盗取?虽然“美国棱镜窃听计划”、Facebook数据泄密此类重大数据安全事件已经离我们很遥远了,但“数据泄露”、“数据滥用”、“侵犯隐私”等依旧是近几年的活跃字眼,仍然是大众重点关注的话题。今天我们就来看看这两年国内发生的一些数据泄露、数据滥用事件,希望大家看完后可以加强自我防护意识。人脸识别频频引发“数据泄露”风波自人脸识别兴起以来,刷脸支付、刷脸安检、.

2021-05-25 19:37:06 1033

原创 关注流浪猫:从我们出发

前言街边,巷口,小区里……如今,以猫和狗为主的流浪动物在我们的生活中随处可见。图片来源:海数据实验室设计团队或许我们会觉得猫猫只要不伤害自己,晃悠在视野可见的各处也无妨。但是,对于猫咪本身而言,成为流浪动物对它们本身的伤害是巨大的。对大自然而言,猫咪的泛滥,会严重破坏生态平衡,威胁生态安全。图片来源:海数据实验室设计团队随着流浪猫数量的快速增长,关注流浪猫问题,已经刻不容缓!流浪猫的呼唤我们时常在小红书,抖音,b站等平台上看到各式各样的网红猫,生活优渥,...

2021-05-25 19:32:56 1286

原创 跨学科随笔系列:AI不会取代教师 而是弥补缺失

开门见山,AI与人类教师的关系是合作互补,不存在任何目的层面的取代或是对立,与计算机不会取代教师教学是一个道理。曾几何时,不少人提起人工智能,也就是所谓的AI,又开始一副杞人忧天之态,AI是否真的要把人类取代了?!于是乎又掀起了一轮新而不新的焦虑。当然这并不新鲜,冷饭时不时都要炒一炒的,毕竟什么都是可以兜售的。排除媒体故意挑事的因素和保守主义者的有意扭曲,最大的问题还是大众对于AI本身的认知程度还是偏低,亟待科普。再者,有关类似的群体焦虑,可以查查历史或者古旧的新闻资料,不论是在几次工业革命..

2021-05-15 20:43:09 247

原创 疯狂成长的深度学习

【神经网络系列】疯狂成长的深度学习(二)在上一篇神经网络系列的文章中,我们回顾了一些深度学习初期的经典成果,包括感知机、BP网络、CNN、RNN及它们的一些衍模型,其实这些网络也可以统一归类为有监督学习。有监督学习,是从有标记的训练数据中推导出预测函数,主要用于数据标记、分类器分类、数值预测等。既然有有监督,那也一定有无监督,按照有监督学习的定义,无监督学习就是从无标记的训练数据中推断结论,通常是寻找数据隐藏的结构特征。相比来说,缺少训练指导的无监督学习在泛化性上更好,但它的学习通常依赖于大量的数据

2021-05-15 20:25:05 174

原创 数据模型思维:多模型思考者(6):智慧的层次(下)

上篇谈及了一种智慧层次的构架,其实这也是一种模型,而且是一种囊括了多模型的模型。我想强调的是,对于这种模型,显然可以拓展和延伸,随着我们讨论的深入,一种又一种演进的趋势会逐步明朗。而这篇,首先还是在上篇框架的基础上进行讨论。那么按照上篇结尾的计划,我们开始本篇的内容。有关2008年的金融危机存在多种解释:太多的各国投资, 过度杠杆化的投资银行, 缺乏对抵押贷款审批过程的监督, 在住房的消费者中的侥幸心理, 金融工具的复杂性, 对风险的误解, 贪婪的银行家早就知道泡沫的存在,把灾难寄望

2021-05-15 20:17:06 226

原创 数据模型思维:多模型思考者(5):智慧的层次(上)

既是诗人,又是剧作家的T. S.Eliot,曾经说过:“Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?”他以追问的方式在叹息:人们在知识中丢失了智慧,又在信息中丢失了知识。以此类比,可以再追问一下,Where is the information we have lost in all this data?这意味着,人们在数据中又丢失了信息。而以上所谈及的..

2021-05-06 21:04:19 358

原创 高雅有趣的Wolfram Mathematica导入篇:绘声绘色的程序语言

开场白说起Wolfram Mathematica,也就是在数学界大名鼎鼎而又高冷高深的Mathematica,其与Maple和MATLAB齐名,网络上对这三种数学软件的介绍和比较文章,并不算少,用一句套路的话做结尾就是,三者各有千秋,都不如python等程序语言灵活。在本系列的各篇章中,无意于笔头争论,而在于用鲜活的实例表明Wolfram Mathematica拥有其他语言并不具备的,但在人们的认知演进过程中又不可缺少的内容,而这些内容对于数学,数据和计算方面专业素养和品质的提升,尤为重要。如果你能够看

2021-05-06 20:32:59 690 2

原创 Rust在开发者和企业中的形象是

Rust,作为一门新兴的编程语言,已经连续五年程序夺得最受程序员喜爱的语言评比第一名了,它也受到越来越多企业的重视。为了更好的评估Rust的发展前景,我们搜集了一些开发者和企业对Rust的评价,看完本文,您将对Rust有一个更客观的认识。首先我们来看看Rust用户的评价。在2020Rust官方调研报告中,我们发现开发者们对Rust的信任度较高,有 83% 的受访者表示他们一直在使用该语言。稳定性是支持他们使用的一个重要原因。Rust 作为一种用于生产的语言而广受欢迎,其中,有 40% 的软件

2021-05-03 10:23:54 240

原创 初露锋芒的深度学习

【神经网络系列】初露锋芒的深度学(一)就在最近,Google Brain 高级研究科学家 Barret Zoph发帖表示他们设计了一个名为Switch Transformer的简化稀疏架构,直接将参数量从GPT-3的1750亿拉高到1.6万亿,并比之前最大的、由google开发的语言模型T5-XXL足足快了4倍。庞大的数据规模和成熟的并行式计算框架,让超大规模神经网络再次突破了训练瓶颈,也展现了数据时代中深度学习的无限可能。不敢说此次推出的“巨无霸”模型——Switch Transformer已

2021-04-29 21:06:33 367 2

原创 Rust能力养成系列之(42):内存管理:引用计数智能指针(下) 火星小海马

前言接着上篇的内容,我们继续Rc<T>有所忘怀的读者,可以翻出上一篇再看一下。上篇提及要修改一种结构。这里有一种做法:那就是可以把Rc<T>利用downgrade方法降级到Weak<T>类型,后者也可以通过upgrade方法升级到前者类型。downgrade的方法总是有效的。但当在Weak<T>上调用upgrade时,实际值可能已经被删除,在这种情况下,将得到一个None。这时在上篇末尾的代码中添加一个弱指针// rc_weak.r.

2021-04-29 21:02:02 221

原创 Rust能力养成系列之(41):内存管理:引用计数智能指针(上)

前言Rust的所有权规则(ownership rule)允许在给定的范围内一次只存在一个所有者。但是,在某些情况下,需要与多个变量共享类型。例如,在GUI库中,每个子小部件(child widget)都需要有一个对其父容器小部件(parent container widget)的引用,以便根据来自用户发起的的调整大小事件(resize event)对子小部件进行布局。虽然生命周期允许开发者通过将父节点存储为&'a parent来从子节点引用父节点,但它通常受到值的生命周期参数a的限制。一旦范围结

2021-04-25 21:28:50 419

原创 生or不生?都要有态度!

当代年轻人结婚生子现状分析据公安部数据显示,2020年新生儿登记数仅1003.5万,较2019年大幅下降约15%。2019年公安部新生儿登记数为当年统计局出生人口的80.5%,按此比例反推2020年出生人口或较2019年下降超200万。当前中国面临的生育形势出现三大特征:主力育龄妇女数量快速减少;生育率大幅下滑;生育意愿明显降低。图片来源:海数据实验室设计团队这一代年轻人为什么不愿意生孩子,一时成为了全社会热议的话题。关于结婚生子当代年轻人表示已看透人生...

2021-04-22 21:39:58 249

原创 Rust能力养成系列之(40):内存管理:智能指针

前言管理原始指针是充满风险的,开发人员在使用它们时需要消息处理很多细节。无意的误用会导致内存泄漏、悬置引用和双重释放(memory leaks, dangling references, and double frees)等问题。为了缓解这些问题,可以使用智能指针(smart pointer),这种方法起源自C++。Rust中有多种智能指针。之所以称为智能,是因为还有额外的元数据和与之相关的代码,会在创建或销毁时参照和执行这些数据和代码。当智能指针超出作用域时,能够自动释放底层资源,而这是智能指针的

2021-04-21 21:02:35 249

原创 Rust能力养成系列之(39):内存管理:生命周期收尾和指针初步

前言上篇结尾谈及了生命周期子类型,本篇就从这里开始。生命周期子类型(lifetime subtyping)我们可以指定生命周期之间的关系,以指定两个引用是否可以在同一位置使用。继续上一篇Decoder结构体的例子,可以在impl块中指定生命周期之间的关系,如下所示:// lifetime_subtyping.rsstruct Decoder<'a, 'b, S, R> { schema: &'a S, reader: &'b R}.

2021-04-20 19:34:21 205

原创 Rust能力养成系列之(38) 内存管理:生命周期深入

前言如上篇所谈,这几篇文字对生命周期做些条分析里的接受,这里先从生命周期参数开始。生命周期参数(lifetime parameter)对于编译器不能通过检查代码来确定值生存期的情况,需要在代码中使用一些注释来告知Rust。为了与标识符( identifiers)区分,生命周期注释需要用到一个单引号',也就是在字母前加上'。因此,为了让之前的示例代码使用参数进行编译,我们在StructRef上添加一个生命周期注释,如下所示// using_lifetimes.rsstruct So.

2021-04-17 22:12:15 249

原创 Rust能力养成系列之(37):内存管理:生命周期初步

前言在正式进入生命周期的介绍之前,这里先花一点篇幅谈一下基于借用的方法类型。基于借用的方法类型(Method types based on borrowing)借用规则规定了如何类型上定义固有方法(inherent methods),以及如何从特征中获取实例化方法。以下方法涉及如何接收实例,由最少限制到最多限制(least restricted to most restricted):&self方法:这些方法只对其成员具有不可变的访问权 &mut self方法:这些方.

2021-04-15 15:41:57 153

原创 Rust能力养成系列之(36):内存管理:借用

前言自本篇起,我把Rust的版本更新到最新的1.50.0稳定版目前这次版本的更新对我们教程的影响暂时不大,如果出现代码不兼容的情况,我会随时调整,那么开始本篇的内容。借用导论(Introduction to borrowing)借用(borrowing)的概念是为了规避所有权规则的限制。在借用下,不需要接受值的所有权,而只在需要时将数据出借。这是通过借用值来实现的,也就是说,获取一个值的引用。为了借用一个值,我们把&运算符放在变量前面,与C语言一样,&是运算符的地址。在.

2021-04-12 21:09:44 334

原创 ust能力养成系列之(35):内存管理:以特性复制类型

前言简言之,Copy 和Clone 特性提现了类型在代码中的复制方式。CopyCopy特性通常是为栈上类型而实现的(The Copy trait is usually implemented for types that can be completely represented on the stack),也就是说,该特性自身没有任何部分存在于堆(heap)上。那是因为,如果在堆上,复制将是一个非常繁重的操作,其必须沿着堆进行向下值复制,而这会直接影响=赋值操作符的工作方式。如果一个类型.

2021-04-11 21:05:05 167

原创 Rust能力养成系列之(34):内存管理:作用域 移动 与复制

前言接着上篇,在进一步讨论所有权之前,我们需要对作用域有一个简单的了解作用域(scopes)简介相信有些读者如果懂一点C语言的话,可能已经对作用域很熟悉了,但这里将在Rust的语境中进行一番重述,因为所有权与作用域的工作关系是不可分隔的。不难理解,作用域不过是变量和值存在的环境。被声明的每个变量都与一个作用域相关联。作用域在代码中由大括号{}表示。只要使用块表达式(block expression),也就是以大括号{}开始和结束的任何表达式,就都会创建一个作用域。此外,作用域可以相互嵌套;.

2021-04-05 21:46:25 319

原创 Rust能力养成系列之(33):内存管理:所有权初探

前言我们接下来要探讨的概念是Rust的内存安全性的核心原则及其零成本抽象原则,这写原则使Rust能够在编译时,检测到程序中的内存安全违规行为,并在相应的作用域结束时自动释放资源,等等。我们称这些概念为所有权、借用和生命周期(ownership, borrowing, and lifetimes)。在这三者中,以所有权为核心原则,而借用和生命周期是Rust类型系统的扩展,在代码的不同上下文中调整所有权原则,可以确保编译时内存管理。下面,就让我们来详细阐述一下这些概念。程序中资源的真正所有者(a tru

2021-04-05 21:41:11 129

原创 Rust能力养成系列之(32): 管理陷阱与内存安全

前言上篇末尾提及要做一点小小的吐槽,不负前言,我们花一点篇幅来谈一下内存管理中的各个坑,而后进入内存安全的内容。内存管理陷阱在使用垃圾收集器(GC)的语言中,处理内存的动作会从程序员那里抽离出来,开发者可以在代码中声明和使用这些变量,而至于如何释放这些变量的实现细节,则是不必担心的。另一方面,像C/ C++这样的低级系统编程语言,则不会向程序员隐藏这些细节,而且几乎不提供任何安全性保障。在这里,程序员被赋予了手动释放程序调用,并重新分配内存的伟大责任。现在,如果我们看看与内存管理相关的软件.

2021-04-01 12:11:40 344

原创 Rust能力养成系列之(31): 内存分配

前言在运行时,进程中的内存分配要么发生在栈(stack)上,要么发生在堆(heap)上。这是两种结构不同的存储位置,用于在程序执行期间存储相应的数值。在本节中,我们将看看这两种分配方法。栈用于保存短期(short-lived)值(这里的短期是就编译时间来看),并且是函数调用及其上下文关联的理想存储位置,函数返回后需要清除这些值。堆用于任何需要存在于函数调用之外的东西。我在在最早的三篇引入文中提到的,Rust默认进行栈分配,在这种情况下,创建并将绑定到变量的任何类型的值或实例都存储在栈中。而在堆上存储

2021-03-30 19:22:29 1487

原创 Rust能力养成系列之(30): 内存使用与管理

前言:程序进程使用内存的方式紧接上篇,我们知道一个进程有一块专门用于执行的内存块(memory chunk)。那么,进程是如何访问内存来执行其任务的呢?出于安全目的和故障隔离的考虑,不允许进程直接访问物理内存。相应的,会使用虚拟内存,操作系统利用一种称为pages的内存数据结构(在页表(page tables)中维护),并将其映射到实际的物理内存。进程必须向操作系统请求内存才能使用pages,其所到的是一个在内部映射到RAM中的物理地址的虚拟地址。出于性能方面的原因,该内存是按块(chunk)请求和处理

2021-03-28 20:58:43 855

原创 Rust能力养成系列之(25): 内存管理与安全

前言对于使用低级编程语言(low-level programming language)的人来说,内存管理是需要理解到位的基本概念。低级语言没有内置垃圾收集器(built-in garbage collector)之类的自动内存回收解决方案,不得已由程序员来管理程序所使用的内存。自然,了解程序中内存的使用位置和方式,可以使程序员构建高效和安全的软件系统。根据各种bug的调查报告,许多低级语言所写的软件bug是由于内存处理不当造成的。有时,这的确是程序员的错误;而另一些时候,则是其所使用的编程语言的不完善

2021-03-26 16:13:56 572 1

原创 Rust能力养成系列之(28): 多态性与特性对象

前言Rust通过实现特性的特殊形式的类型,可以允许多态性的真正形式(True polymorphism)。这些被称为特性对象(trait objects)。在解释Rust如何使用trait对象实现多态性之前,首先需要理解分派(dispatch)的思想。分派(dispatch)分派是一个从面向对象编程(object-oriented programming,OOP)范式中产生的概念,在称为多态性的特性之一的上下文下产生。在OOP的上下文中,当API是泛型类型的或接受实现接口的参数时,它必须在.

2021-03-24 21:15:21 479

原创 Julia数据科学一览:降维

前言相信大家对这个词并不陌生,降维(Dimensionality Reduction)是数据科学中非常重要的一种方法,意在用尽量少的数据结构体现最大的数据信息。相关方法很多,而且依然在不断发展中,本篇介绍三种方法。 PCA t-SNE umap 而这三种方法,后一种是前一种的进化。热身首先载入相关的包。using UMAPusing Makieusing XLSXusing VegaDatasetsusing DataFramesusing ...

2021-03-24 21:02:37 327

原创 Rust能力养成系列之(27): 标准库特性(下)

前言接着上篇的复数类型实例,搬砖继续。复数类型 下有经过上一篇的准备,我们看下现在的代码:// complex/src/lib.rsuse std::ops::Add;#[derive(Default, Debug, PartialEq, Copy, Clone)]struct Complex<T> { // Real part re: T, // Complex part im: T}..

2021-03-22 20:57:51 223

原创 Rust能力养成系列之(25): 标准库特性(上)

前言Rust的标准库有很多内置特性,许多非常神奇的语法都与trait有关。这些特性还提供了一个很好的基线,以此,相关crate的开发者可以为他们的库提供一个通畅的接口。在本节中,我们将探索标准库特性的一些抽象考量和便利之处,这些都统统增强了crate作者开发和用户使用的体验。复数类型 上这里,我们将从crate作者的角度进行探索,并创建一个支持复数(complex number)类型的库。这个例子很好地介绍了im的共同特点。如果你要创建自己的create,这个例子可以很好的介绍在开发过.

2021-03-20 16:54:48 516

原创 Rust能力养成系列之(25) :特性与泛型协作---特性绑定(下)

前言接着上篇内容谈特性绑定。泛型函数和实现区域(generic functions and impl blocks)的特性绑定如题,这才是使用特性绑定最常见的所在。为函数和泛型实现指定经绑定,代码示例如下所示:// trait_bounds_functions.rsuse std::fmt::Debug;trait Eatable { fn eat(&self);}#[derive(Debug)]struct Food&..

2021-03-18 20:12:04 177

原创 Rust能力养成系列之(24) :特性与泛型协作---特性绑定(上)

前言上两篇,我们涉及了特性的基本用法,这两篇开始把泛型与特性结合起来。概说现在我们已经对泛型(generics)和特性(traits)有了一个不错的理解了,以此可以探索如何将它们结合起来,在编译时可以表达更多关于interfaces的信息。考虑以下代码://trait_bounds_intro.rsstructGame;structEnemy;structHero;implGame{fnload<T>(&se...

2021-03-18 20:00:02 133

原创 023---Rust能力养成系列之第4章 :特性的用法与形式(下)

前言这里紧接着上篇的内容来说。特性用法特性也可以在其声明中说明依赖于其他特性,这就是所谓特性继承(trait inheritance),用法如下// trait_inheritance.rstrait Vehicle { fn get_price(&self) -> u64;}trait Car: Vehicle { fn model(&self) -> String;}struct...

2021-03-14 20:51:23 149

原创 Julia数据科学一览:线性代数和图像处理(1)

前言去年夏天的时候,写过一篇《为什么说Julia比Python高出一个境界》,我在里面着重介绍了Julia,作为一种专门为数据科学而生的语言,其在速度,效率,优雅,易学等方面优势明显而且前程远大。本系列,先不进入语言细节,而是采取专题形式,首先向读者展示一下Julia在数据科学一些重要方面的实践内容。如果你有Python或者R语言,以及一些数据分析和数据挖掘的基础,可以相对轻松阅读以下相关内容,并能够体会到Julia语言在这其中体现的价值。在数据科学一览之后,我会以此为基础,来带大家回溯一下这些专.

2021-03-13 20:34:40 712

原创 Rust能力养成系列之(22) :特性的用法与形式(上)

前言从多态性和代码重用的角度来看,一般推荐的做法是:将类型的共享行为和类型公共属性进行分离,相应代码区块保留针对自身的唯一方法。在这样做的过程中,要确保不同的类型通过这些公共属性相互关联,这就使得可以为参数编写更通用或更具包容性的API功能代码。如此的目的是:着我们可以使用具有这些共享属性的类型,同时又不受特定类型的限制。在Java或C#等面向对象(object-oriented)的语言中,程序接口(interfaces)传达了同样的思想,于其中可以定义许多类型都可以实现的共享行为。例如,与其使用多

2021-03-12 21:27:23 444

原创 数据模型思维:多模型思考者(2):多模型组合的实用价值

本篇前言继续上一篇的内容,再次重复一下重点,本系列文章集中火力的鼓励一种所谓的多模型思维(many-model thinking)方法,也就是说,强烈推荐应用一系列数据模型的组合来解释复杂现象。其核心思想是,多模型思维通过多种逻辑框架的综合作用来产生智慧,以满足可能遇到的各种现象描述和优化决策方面的需求。不同的模型着重体现了不同的因果关系和强度,放在一起时,可以直观其各自的视角所在,以及含义的相互重叠和交织之处。那么通过将多种模型有机组织而形成为的有效逻辑框架,可以衍生出对模型研究...

2021-03-11 23:09:17 241

原创 数据模型思维:多模型思考者(1):简单与否

本篇前言前两年间(2018-2019)有读过一本令我至今还颇为挂念的书,The Model Thinker: What You Need to Know to Make Data Work for You,这两三年的工作和学习中,时不时会用到书中思想和方法,身感其真正的价值。该书作者Scott E. Page,是美国密歇根大学的数学教授,这本书的写作缘起是在2005年,作者开始开设数据模型思维这门课程,受众是偏向人文社科和其他非数学背景的学生和学员,后来在MOOC上也亲自开设了类似...

2021-03-11 23:03:26 248

原创 Rust能力养成系列之(21) :泛型实现和使用

前言如题,我们看下泛型的实现和对应的用法。泛型实现(Generic implementations)我们也可以为泛型类型编写impl块,但由于额外的泛型类型参数,形式上会变得冗长。让我们在 Container<T> 结构体上实现一个new()方法,键入rustc 加文件名,编译一下。// generic_struct_impl.rsstruct Container<T> { item: T}impl Conta...

2021-03-09 18:47:18 466

原创 Rust能力养成系列之(20) :泛型初步

前言上一篇讲了类型系统及其重要性,本篇开始讲解泛型(Generic)。泛型概论从高级编程语言诞生之初,对力求完美的抽象能力的追求就一直是语言设计人员追求的目标。因此而催生了许多关于代码复用(code reuse)的想法。首先是函数,函数允许开发者将命名实体中的指令序列置于特定的区域,也就是函数体内,之后可以重复调用该实体,并可以选择为每次的调用,接收相应类型的任何参数。可见,函数的出现降低了代码的复杂性,增强了可读性。然而,函数也只能做到这一点了。比如有个函数avg,用来计算给定的整数.

2021-03-09 18:39:53 571

原创 Rust能力养成系列之(19) :类型系统和及其重要性

前言前面三章都是Rust的基础和 前提性内容,到了第4章,终于开始涉及Rust语言的核心内容了:类型(Types),泛型(Generics),特性(Traits, 讲真,翻译成特性还是有点问题,时下姑且用之)。Rust的类型系统是该语言的显著特征之一。在本章中,我们将详细讨论该语言的一些重要方面,如特性、泛型,以及如何使用它们来编写颇具表达力的代码。同时,还将探索一些有助于编写Rust语言风格代码的标准库特性。可以说,这一章非常有料。我们将涵盖以下主题:类型系统和重要性 泛型编..

2021-03-05 18:57:25 341

原创 Rust能力养成之(18)测试一个逻辑门模拟器

前言上一篇把Rust中的基准测试囫囵的介绍了一下,应该说初步的知识,姑且算作是具备了。在本篇中,我们会创建一个逻辑门的模拟器,而后进行测试。逻辑门模拟器的创建与测试这里通过运行cargo new logic_gates--lib来创建一个新项目。从实现与门and、异或门xor等函数的简单门(primitive gates)开始,为这些门编写单元测试。接下来,通过实现使用我们的简单门的半加法器之后编写集成测试。在这个过程中,还要为这个crate编写文档。首先,我们将...

2021-02-25 18:34:15 390

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除