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

news2024/9/22 3:48:27

引言

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.coloradmin.cn/o/1923030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过maven基于springboot项目构建脚手架archetype

1、引入脚手架构建的插件依赖 <!--构建脚手架archetype--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-archetype-plugin</artifactId><version>3.2.1</version></plugin><plugin><…

Go语言---网络编程基础知识

网络协议 从应用的角度出发&#xff0c;协议可理解为“规则”&#xff0c;是数据传输和数据的解释的规则。 假设&#xff0c;A、B 双方欲传输文件。规定: 第一次&#xff0c;传输文件名&#xff0c;接收方接收到文件名&#xff0c;应答OK 给传输方;第二次&#xff0c;发送文件…

美食菜谱点评小程序

美食菜谱点评小程序 功能介绍 用户注册登录&#xff1a;注册账号&#xff0c;然后使用注册的账号登录。 资讯功能&#xff1a;用户可以任意浏览资讯列表和详细信息。 美食菜谱库&#xff1a;点击所有菜谱菜单&#xff0c;支持查看所有的菜谱信息。 菜谱查询&#xff1a;在菜谱…

网络基础知识--网络硬件设备介绍(含eNSP模拟器命令使用)

华为 eNSP 模拟器安装教程可参考&#xff1a;华为 eNSP 模拟器安装教程&#xff08;内含下载地址&#xff09;_ensp下载-CSDN博客 华为eNSP&#xff08;Enterprise Network Simulation Platform&#xff09;模拟器是一款由华为提供的免费网络仿真平台&#xff0c;主要用于模拟和…

MES实时监控食品加工过程中各环节的安全

在实时监控食品加工过程中各环节的安全风险方面&#xff0c;万界星空科技的MES&#xff08;制造执行系统&#xff09;解决方案发挥了至关重要的作用。以下是具体如何通过MES系统实现实时监控食品加工过程中各环节安全风险的详细阐述&#xff1a; 一、集成传感器与实时监控 MES…

JDK 和 JRE:它们之间的区别是什么?

JDK 和 JRE&#xff1a;它们之间的区别是什么&#xff1f; 1、JRE&#xff08;Java Runtime Environment&#xff09;1.1 JRE的主要组成部分1.2 JRE的用途 2、JDK&#xff08;Java Development Kit&#xff09;2.1 JDK的主要组成部分2.2 JDK的用途 3、总结 &#x1f496;The Be…

景联文科技以高质量多模态数据集赋能AI大模型,精准匹配提升模型性能

在人工智能的浪潮中&#xff0c;语料数据如同建筑的基石&#xff0c;其质量、规模和运用策略直接决定了AI模型的表现和应用的广泛性。 景联文科技在AI领域深耕多年&#xff0c;打磨了高质量多模态数据集&#xff0c;致力于为不同训练阶段的算法精准匹配高质量数据资源。 3000万…

AI 助力,歌词创作不再是难题

在音乐的世界里&#xff0c;歌词创作一直被视为一项充满挑战和灵感的艺术工作。然而&#xff0c;随着科技的飞速发展&#xff0c;AI 技术的出现正在悄然改变这一局面&#xff0c;让曾经困扰众多创作者的难题迎刃而解。 “妙笔生词智能写歌词软件&#xff08;veve522&#xff0…

C语言中字符串(字符数组)中含有 0x00 (‘\0‘)引发的问题和解决办法

问题 在C语言中&#xff0c;字符串是以空字符&#xff08;null character&#xff0c;即\0或0x00&#xff09;结尾的字符数组。这种设计意味着字符串中的任何 0x00 字符都会被解释为字符串的结束。因此&#xff0c;如果字符串内部包含0x00字符&#xff0c;这实际上会将字符串分…

03、Kerberos安全认证之配置和访问Kerberos安全认证的Hadoop集群学习笔记

文章目录 前言一、Hadoop集群 Kerberos安全配置详细步骤1.1、安装libcrypto.so库1.2、创建HDFS服务用户1.3、配置各服务用户两两节点免密1.4、修改本地目录权限1.5、创建各服务Princial主体1.6、修改Hadoop配置文件1.6.1、配置core-site.xml1.6.2、配置hdfs-site.xml1.6.3、配置…

