< 返回版块

baymax-xhl 发表于 2023-04-23 20:10

Tags:Rust,日报,其他和内容相关的

我用 Rust 编写了一个 ECS。

嗨,最近几天我写了一个自己的 ECS 库。目前我正在使用它来驱动我正在开发中的软件光线追踪器 treat 的世界,而我仍在学习计算机图形的所有基础知识。尽管如此,我很想得到一些有关我的 ECS 实现的反馈 :)

sweets 的结构:实体是一个包含两个 u32 位数的结构体。这两个数字组合在一起组成实体。第一个数字是实体的索引,第二个数字是代数。每次实体被删除时,其索引将保存在实体管理器内的 free_indices vec 中。这使我可以重复使用旧实体。为了使它们与具有相同索引的其他实体仍然独特,我有了代数。每次我删除实体时,我都会增加这个代数。为了检查实体是否存活,我可以比较实体的代数和实体管理器内代数 vec 中实体索引处存储的代数。所有这些都在 EntityManager 结构中管理。

组件可以是任何实现 default 的结构体。每个组件都会获得从10到组件数量不等的唯一索引。我的第一个想法是使用静态计数器,每个组件将使用它作为索引,并逐一递增,但它要么不递增,要么每次递增而不是只递增一次。因此,我采用了使用由 Rust 分配给每个组件的 TypeId 索引的哈希映射的方法。索引将被用于索引 ComponentPools 的 Vec,以获取正确的组件池。ComponentPool 保存每个具有此类型组件的实体的组件数据。当删除组件时,它将被释放到池中以便以后重用。使用索引,还可以创建 ComponentId。它只是左移指数的一位(1<<index)。这种方式只会翻转每个 ComponentId 中的一个位。通过按位或将它们组合起来,我得到所需组件的唯一标识符。

所有可能具有的组件的此标识符都由 ComponentManager 存储。

限制:目前我只能有64个不同的组件。如果我使用 u128,这个数字将加倍,但有些人仍然认为它非常有限。

我希望我的解释与源代码相结合,如果不行,请随时提问,我愿意接受任何反馈、想法或问题 :)

介绍 Netspeed:一个使用 Rust 构建的跨平台桌面应用程序,可以显示网络速度和当天的使用情况。

大家好,

很高兴与您分享我的一个项目:Netspeed。这是一个简单但有用的应用程序,可以显示您当前的上传和下载速度,以及当天的总数据使用量。

Netspeed 是用 Rust 和 Tauri 构建的,这使得它轻巧而快速。它支持 Windows、Linux 和 macOS,您可以从GitHub 发布页面下载它

Netspeed 是开源的,并根据 MIT 许可证获得许可。您可以在GitHub上找到源代码、文档和贡献指南

我希望您发现 Netspeed 有用。我很想听听您对如何改进它的反馈和建议。你可以在 GitHub 上联系我。

感谢您的关注与支持!

对于那些有兴趣的人,这里是我制作这个应用程序的旅程的简要总结:

我为 API(前端和后端之间的通信层)尝试了不同的后端选项。我尝试在 Tauri 中使用 HTTP、SSE(单客户端和多客户端)和 WebSocket。对于前端,我尝试使用 Python 和 Tauri。我还尝试制作一个单独的应用程序,使用 TCL(Python 提供的原始 Tkinter GUI 背后的语言)前端将 python 前端和 Rust 后端组合到一个模块中。在所有这些尝试之后,我决定制作一个将前端和后端作为一个单元的应用程序,就像您通常看到的那样。我在 Tauri 中做了一个版本,它使用 Tauri 自己的 WebSocket 来进行 Rust 和 JS 之间的通信。但最终决定不使用它,选择使用 Tauri 作为前端和单客户端 SSE 作为后端 rust 模块的版本。您可以在 GitHub 上找到不同版本的所有 repo 链接。它们都是根据 MIT 许可证获得许可的。

你可以在Github上找到所有的 repo 链接

欢迎任何疑问和查询。

Tridify-rs 0.2.2 发布:一个快速、简单的底层渲染框架

Tridify-rs(最初名为 Ldrawy,基于 Open GL)是一个非常简单但灵活且轻量级的低级别 GPU 渲染框架,基于 Wgpu 来创建自己的框架、引擎、模拟器... 无所不能!

发布图片

通常在我的项目中工作时,我会遇到相同的长时间模板设置窗口和图形上下文,如果使用 Wgpu 或 Vulkan,则会变得更糟,可能需要设置300行才能绘制一个三角形。参考其他语言中类似的框架(如 Three.js),我想为 Rust 创建类似的东西。

