【Rust日报】query.rs - 搜索Rust的一切

rucola - 在终端中管理你的markdown文档

很酷的一个终端软件。

18f47e79ed3cd5c0879908038b885486.png ec7ee042856776791f7bdaa71bcdcaa7.png

query.rs - 搜索Rust的一切

https://query.rs/

文档,crate,错误代码等等。 就是Rust生态的google.

使用Rust 10年后,我想吐槽几句

这篇文章分享了作者在使用Rust编程语言中的经验,特别是一些主要的痛点和问题。以下是总结:

背景:

  • 作者使用Rust约10年,参与过多种项目,包括桌面GUI应用、服务器后端、CLI程序、通过WASM实现的沙箱脚本接口以及多个游戏相关项目。

  • 作者还熟悉多种其他编程语言,如Java、Python、Typescript、Elixir和C,但更喜欢Rust。

主要问题:

  1. 错误处理(Result<T, E>):

  • Rust的错误处理机制虽然强制开发者处理错误,但在实际使用中,尤其是库开发中,创建和转换错误类型非常麻烦。

  • 在应用代码中,通常只需要传播错误并向用户显示结果,但Rust缺乏Java那样的完善的错误日志和调用栈信息。

  • 作者建议Rust标准化一个类似于Box的类型,自动附加上下文信息,以便在函数间传播错误。

模块系统:

  • Rust的模块系统过于灵活,容易导致意外暴露类型或模块。

  • 管理跨crate的代码组织困难,特别是在大型项目(如Bevy)的单一仓库中。

  • 作者认为Rust应更加显式,类似于Java的模块路径与文件系统文件夹对应的方式。

编译时间和IDE工具:

  • 编译时间和IDE中的错误检查速度太慢,特别是对于大型项目(如Bevy)。

  • Rust的编译单元设计(1 crate = 1编译单元)导致每次修改都需要重新编译整个crate及其依赖项。

  • Rust分析器在大型项目中表现不佳,经常重新索引整个项目。

总结:

  • 作者认为这些问题对Rust的使用造成了重大影响,并希望能有解决这些问题的方案。

  • 尽管有这些问题,作者依然非常喜欢Rust,并且计划继续使用它。

https://www.reddit.com/r/rust/comments/1e978l7/ive_used_and_loved_rust_for_10_years_here_are_the/

自己动手用Rust实现WebSocket

这篇讲了WebSocket的底层机制,以及如何使用Rust一步一步实现WebSocket.

https://www.thespatula.io/rust/rust_websocket/

--

From 日报小组 Mike

社区学习交流平台订阅:

  • Rustcc论坛: 支持rss

  • 微信公众号:Rust语言中文社区

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 GTK-rs 库需要先安装 GTK+3,可以在 Linux 系统下通过包管理器安装,也可以在 Windows 和 macOS 下从官网下载安装程序进行安装。 安装 GTK+3 后,可以在 Rust 项目中添加 gtk 和 gdk 两个依赖: ```toml [dependencies] gtk = "0.9" gdk = "0.9" ``` 然后在 Rust 代码中引入 gtk 和 gdk 库: ```rust extern crate gtk; extern crate gdk; ``` 在 GTK-rs 中,主要有两种方式创建 GUI 窗口:Builder 和手动创建。下面分别介绍这两种方式。 ### 使用 Builder 创建 GUI 窗口 使用 Builder 可以通过 XML 文件描述 GUI 界面,然后使用 Rust 代码加载并显示窗口。以下是一个简单的例子: ```xml <?xml version="1.0" encoding="UTF-8"?> <interface> <object class="GtkWindow" id="main_window"> <property name="title">Hello, World!</property> <property name="default-width">400</property> <property name="default-height">300</property> <child> <object class="GtkLabel" id="label"> <property name="label">Hello, World!</property> </object> </child> </object> </interface> ``` 在 Rust 代码中,可以使用 gtk::Builder 加载并显示窗口: ```rust use gtk::prelude::*; use gtk::{Builder, Window}; fn main() { if let Err(err) = gtk::init() { eprintln!("Failed to initialize GTK: {}", err); return; } let glade_src = include_str!("path/to/glade/file.glade"); let builder = Builder::from_string(glade_src); let window: Window = builder.get_object("main_window").unwrap(); window.show_all(); gtk::main(); } ``` ### 手动创建 GUI 窗口 手动创建 GUI 窗口需要在 Rust 代码中定义窗口和窗口中的组件,以下是一个简单的例子: ```rust use gtk::prelude::*; use gtk::{Window, WindowType, Label}; fn main() { if let Err(err) = gtk::init() { eprintln!("Failed to initialize GTK: {}", err); return; } let window = Window::new(WindowType::Toplevel); window.set_title("Hello, World!"); window.set_default_size(400, 300); let label = Label::new(Some("Hello, World!")); window.add(&label); window.show_all(); gtk::main(); } ``` 以上代码中,创建了一个顶层窗口和一个标签组件,将标签添加到窗口中并显示窗口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值