从Rust想到C#】的更多相关文章

这个看起来是一个很小的问题,我们如果是在.NET里面的话,很简单地可以直接使用System.DateTime.Now获取到当前时间,还可以进行各种不同的计算或者输出.但是这样一个问题,在rust里面,还是费了我一些时间的.当然,我觉得这种折腾也是有些益处的,从中可以更好地理解rust的一些内部原理. 首先来看一下怎么做吧 rust默认自带的std库,里面并没有针对时间的功能,如果我们要处理时间(获取当前时间,或者计算两个时间的间隔等等)的话,需要引入一个额外的库,名称就叫time http://…
在学习Rust过程中突然想到怎么实现继承,特别是用于代码复用的继承,于是在网上查了查,发现不是那么简单的. C++的继承 首先看看c++中是如何做的. 例如要做一个场景结点的Node类和一个Sprite类继承它. 定义一个node基类 struct Node { float x; float y; void move_to(float x, float y) { this->x = x; this->y = y; } virtual void draw() const { printf(&qu…
对 Rust 语言的分析 Rust 是一门最近比较热的语言,有很多人问过我对 Rust 的看法.由于我本人是一个语言专家,实现过几乎所有的语言特性,所以我不认为任何一种语言是新的.任何“新语言”对我来说,不过是把早已存在的语言特性(或者毛病),挑一些出来放在一起.所以一般情况下我都不会去评论别人设计的语言,甚至懒得看一眼,除非它历史悠久(比如像 C 或者 C++),或者它在工作中惹恼了我(像 Go 和 JavaScript 那样).这就是为什么这些人问我 Rust 的问题,我一般都没有回复,或者…
如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部分. 什么是Ownership 每种编程语言都有自己的一套内存管理的方法.有些需要显式的分配和回收内存(如C),有些语言则依赖于垃圾回收器来回收不使用的内存(如Java).而Rust不属于以上任何一种,它有一套自己的内存管理规则,叫做Ownership. 在具体介绍Ownership之前,我想要先声…
定义并介绍结构体 结构体和我们前面学习的元组类似,结构体中的每一项都可以是不同的数据类型.和元组不同的地方在于,我们需要给结构体的每一项命名.结构体较元组的优势是:我们声明和访问数据项的时候不必使用索引,可以直接使用名字. 声明结构体 我们直接看一个结构体的例子: struct User { username: String, email: String, sign_in_count: u64, active: bool, } 结构体使用关键字 struct 开头,紧跟结构体的名字,之后就是大括…
最近和同事聊起来,觉得lua缺乏编译型语言的类型校验功能,还有变量拼写检查之类的,导致线上总是有低级错误出现.比如最近有一个是变量名拼写少了一个字母,导致某功能没开启:还有一个是变量传参时,之前测试多加了一个参数,测试完成后忘记删了,导致参数顺序不对.之前看过有个TypeLua,没想到现在已经不怎么维护了,去搞了Titan-lang,然而Titan也是4个月没动静了... 目前也没想到什么好的解决办法,于是顺带看看Rust-lang,开阔一下思路.我最佩服rust这帮人的,是他们有点壮士断腕的勇…
从整体的角度来看Go,很难理解他是怎么取得这么大的成功的.从理论的角度上来说Go是一门非常糟糕的语言,就算是和C++或者Ada之类旧语言相比也是这样. 从整体的角度来看Go,很难理解他是怎么取得这么大的成功的.从理论的角度上来说Go是一门非常糟糕的语言,就算是和C++或者Ada之类旧语言相比也是这样.它缺乏大量的编译时的检查和编译时的逻辑,它缺乏销毁逻辑导致许多样板文件和运行时错误.它的界面不是很有表现力.它具有一等公民数据结构(slices和maps),不能使用语言本身作为库进行复制. 在许多…
学习Rust已经两周了,基本上是断断续续的在学,或者是在上下班坐公交时,或者是在ODC没事做时.现在已经学习了Rust程序设计语言的前5章,是时候做一个总结了.关于数据类型或者if else这种内容我就不在罗列了,我只说一说我感兴趣的部分. 变量和可变性(variable & mutability) 函数的隐式返回值 理解语句(statement)和表达式(expression)的区别 break可以带变量 元组 所有权(ownership) 其中所有权我会重点说一下.     先看看Rust官…
原题链接 2300分 大意 俄罗斯套娃,每个有内容半径in和外围半径out in_i<out_i 如果 in_i >= out_j ,那么j可以放在i内 定义残留空间 = 一列嵌套的套娃 未使用的半径和 ,如 {1,2},{2,5},{7,9},未使用的白净和为(1-0)+(2-2)+(7-5) = 3 有效残留空间,如果 一列嵌套的套娃,还能从给出的套娃中选择一个加入这一列,那么原本的残留空间为无效值.如给{1,2},{2,3},{2,5},{7,9},只选择{1,2},{7,9}是无效的嵌…
有没有同学记得我们一起挖了多少个坑?嗯-其实我自己也不记得了,今天我们再来挖一个特殊的坑,这个坑可以说是挖到根源了--元编程. 元编程是编程领域的一个重要概念,它允许程序将代码作为数据,在运行时对代码进行修改或替换.如果你熟悉Java,此时是不是想到了Java的反射机制?没错,它就是属于元编程的一种. 反射 Rust也同样支持反射,Rust的反射是由标准库中的std::any::Any包支持的. 这个包中提供了以下几个方法 TypeId是Rust中的一种类型,它被用来表示某个类型的唯一标识.ty…