Dvorak
Dvorak

Dvorak Chen

Rust


Rust - bytecodec 编解码库

Rust - bytecodec Encoding and Decoding Library This blog post discusses the use of the bytecodec library in Rust for encoding and decoding data. The author starts by explaining the need for a simple protocol to serialize objects into binary format for network transmission. Instead of using JSON, the author decides to create a custom protocol where each field is represented on a separate line. However, the author soon realizes that the implementation becomes messy and lacks abstraction. The problem lies in the lack of a standardized approach to encoding and decoding. Although the `Peer` object only has three members, each member needs to be individually implemented for encoding and decoding. This lack of abstraction leads to inconsistent naming, implementation, and method usage, making the code difficult to manage. To solve this problem, the author proposes the use of traits to provide a standardized approach to encoding and decoding. The bytecodec library offers the `Encode` and `De...--GPT 4

Rust

Rust 小技巧之临时作用域

Rust小技巧之临时作用域 本文介绍了在Rust中使用临时作用域来优化代码的方法。首先,作者提到了在处理`Result`和`Option`时,可以使用`if let`和`?`操作符来简化代码。接下来,作者给出了一个读取用户输入的示例,并提出了优化的思路。首先,可以将读取输入的代码封装成一个函数,并返回所需的变量。其次,作者介绍了一种更喜欢的方法,即使用临时作用域来处理读取输入的操作。在临时作用域中定义的变量在作用域结束后会被释放,从而简化了代码。最后,作者比喻了临时作用域的好处,就像有一个只能放数据线的小盒子,能够方便地收纳数据线。通过使用临时作用域,可以提高代码的可读性和简洁性。 思考问题:你是否在自己的代码中使用过临时作用域?你认为在哪些情况下使用临时作用域会更加合适?--GPT 4

Rust

How to fix some issues while using "diesel"

If you encounter the 'cannot open input file "sqlite3.lib"' error when operating sqlite file with Diesel, don't worry, it's because Diesel can't find the file sqlite3.lib at the path ~/.rustup/toolchains/..... You can download sqlite3.lib from the link provided in the article. After downloading, unzip it and move sqlite3.lib to the path ~/.rustup/toolchains/stable-x86_64-pc-windows-msvc/lib/rustlib/x86_64-pc-windows-msvc/lib/. Note that the path might be different if you use a different version of Rust. This article provides a simple solution to the error and helps you get back on track with your work.--GPT 4

Rust

Leptos - CSR & SSR

Leptos是一个全栈框架,支持MVC式的Web应用开发。前端框架的纯前端应用采用CSR(客户端渲染)方式,优点是更少的打包文件,更紧凑的格式,但对SEO不友好。SSR(服务器端渲染)是更好的选择,Leptos采用Actix和Axum实现SSR,分为脱水、浸泡和湿润三个步骤,使用Rust的features在不同环境运行不同代码。组件里的服务器代码运行在SSR环境下,Leptos提供了Server Functions功能,可以在组件里使用服务器的代码。但是,Leptos的SSR环境有时会遇到一些奇怪的问题。--GPT 4

Rust Leptos

Rust 和经典语言在习惯上的差异

本文介绍了 Rust 和 C# 在编程习惯上的差异。首先介绍了 Rust 中的所有权概念,即变量持有它的值的所有权、变量赋值给别的变量会转移所有权、变量不能使用它没有持有所有权的值。这种概念带来的好处是严格限制了值的生命周期,为编译器知道在何处释放它提供了基础。其次,本文介绍了 Rust 中的抽象,即单元结构体的使用方法,它不定义任何的属性,可以用 `impl` 块给他定义方法,调用的时候单元结构体的名字提供了抽象。最后,本文介绍了在 Rust 中经常出现的嵌套泛型的写法,这种写法是为了实现动态分配,而其他的,如 `Mute<T>` 和 `Arc<T>` 是为了在多线程中共享数据。在 Rust 中必须要习惯这种 **wrap** 写法。--GPT 4

Rust

Leptos - 撸一只赛博猫猫

本文介绍了使用Leptos和Rust语言,替代Javascript,编写一个可爱的赛博猫猫动画的过程。文章首先介绍了一些有用的crates,如console_log、gloo和js-sys,它们分别提供了打印输出、大量BOM调用的API和时间库功能。然后,作者详细描述了如何使用HTML和Rust编写的逻辑代码,包括事件监听和类似Javascript的Interval时间函数,来创建一个可交互的赛博猫猫动画。此外,文章还详细解释了如何使用Interval时间函数和数组存储的字符画,来实现猫猫摇尾巴的动画效果。最后,作者提到了如何使用on_cleanup函数,在组件清理的时候取消Interval函数,以及如何在组件卸载的时候清理Interval。那么,如何使用Rust和Leptos来创建自己的动画呢?你会尝试使用这些方法和技巧来创建自己的项目吗?--GPT 4

Rust

从实现 Iterator 来窥探 Rust

本文详细介绍了如何在Rust中实现Iterator trait,以支持for in遍历。首先,我们定义了一个简单的struct,然后实现了一个iter()方法,将其转换为另一个实现了Iterator trait的结构。接下来,我们探讨了为何不直接在Nums上实现Iterator,以及Rust特有的生命周期标注的概念。我们还解释了如何在NumsIter结构中使用生命周期标注,以保证在借用Nums的时间内Nums都是存在的。最后,我们实现了Iterator trait,并给出了完整的代码示例。这篇文章提供了一个深入理解Rust中Iterator实现和生命周期标注的好机会。那么,你是否已经理解了如何在Rust中实现Iterator?你是否理解了生命周期标注的作用及其在Rust中的重要性?--GPT 4

Rust

Leptos 初探 - 序言

Leptos是一个用Rust开发的全栈Web框架,其写法类似于React,但实现机制却大相径庭。Leptos采用最小粒度更新的方式,避免了虚拟DOM的处理,性能上优于React。然而,由于Rust语言的学习难度,Leptos的普及可能会受到一定限制。此外,Leptos的更新机制依赖于闭包,而Rust严苛的语法规则可能会给开发者带来一些挑战。例如,Rust的所有权规则需要通过`Rc`进行引用计数来解决。最后,Leptos的代码最终会编译到浏览器的WASM环境中运行,因此不是所有的Rust crate都能够正常运行,需要挑选能够在WASM中使用的crate。这篇文章对Leptos的使用进行了详细的介绍,对于想要了解和使用Leptos的开发者来说,具有一定的参考价值。那么,你是否已经准备好接受Leptos的挑战,使用Rust开发你的Web应用呢?--GPT 4

Rust Leptos

在 Rust 中使用 Actor 模型

在本篇博客中,我们探讨了在Rust编程语言中如何使用Actor模型来解决多线程共享变量的线程安全问题。文章首先介绍了Rust中使用`Mutex`锁来实现线程安全的基本方法,然后通过实际案例展示了在多线程通讯功能中,使用`Mutex`锁可能导致的问题,例如长时间阻塞等。为了解决这个问题,文章尝试了使用`TcpStream`引用来绕过生命周期检查的方法,但这种方法存在一定的不安全性。 然后,文章引入了Actor模型作为解决方案。Actor模型是一种并发计算模型,由许多独立的并发实体组成,每个实体都是一个Actor。每个Actor都有自己的状态和行为,Actor之间通过消息传递。在这个模型中,每个客户端都成为一个Actor,分别持有自己的`TcpStream`,无论是向这个`TcpStream`发送还是监听,都由持有这个`TcpStream`的Actor去执行,而执行的时机就通过消息(Message)来触发。这种方法避免了全局变量和原始指针的使用,同时也没有`Mutex`锁,看起来更加干净清爽。 那么,Actor模型是否能完全解决多线程下的线程安全问题呢?如何在实际中更有效地使用Actor模型?这些都是值得我们进一步探讨的问题。--GPT 4

Rust

  • 1