初步探究Rust生态与图形界面编程

引言

Rust作为一种现代的、安全的系统编程语言,自2010年问世以来,逐渐在开发社区中崭露头角。它的内存安全保证、并发处理能力、以及无需垃圾回收机制的高性能特性,使得它成为了开发系统工具、网络服务、以及嵌入式系统的热门选择。然而,在图形界面编程领域,Rust尚处于起步阶段,社区正在积极发展相关生态系统。今天,我们一起探讨Rust图形界面编程的现状、生态系统的发展,以及面临的挑战。

Rust的图形界面编程生态

现状

与C++的Qt、C#的WPF或者JavaScript的Electron等成熟的图形界面框架相比,Rust的图形界面生态显得相对年轻。虽然Rust社区内部有一些早期的图形界面库,但它们多数还不够成熟,或缺乏广泛的社区支持和维护。不过,随着Rust语言的普及和社区的壮大,图形界面编程生态正在逐步发展。

框架与库

1. Conrod

Conrod是一个简单易用的即时模式UI库,它使用Rust的特性来提供安全的UI编程模式。Conrod适合快速原型开发和小型项目,但可能不适合大型、复杂的应用程序。

2. Druid

Druid是一个数据驱动的Rust原生UI设计框架,由Mozilla赞助的Redox操作系统项目团队开发。Druid的目标是提供高性能、易用性和可扩展性,它还在积极地开发中,未来前景广阔。

3. Iced

Iced是一个灵感来自Elm的声明式Rust图形界面库,它致力于简洁和响应式设计。支持跨平台开发,包括WebAssembly,是现代Rust GUI开发的有力候选者。

4. gtk-rs

gtk-rs项目提供了GTK+库的Rust绑定,使得Rust开发者能够利用成熟的GTK+进行图形界面开发。这是目前为止Rust中最成熟的图形界面方案之一。

社区和资源

Rust的快速增长也带动了其社区的发展,从各种在线论坛、聊天室到官方和非官方文档,都可以找到关于Rust图形界面编程的讨论和帮助。然而,与更成熟的技术相比,Rust在图形界面编程方面的社区和资源仍相对有限。

挑战与展望

挑战

  • 成熟度:Rust的GUI框架大多数还未达到商业应用的成熟度,缺乏全面的文档和广泛的生态支持。
  • 学习曲线:Rust本身的学习曲线较陡峭,加之图形界面编程的复杂性,新手可能会感到门槛较高。
  • 异步支持:现代GUI应用通常需要良好的异步支持以处理诸如网络请求等操作,Rust的异步编程模型还在不断进化中,对于GUI框架的集成提出了挑战。

深入Rust社区的Iced图形界面库

在上面众多图形界面库中,Iced相对比较新,功能和关注都比较丰富。
iced库的github地址为:https://github.com/iced-rs/iced

观察iced项目的依赖库,列出如下:

  1. async-std: 提供标准库风格的异步版本,包括I/O、文件系统操作、线程等。

  2. bitflags: 一个宏帮助创建封装位字段的结构体,用于处理位掩码操作。

  3. bytemuck: 无需unsafe代码即可进行安全的裸字节转换,还支持派生宏。

  4. bytes: 提供字节缓冲区的数据结构,如BytesBytesMut,用于网络编程和异步I/O。

  5. cosmic-text: COSMIC Text 提供高级文本整形、布局和渲染,这些功能都包含在一个简单的抽象中。整形由 rustybuzz 提供,并支持各种高级整形操作。渲染由 swash 提供,它支持连字和彩色表情符号。布局是在安全的 Rust 中自定义实现的,并支持双向文本。

  6. dark-light: 检测是否启用了暗模式或亮模式。

  7. futures: 一个提供异步编程能力的库,包括异步操作的future、stream和sink抽象。

  8. glam: 一个简单且快速的线性代数库,用于图形和游戏开发。

  9. glyphon: 这个库来自于指定的git仓库,是一个用于webgpu处理字形的库。

  10. guillotiere: 一个矩形打包库,可用于贴图图集或UI布局。

  11. half: 提供16位浮点类型(即半精度浮点数)。

  12. image: 一个综合图像处理库,支持多种图像格式的编码和解码。

  13. kamadak-exif: 用于解析Exif元数据的库。

  14. kurbo: kurbo库包含曲线和矢量路径的数据结构和算法。。

  15. log: Rust的日志记录宏和API。

  16. lyon: 一个用rust编写的路径细分库,用于基于GPU的2D图形渲染。

  17. lyon_path: lyon库的一部分,处理路径的数据结构和算法。

  18. num-traits: 数字类型的特性和相关实用工具。

  19. once_cell: 提供单次初始化的单元格类型,如Lazy

  20. ouroboros: 允许在Rust中创建自引用结构体的库。

  21. palette: 用于颜色计算和转换的库。

  22. qrcode: 生成QR码的库。

  23. raw-window-handle: 提供访问底层窗口句柄的抽象。

  24. resvg: 一个SVG渲染库。

  25. rustc-hash: Rust编译器使用的快速散列函数。

  26. smol: 一个小型和快速的异步Rust运行时。

  27. smol_str: 用于存储小字符串的库,通常用于编程语言工具。

  28. softbuffer: 可能是一个软件渲染缓冲区的库,但没有详细信息。

  29. syntect: 用于代码语法高亮显示的库。

  30. sysinfo: 获取系统信息(如CPU、内存使用情况)的库。

  31. thiserror: 用于简化错误处理的库。

  32. tiny-skia: 一个小型的Skia子集,Skia是一个2D图形库。

  33. tokio: 异步运行时,用于编写网络应用程序。

  34. tracing: 提供结构化诊断信息的应用程序框架。

  35. unicode-segmentation: 用于Unicode文本分割的库。

  36. wasm-bindgen-futures: 用于在wasm-bindgen和JavaScript之间转换futures的库。

  37. wasm-timer: 为WASM提供时间相关功能的库。

  38. web-sys: 提供对Web API的绑定,用于在Rust中操作Web技术。

  39. web-time: 可能是一个处理时间的Web库。

  40. wgpu: Rust的WebGPU API,用于现代图形和计算。

  41. winapi: 提供对Windows API的绑定。

  42. window_clipboard: 用于操作剪贴板的库。

  43. winit: 一个窗口创建和管理库,这个特定版本来自于git仓库。

