Li Guangqiao
Li Guangqiao

一个正在转rust的ExtJs前端工程师。迷信rust的整体发展,十分相信rust在各个领域都能发光发热,至少目前rust在很多领域上验证了其安全性、易维护性。但说实话对于我这种菜鸡也是真的难上手哈哈哈~~。 思路总结:

  • 万物诞生都会有一个需求来源,每一个改变都是为了解决某个问题,最后应该考虑如何去做
  • 学会掌握一些宏观的知识和理论:系统论、还原论
  • 工程化思想,如何描述整体,从整体架构到模块关联等 故学习东西应该像看地图一样,先看整体了解整体的结构,然后再聚焦每一个模块,对于模块的学习,思考三个问题,“是什么?”、“为什么?”、“怎么做?”;那么设计一个东西时也应该去考虑整体性和关联性。

有关于未来的发展,以下是鄙人的粗浅的观点:

  • 编程语言未来应该是每个人必备的工具
  • 未来的交互方式应该会以语言交互为主流
  • 下一个去中心化的技术方案出来之前,区块链依然是web3建立价值体系的基础技术方案,如何将现实价值和虚拟价值联通是进入数字世界的一个大难题。
  • 未来注定是AI的世界。AI的进化会伴随绝大部分人的退化,届时除了尖端人才,人们学习的重心会放在何处?

rust学习(三)泛型和特征对象
rust学习(三)泛型和特征对象

Li Guangqiao - 15/07/2023