虽然它仍在不断发展中,可能缺少一些基本功能,但它已经可以在简单的小型项目中使用。

在0.2.2中,我的目标是将Egui集成到框架中,因为它极大地改善了可用性和创建工具和调试信息的便利性。从这个点开始,我将开始处理更复杂的系统,因此我希望确保我有一种方法来平滑路径。

发布图片

我鼓励您检查该项目并查看我将要开发的计划功能,请注意,由于该框架仍处于重度开发中,版本之间将会有破坏性变化。

此外,由于这是我使用 Rust 的第一个项目,任何批评或建议都是受欢迎的!

系统软件工程师 - Rust 编译器、工具和生态系统

我们正在组建一个新团队,专注于 Ubuntu 上的 Rust 编程语言及其生态系统。他们将在 Ubuntu 中提供最佳的 Rust 运行时、开发人员体验和支持工具。我们热衷于确保 Ubuntu 用户可以使用现代编程语言创新的前沿,为未来的发明和开源社区奠定基础。

对于热衷于开源软件、Linux 系统、软件架构和 Rust 编程语言的软件工程师来说,这是一个令人兴奋的机会。快来与 Canonical(一家成长中的国际软件公司)技术领域最优秀和最聪明的人一起建立一个有价值的、有意义的职业,并使 Ubuntu 成为在云、数据中心、容器中直接在服务器上开发和运行 Rust 应用程序的最佳操作系统。操作系统,以及 Ubuntu 可以运行的任何地方。

Ubuntu Foundations Team 提供核心 Ubuntu 系统,它是整个 Ubuntu 系列产品和服务的基础。Ubuntu 致力于以易于使用和高度可靠的形式提供最新最好的免费软件组件。我们以 Debian 的卓越技术为基础,并为我们为行业提供的解决方案带来更多关注和塑造。

作为 Ubuntu Foundations 团队的一员,您将致力于一些最关键的工具链,这些工具链涉及 Ubuntu 的制作,同时也是现代软件生态系统的支柱。您将利用您在 Rust 方面的经验和热情,使 Ubuntu 成为开发、分发和使用使用 Rust 构建的软件的最佳平台。申请人将对 Rust、Ubuntu 的未来充满热情,关注开源生态系统的动态,并同样意识到大型但创新组织的需求。申请人将以安全、可靠、高性能、高效和面向未来的方式推动 Ubuntu 中从桌面到云的最佳集成。

您将与其他团队成员讨论设计并指导不太高级的工程师,并参与代码审查和设计审查。您还将与其他团队合作,确保架构决策能够提高 Ubuntu 的整体性能和体验。作为 Ubuntu Foundations 团队的一员,您的角色将对 Ubuntu 的各个方面产生影响,从桌面、服务器、Ubuntu Core 到云映像。

你会做什么

  • 主动与分布式团队协作
  • 使用 Ubuntu 选择、集成和打包最佳工具,以改善开发人员和运维人员的 Rust 体验
  • 编写高质量代码以创建新功能
  • 调试问题并生成高质量的代码来修复它们
  • 审查其他工程师生成的代码
  • 讨论想法并合作寻找好的解决方案
  • 在家工作,每年 2 到 4 周进行全球旅行,参加内部和外部活动

你是谁

  • 你热爱技术并与优秀的人一起工作
  • 你热情、好奇、灵活、善于表达、负责任
  • 你是一个长期的 Linux 用户
  • 您有经验或有兴趣学习如何为 Debian 和 Ubuntu 打包软件
  • 你有相关的 Rust 经验,最好是在云原生软件和 Linux 领域
  • 您拥有计算机科学、STEM 或类似学位的学士学位或同等学历
  • 您重视软技能并且充满激情、进取心、体贴和自我激励

Canonical 是一家成长中的国际软件公司,它与开源社区合作,提供世界上最好的免费软件平台 Ubuntu。我们的服务帮助全球企业通过 Ubuntu 降低成本、提高效率并增强安全性。

我们为营造一个没有歧视的工作场所而感到自豪。经验、观点和背景的多样性创造了更好的工作环境和更好的产品。无论您的身份如何,我们都会公平考虑您的申请。

申请编号:933

申请链接:https://canonical.com/careers/4383713

From 日报小组 时光

社区学习交流平台订阅:

评论区

写评论
Wing0v0 2023-04-24 09:04

请问 <ECS 库> 有源码地址吗?

1 共 1 条评论, 1 页