编译和运行例子

安装rust的编译环境非常顺利,使用cargo构建iced的例子也很顺利。
运行了一些例子,发现iced还是存在一些bug,控件的丰富度和自定义能力有待提升。
但是非常喜欢iced库构建出来的二进制体积小巧。iced在windows默认有两个绘制后端,分别是tiny-skia和webgpu,把webgpu去掉后,构建出来的一个代码编辑器例子只有4.34MB(win-x64):
在这里插入图片描述

结论

Rust在图形界面编程领域虽然起步较晚,但其安全性、性能和现代化的语言特性,为其未来的发展提供了坚实的基础。
cargo 目前已经有比较成熟的2D、3D渲染的库了。Rust社区拥有强大的图形界面库也指日可待了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/376577.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8-1 搭建solidity开发环境,自己定制一个truffle

8-1 搭建solidity开发环境,自己定制一个truffle(react区块链实战) 从零开始搭建一个项目 自己实现一套类似truffle的自动编译系统,加深理解 此处可以跳过无需自己实现编译合约的模块,使用已有的truffle模块即可 项目…

【JavaScript】解决 JavaScript 语言报错:Uncaught SyntaxError: Unexpected token

文章目录 一、背景介绍常见场景 二、报错信息解析三、常见原因分析1. 缺少必要的语法元素2. 使用了不正确的字符或符号3. JSON 格式错误4. 字符串未正确闭合 四、解决方案与预防措施1. 检查语法元素2. 正确使用符号和字符3. 修正 JSON 格式4. 字符串闭合 五、示例代码和实践建议…

go 切片进行链式操作并支持泛型

背景: 由于团队不是专业级别的go开发人员,主开发还是java,用惯了java的lambda表达式特别是流式操作, 所以在用go语言时,发现切片处理起来比较麻烦,看看能不能支持类似流式操作,我这边就研究了下…

PDF公式转Latex

文章目录 摘要数据集 UniMER介绍下载链接 LaTeX-OCRUniMERNet安装UniMER 用的数据集介绍下载链接 PDF-Extract-Kit整体介绍效果展示评测指标布局检测公式检测公式识别 使用教程环境安装参考[模型下载](models/README.md)下载所需模型权重 在Windows上运行在macOS上运行运行提取…

ESP-IDF升级到V5.2.x碰到的问题,lvgl移动v9.x。

近日在学习IDF,将原有IDF代码,升级到IDF 5以上时。发现一些API的变化,具体如下(今后碰到再继续补充): 一、官网上找到部分。截图如下 二、网上找到部分 The fixes I attempted which got the file to compile: replace gpio_pad_select_gpio() with gpio_pin_reset()re…

Ubuntu 安装搜狗输入法