泛型和特征对象 泛型解决了多种数据类型可共用一个方法的问题,而特征对象(trait)则提供一种定义和限制泛型行为的方法,特征对象(trait)中封装各类型共享的方法 泛型例子: use std::ops::Add; fn add_i8(a:i8,b:i8) -> i8 { a+b } fn add_i16(a:i16,b:i16) -> i16 { a+b } fn add_i32(a:i32,b:i32) -> i32 { a+b } fn add<T:std::ops::Add + Add<Output = T>>(a:T,b:T) -> T { a+b } fn add_test(){ println!("{}",add_i8(1,2)); println!("{}",add_i16(1,2)); ...

rust学习(二)所有权和生命周期
rust学习(二)所有权和生命周期

Li Guangqiao - 15/07/2023

Rust所有权机制 Rust语言引入所有权机制的目标 主要为解决复杂系统中的资源管理和悬吊引用问题。 所有权系统是Rust中用于管理内存的手段。 所有权规则总结归纳: 每个值(变量)都有一个所有者 值在任意时刻都只有一个所有者 当所有离开作用域时,其值将被丢弃(相当于执行垃圾回收) 结论:Rust的值被唯一的对象管理着,一旦不使用,内存就会立刻释放。 所有权简单实验 借用 let x = String::from("hello"); let y = &x; 克隆 let x = 10; let y = x; println!("测试通过{x},{y}"); //测试通过10,10 let a = "hello"; let b = a; println!("测试通过{x},{y}"); let c = (1,2 as f64,"hello"); let d = c; println!("测试:{:?},{:?}",c,d); let g = d.clone(); 生命周期 静态生命周期***'static和动态生命周期'a*** 静态生命周期在整个程序中期间存活 动态生命周期,相关参数的生命周期以相对长生命周期的引用为准 fn lifetime_test_one() -> &String{ let x= "hello".to_string(); ...

hashMap
hashMap

Li Guangqiao - 17/06/2023

...

拜占庭问题
拜占庭问题

Li Guangqiao - 30/05/2023

简述 这种情况可以抽象地表达为一群拜占庭军队的将军和他们的军队驻扎在敌人的城市周围。因此,在一个叛徒面前,没有解决三个将军的办法,将军们只能通过信使交流,必须商定一个共同的作战计划。然而,其中一个或多个可能是叛徒,他们会试图混淆其他人。问题是找到一种算法来确保忠诚的将军们达成一致。研究表明,仅使用口头信息,这个问题是可以解决的,当且仅当超过三分之二的将军是忠诚的;所以一个叛徒可以迷惑两个忠诚的将军。有了不可伪造的文字信息,这个问题对任何数量的将军和可能的叛徒来说都是可以解决的。然后讨论了这些解决方案在可靠计算机系统中的应用。 解决目标问题 可靠的计算机系统必须处理故障部件,这些部件向系统的不同部分提供相互冲突的信息。 即解决冲突信息,思想仍然是少数服从多数。 目标 找到一种合适的算法确保忠诚的将军能达到意见一致 达到目标的条件 A 所有忠诚的将军都决定同样的行动计划。 B 一小撮叛徒不能使忠诚的将军们采纳一个坏计划。 描述:条件B很难形式化,因为它要求准确地说出什么是糟糕的计划,而我们并不打算这样做。相反,我们考虑将军们如何做出决定。每个将军都观察敌人,并把他的观察结果传达给其他人。设v(i)为第i个将军传达的信息。每个一般使用一些方法来组合值v (1) .....V (n)变成一个单独的行动计划,其中n是将军的数目。条件A是通过让所有将军使用相同的方法来组合信息来实现的,条件B是通过使用一种鲁棒方法来实现的。例如,如果要做的唯一决定是进攻还是撤退,那么v(i)就是i将军的意见,即哪个选择是最好的,而最终的决定可以基于他们中的大多数人的投票。只有当忠诚的将军们在两种可能性中几乎平分,少数卖国贼才能影响决策,在这种情况下,任何一个决定都不能被称为坏决定。虽然这种方法可能不是满足条件A和B的唯一方法,但它是我们所知道的唯一方法。它采用了一种方法,将军们通过这种方法互相交流他们的价值观v (i)。显而易见的方法是第i个将军通过信使发送v (i)给对方将军。但是,这是行不通的,因为满足条件A要求每个忠诚的将军获得相同的值v(1) .....V (n),一个叛国的将军可能会给不同的将军发送不同的值。要满足条件A,下列条件必须成立 每个忠诚的将军必须获得相同的信息v (1) ....v (n)。 条件1意味着将军不能使用直接从第i将军获得的值v(i),因为叛变的第i将军可以将不同的值发送给不同的将军。这意味着,除非我们小心,在满足条件1的情况下,我们可能引入一种可能性,即将军使用的v (i)值与第i个将军发送的值不同——即使第i个将军是忠诚的。如果满足条件B,我们绝不允许这种情况发生。例如,我们不能允许少数卖国贼使洛亚将军以“撤退”的价值作决定,……如果每一个忠诚的将军都派人去“进攻”的话。因此,我们对每个i都有以下要求 如果第i个将军是忠诚的,那么他发送的值必须被每个忠诚的将军用作***v (i)***的值。 我们可以将条件I重写为条件对于每一个I(无论第I个将军是否忠诚):1”.任何两个忠诚的将军使用相同的***v(i)***值。 条件1'和2都是第i个将军发送的单个值的条件。因此,我们可以把我们的考虑限制在一个将军如何将他的价值传递给其他将军的问题上。我们用一个指挥将军向他的副官们发出命令的方式来描述这个问题。 最终拜占庭将军的问题变成下面这样一个命题 一个将军必须向他的n - 1个中将发出这样的命令 对于命令的要求: IC1 所有忠诚的中尉都服从同一命令 IC2 如果指挥官是忠诚的,那么每个忠诚的中尉都会服从他的命令。 条件IC1和IC2称为交互一致性条件。注意,如果指挥官是忠诚的,IC1就会跟着IC2。然而,指挥官不需要忠诚。为了解决我们最初的问题,第i个将军通过使用拜占庭将军问题的解发送他的***v(i)值命令“使用v(i)***作为我的值”,其他将军作为副手。 不可能的结果 拜占庭将军问题看似简单。令人惊讶的事实表明,如果将军们只能发出口头信息,那么除非超过三分之二的将军是忠诚的,否则任何解决方案都不会奏效。特别是,在只有三个将军的情况下,在一个叛徒面前,任何解决方案都不可能奏效。口头信息的内容完全在发送者的控制之下,所以一个叛逆的发送者可以传递任何可能的信息。**这样的消息与计算机通常相互发送的消息类型相对应。在第4节中,我们考虑了签名的、书面的消息,但这是不正确的。(Such a message corresponds to the type of message that computers normally send to one another. In Section 4 we consider signed, written messages, for which this is not true....