初步探究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社区拥有强大的图形界面库也指日可待了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

20240715 每日AI必读资讯

🌐 代号“ 草莓 ”,OpenAI 被曝研发新项目:将 AI 推理能力提至新高度 - OpenAI 公司被曝正在研发代号为“ 草莓 ”的全新项目,进一步延伸去年 11 月宣布的 Q* 项目,不断提高 AI 推理能力,让其更接近人类的…

32路串口服务器 应用领域

32路串口服务器在多个领域有着广泛的应用,以下是详细的应用实例: 一、工业自动化 在工业自动化领域,32路串口服务器发挥着举足轻重的作用。传统的工业设备往往采用串口通信方式,而串口服务器能够将这些设备接入网络,…

Nodejs 第八十章(Kafka高级)

kafka前置知识在前几章章讲过了 不再复述 Kafka集群操作 1.创建多个kafka服务 拷贝一份kafka完整目录改名为kafka2 修改配置文件 kafka2/config/server.properties 这个文件 broker.id1 //唯一broker port9093 //切换端口 listenersPLAINTEXT://:9093 //切换监听源启动zooKe…

多表联合的查询(实例)、对于前端返回数据有很多表,可以分开操作、debug调试教程

2024.7.13 一、 对于多表的更深层的认识1. 认识2. 多表联合查询的列子:3. 对于多表查询的进一步认识4. 在实现功能的时候,原本对于省市县这样的表,对于项目的要求,是直接全部查询出来,然后开始使用,但我想着…

Elasticsearch:使用 Amazon Bedrock 的 semantic_text

作者:来自 Elastic Gustavo Llermaly 使用 semantic_text 新功能,并使用 AWS Bedrock 作为推理端点服务。 Elasticsearch 的新 semantic_text 映射类型旨在简化构建 RAG 应用程序的常见挑战。它整合了文本分块、生成嵌入以及检索嵌入的步骤。 在本文中…

C++进阶(while循环——函数应用)

知识点代码框架总结 输入n组数据 ,对n组数据里面的每一组进行处理(输出、求和 、运算、其他) int n;//几组数据cin >> n;//2while(n--){//对每组数据进行处理}看到下面的样例,肌肉型反映出上面的框架//2// 1 2 3// 4 5 6若…

机器学习筑基篇,Jupyter Notebook 精简指南

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 Jupyter Notebook 简明指南 描述:前面我们已经在机器学习工作站(Ubuntu 24.04 Desktop Geforce RTX 4070Ti SUPER)中安装 Anaconda 工具包,其…

Oracle23ai 新特性IF [NOT] EXISTS 语法支持

Oracle23ai 新特性IF [NOT] EXISTS Syntax Support 官方文档地址 https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/release-changes.html#GUID-9EE96980-43F9-4068-893E-C191CD83ACA6 IF [NOT] EXISTS 语法支持 CREATE、ALTER和DROP DDL语句支持IF NO…

python:绘制一元三次函数的曲线

编写 test_x3_3x.py 如下 # -*- coding: utf-8 -*- """ 绘制函数 y x^33x4 在 -3<x<3 的曲线 """ import numpy as np from matplotlib import pyplot as plt# 用于正常显示中文标题&#xff0c;负号 plt.rcParams[font.sans-serif] […

【人工智能】线性回归

目录 一、使用正规化方法计算下列样本的预测函数 1. 没有归一化之前 2. 归一化之后 二、读取ex1data2.txt中的数据&#xff0c;建立样本集&#xff0c;使用正规化法获取&#xff08;房屋面积&#xff0c;房间数量&#xff09;与房屋价格间的预测函数 1. 读取数据&#xff…

pico+unity3d项目配置

重点&#xff1a;unity编辑器版本要和pico的sdk要求一致、比如&#xff1a; 对于 Unity 2022.1.14 及以上版本&#xff0c;若同时在项目中使用 URP、Linear 色彩空间、四倍抗锯齿和OpenGL&#xff0c;会出现崩溃。该问题待 Unity 引擎解决。对于 Unity 2022&#xff0c;若同时…

Ubuntu20.04 编译安装FFmpeg,出错分析以及解决方案

最近工程上需要对FFmpeg底层源码进行修改&#xff0c;需要重新编译&#xff0c;遇见不少坑&#xff0c;出篇教程记录一下。 文章目录 1.FFmpeg源码下载地址2.编译环境配置3.编译FFmpeg4.配置FFmpeg运行环境 1.FFmpeg源码下载地址 官方下载地址:Index of /releases (ffmpeg.or…

寄存器分配

概述 寄存器位于CPU 或 GPU内部的少量高速存储器&#xff0c;通常用于保存机器指令的操作数 由于其价格昂贵&#xff0c;导致其数量有限&#xff0c;又由于存储速度快&#xff0c;使其不可或缺。因此&#xff0c;寄存器是计算机体系结构中的关键资源之一。在计算复杂表达式的…

Python爬虫速成之路(2):爬天气情况

hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命Coding-CSDN博客 &a…

常见问题记录(持续更新)

备注&#xff1a; 在7月10日记录之前遇到的问题及解决方法: 一&#xff1a;常见的访问问题&#xff1a; 403 Forbidden&#xff1a;&#xff08;未有请求权限&#xff09; 表示服务器理解请求但是拒绝执行它。这通常是由于服务器上的文件或资源没有正确的读、写或执行权限&…

IDEA启动Web项目总是提示端口占用

文章目录 IDEA启动Web项目总是提示端口占用一、前言1.场景2.环境 二、正文1.场景一:真端口占用2. 场景二:假端口占用 IDEA启动Web项目总是提示端口占用 一、前言 1.场景 IDEA启动Web项目总是提示端口占用&#xff1a; 确实是端口被占用&#xff0c;比如&#xff1a;没有正常…

复制vmware虚拟机文件并改名(文件名使用python替换)得到一台新的虚拟机

文章目录 需求实验复制文件夹并重命名使用python将所有文件名“WinSer2022”字符替换成“wingetmac”修改虚拟机配置文件&#xff08;.vmx&#xff09;打开新的虚拟机成功 需求 将已有的Winser2022虚拟机复制成wingetmac并开机 实验 复制文件夹并重命名 将"WinSer2022…

使用机器学习 最近邻算法(Nearest Neighbors)进行点云分析 (scikit-learn Open3D numpy)

使用 NearestNeighbors 进行点云分析 在数据分析和机器学习领域&#xff0c;最近邻算法&#xff08;Nearest Neighbors&#xff09;是一种常用的非参数方法。它广泛应用于分类、回归和聚类分析等任务。下面将介绍如何使用 scikit-learn 库中的 NearestNeighbors 类来进行点云数…

NSSCTF_RE(一)暑期

[SWPUCTF 2021 新生赛]简单的逻辑 nss上附件都不对 没看明白怎么玩的 dnspy分析有三个 AchievePoint , game.Player.Bet - 22m; for (int i 0; i < Program.memory.Length; i) { byte[] array Program.memory; int num i; array[num] ^ 34; } Environment.SetEnvironment…

全自主巡航无人机项目思路:STM32/PX4 + ROS + AI 实现从传感融合到智能规划的端到端解决方案

1. 项目概述 本项目旨在设计并实现一款高度自主的自动巡航无人机系统。该系统能够按照预设路径自主飞行&#xff0c;完成各种巡航任务&#xff0c;如电力巡线、森林防火、边境巡逻和灾害监测等。 1.1 系统特点 基于STM32F4和PX4的高性能嵌入式飞控系统多传感器融合技术实现精…