怎样在 PostgreSQL 中优化对时间序列数据的存储和查询策略?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 《PostgreSQL 中时间序列数据的优化存储与查询策略》 《PostgreSQL 中时间序列数据的优化存储与查询策…

同步低通滤波结合全变分的一维时间序列降噪方法(MATLAB)

关于全变分模型&#xff0c;可以参考&#xff1a; 如何理解全变分&#xff08;Total Variation&#xff0c;TV&#xff09;模型&#xff1f;- imxtx的回答 - 知乎 https://www.zhihu.com/question/47162419/answer/2585330101 全变分去噪的基本思想是&#xff0c;如果图像的…

gin源码分析

一、高性能 使用sync.pool解决频繁创建的context对象&#xff0c;在百万并发的场景下能大大提供访问性能和减少GC // ServeHTTP conforms to the http.Handler interface. // 每次的http请求都会从sync.pool中获取context&#xff0c;用完之后归还到pool中 func (engine *Engin…

前端Canvas入门——Canvas的一些注意事项

如果我们使用标签的方式去创建Canvas&#xff0c;可以发现&#xff1a; 在我们创建画笔的时候&#xff0c;是不会有任何提示的。 这意味着&#xff0c;你需要记住所有API代码——这就很烦人。 那么&#xff0c;又没有一种优雅的、不失格调的方法&#xff1f; 那就是使用JS去创…

内网对抗-代理通讯篇不出网或不可达SockS全协议规则配置C2正反向上线解决方案

知识点 1、代理隧道篇-代理通讯网络不可达-正反向连接上线 2、代理隧道篇-代理通讯网络不可达-SockS代理配置 实现步骤 1、在被控机器上获取下一级网段 2、在被控及其上建立SockS节点 3、在工具上配置连接属性和规则触发演示案例-代理技术-正反向监听/SockS配置-网络不可达…

LabVIEW航空发动机试验器数据监测分析

1. 概述 为了适应航空发动机试验器的智能化发展&#xff0c;本文基于图形化编程工具LabVIEW为平台&#xff0c;结合航空发动机试验器原有的软硬件设备&#xff0c;设计开发了一套数据监测分析功能模块。主要阐述了数据监测分析功能设计中的设计思路和主要功能&#xff0c;以及…

Ubuntu使用Nginx部署uniapp打包的项目

使用uniapp导出web项目&#xff1a; 安装&#xff1a; sudo apt install nginx解压web.zip unzip web.zip移动到/var/www/html目录下&#xff1a; sudo cp -r ~/web/h5/ /var/www/html/重启Nginx&#xff1a; sudo service nginx restart浏览器访问&#xff1a;http://19…

Docker安装RabbitMQ(带web管理端)

1.拉取带web管理的镜像 可以拉取rabbitmq对应版本的web管理端&#xff0c;比如&#xff1a;rabbitmq:3.9.11-management&#xff0c;也可以直接拉取带web管理端的最新版本 rabbitmq:management. docker pull rabbitmq:3.9.11-management 注意&#xff1a;如果docker pull ra…

图像处理:使用 OpenCV-Python 卡通化你的图像(2)

一、说明 在图像处理领域&#xff0c;将图像卡通化是一种新趋势。人们使用不同的应用程序将他们的图像转换为卡通图像。如今&#xff0c;玩弄图像是许多人的爱好。人们通常会点击图片并添加滤镜或使用不同的东西自定义图像并将其发布到社交媒体上。但我们是程序员&#xff0c;…

基于重叠群稀疏的总变分信号降噪及在旋转机械故障诊断中的应用(MATLAB)

基于振动分析的故障诊断方法基本流程主要由以下五个步骤组成&#xff0c;分别是信号采集、信号处理、特征提取、状态识别与诊断结果。这五个步骤中信号采集与特征提取是故障诊断中最为重要的步骤&#xff0c;而故障微弱特征信息又是其中最难解决的问题。“故障微弱特征信息”站…