搜狗输入法已支持Ubuntu1604、1804、1910、2004、2010 各系统安装步骤可能略有不同 1、添加中文语言支持 打开 系统设置——区域和语言——管理已安装的语言——在“语言”tab下——点击“添加或删除语言” 弹出“已安装语言”窗口,勾选中文(简体&…

Linux vim文本编辑器

Vim(Vi IMproved)是一个高度可配置的文本编辑器,它是Vi编辑器的增强版本,广泛用于程序开发和系统管理。Vim不仅保留了Vi的所有功能,还增加了许多新特性,使其更加强大和灵活。 Vim操作模式 普通模式&#xf…

机器学习——L1 L2 范数 —>L1 L2正则化

1、L1范数和L2范数是机器学习和数据分析中经常使用的两种范数,它们之间存在多个方面的区别。 以下是关于L1范数和L2范数区别的详细解释: 一、定义差异 L1范数:也被称为曼哈顿范数,是向量元素的绝对值之和。对于一个n维向量x&am…

【密码学】实现消息认证或数字签名的几种方式

消息认证的目的是验证消息的完整性和确认消息的来源。数字签名的目的是不仅验证消息的完整性和来源,还提供了不可否认性。此外,数字签名还可以验证消息的创建时间,防止重放攻击。那么具体有哪些实现的方式呢? 一、仅提供消息认证…

YOLOv10改进 | 损失函数篇 | SlideLoss、FocalLoss、VFLoss分类损失函数助力细节涨点(全网最全)

一、本文介绍 本文给大家带来的是分类损失 SlideLoss、VFLoss、FocalLoss损失函数,我们之前看那的那些IoU都是边界框回归损失,和本文的修改内容并不冲突,所以大家可以知道损失函数分为两种一种是分类损失另一种是边界框回归损失,…

如何使用HTML和JavaScript读取文件夹中的所有图片并显示RGB范围

如何使用HTML和JavaScript读取文件夹中的所有图片并显示RGB范围 在这篇博客中&#xff0c;我将介绍如何使用HTML和JavaScript读取文件夹中的所有图片&#xff0c;并显示这些图片以及它们的RGB范围。这个项目使用现代浏览器提供的<input type"file" webkitdirecto…

k8s字段选择器

文章目录 一、概述二、基本语法三、支持的字段1、错误示例2、支持的字段列表 四、支持的操作符1、示例 五、跨多种资源类型使用字段选择器 一、概述 在Kubernetes中&#xff0c;字段选择器&#xff08;Field Selectors&#xff09;和标签选择器&#xff08;Label Selectors&am…

【目标检测】使用自己的数据集训练并预测yolov8模型

1、下载yolov8的官方代码 地址&#xff1a; GitHub - ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX > OpenVINO > CoreML > TFLite 2、下载目标检测的训练权重 yolov8n.pt 将 yolov8n.pt 放在ultralytics文件夹下 3、数据集分布 注…

如何在Linux上如何配置虚拟主机

在Linux上配置虚拟主机可以通过使用Apache HTTP服务器来实现。Apache是一个开源的跨平台的Web服务器软件&#xff0c;可以在多种操作系统上运行并支持虚拟主机的配置。 以下是在Linux上配置虚拟主机的步骤&#xff1a; 安装Apache HTTP服务器 在终端中运行以下命令来安装Apache…

科普文:深入理解Mybatis

概叙 (1) JDBC JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。 优点…

怎么用PPT录制微课?详细步骤解析!

随着信息技术的不断发展&#xff0c;微课作为一种新型的教学形式&#xff0c;因其短小精悍、针对性强等特点&#xff0c;在教育领域得到了广泛的应用。而PPT作为一款常用的演示工具&#xff0c;不仅可以用来制作课件&#xff0c;还可以利用其内置的录屏功能或结合专业的录屏软件…

C++:类与对象(上)

目录 一、类的定义 1.1类的定义格式 1.2访问限定符 1.3类域 二、实例化 2.1实体化的概念 2.2类对象的大小 三、this指针 前言&#xff1a; 这篇文章是对类和对象的初步介绍&#xff0c;我将用三篇文章描述类和对象&#xff0c;希望对大家有所帮助 一、类的定义 什么是…

jenkins打包java项目报错Error: Unable to access jarfile tlm-admin.jar

jenkins打包boot项目 自动重启脚本失败 查看了一下项目日志报错&#xff1a; Error: Unable to access jarfile tlm-admin.jar我检查了一下这个配置&#xff0c;感觉没有问题&#xff0c;包可以正常打&#xff0c; cd 到项目目录下面&#xff0c;手动执行这个sh脚本也是能正常…

这可能是最详细的 Dagger2 使用教程 二(限定注解 @Named、@Qulifier 和 范围注解 @Singleton、@Scope)

通过上一篇文章我们知道了 Dagger2 的基本使用&#xff0c;在这篇文章中&#xff0c;我们将讲解 Dagger 中的两个重要概念以及相关注解。 这可能是最详细的 Dagger2 使用教程 一&#xff08;基本使用&#xff09; 类型上再加限定&#xff1a;Named 和 Qulifier 注解的使用 通…

罗技K380无线键盘及鼠标:智慧互联,一触即通

目录 1. 背景2. K380无线键盘连接电脑2.1 键盘准备工作2.2 电脑配置键盘的连接 3. 无线鼠标的连接3.1 鼠标准备工作3.2 电脑配置鼠标的连接 1. 背景 有一阵子经常使用 ipad&#xff0c;但是对于我这个习惯于键盘打字的人来说&#xff0c;慢慢在 ipad 上打字&#xff0c;实在是…