Merge branch 'main' into patch-1

This commit is contained in:
Samson 2024-11-03 10:53:12 +01:00 committed by GitHub
commit a2c355f6ae
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 604 additions and 455 deletions

885
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -20,6 +20,10 @@
"name": "clippy",
"link": "https://github.com/rust-lang/rust-clippy#usage",
"notes": "The official Rust linter."
}, {
"name": "cargo-semver-checks",
"link": "https://github.com/obi1kenobi/cargo-semver-checks",
"notes": "Lint your crate releases for semantic versioning violations."
}]
},
{
@ -36,6 +40,10 @@
"name": "cross",
"link": "https://github.com/cross-rs/cross#cross",
"notes": "Seamless cross-compiling using Docker containers."
}, {
"name": "cargo-zigbuild",
"link": "https://github.com/rust-cross/cargo-zigbuild",
"notes": "Easily cross-compile using Zig as the linker."
}]
},
{
@ -76,6 +84,11 @@
"name": "cargo-nextest",
"link": "https://nexte.st",
"notes": "Faster, better test runner"
},
{
"name": "insta",
"link": "https://insta.rs",
"notes": "Snapshot testing with inline snapshot support"
}]
},
{
@ -83,6 +96,9 @@
"recommendations": [{
"name": "criterion",
"notes": "Statistically accurate benchmarking tool for benchmarking libraries"
}, {
"name": "divan",
"notes": "Simple yet powerful benchmarking library with allocation profiling"
}, {
"name": "hyperfine",
"link": "https://github.com/sharkdp/hyperfine#hyperfine",
@ -118,6 +134,10 @@
"name": "cargo-release",
"link": "https://github.com/crate-ci/cargo-release#cargo-release",
"notes": "Helper for publishing new crate versions."
}, {
"name": "Release-plz",
"link": "https://release-plz.ieni.dev/",
"notes": "Release Rust crates from CI with a Release PR."
}]
},
{
@ -134,6 +154,10 @@
"name": "Sccache Action (github action)",
"link": "https://github.com/marketplace/actions/sccache-action#sccache-action",
"notes": "Github action to integrate sccache into CI."
}, {
"name": "install-action (github action",
"link": "https://github.com/taiki-e/install-action",
"notes": "GitHub Action for installing development tools (mainly from GitHub Releases)."
}]
}
]
@ -298,9 +322,10 @@
"purposes": [
{
"name": "Lazy static variable initialization",
"notes": "The core functionality of once_cell is now <a href=\"https://doc.rust-lang.org/stable/std/cell/struct.OnceCell.html\">included in the standard library</a> with the remaining parts <a href=\"https://github.com/rust-lang/rust/issues/109736\">on track</a> to be stabilised in future.",
"recommendations": [{
"name": "once_cell",
"notes": "Newer crate with more ergonomic API. On track to be incorporated into the standard library. Should be preferred for all new projects."
"notes": "Newer crate with more ergonomic API. Should be preferred for all new projects."
}, {
"name": "lazy_static",
"notes": "Older crate. API is less convenient, but crate is stable and maintained."
@ -324,12 +349,17 @@
}, {
"name": "paste",
"notes": "Concatenating and manipulating identifiers"
}, {
"name": "darling",
"notes": "Derive macro to easily parse derive macro inputs"
}]
},
{
"name": "Safe type casts",
"recommendations": [{
"name": "bytemuck"
}, {
"name": "zerocopy"
}]
},
{
@ -373,6 +403,9 @@
{
"name": "*nix (OSs)",
"recommendations": [{
"name": "rustix",
"notes": "Efficient and safe POSIX / *nix / Winsock syscall-like APIs. It uses idiomatic Rust types: refs, slices, Results instead of raw pointers, safe wrappers around raw file descriptors, bitflags instead of bare integer flags, and several other conveniences."
}, {
"name": "nix",
"notes": "Bindings to the various *nix system functions. (Unix, Linux, MacOS, etc.)"
}]
@ -423,7 +456,8 @@
{
"name": "DataFrames",
"recommendations": [
{ "name": "polars", "notes": "Similar to the Pandas library in Python but in pure Rust. Uses the Apache Arrow Columnar Format as the memory model." }
{ "name": "polars", "notes": "Similar to the Pandas library in Python but in pure Rust. Uses the Apache Arrow Columnar Format as the memory model." },
{ "name": "datafusion", "notes": "<a href=\"https://arrow.apache.org/datafusion\">Apache DataFusion</a> is an in-memory query engine that uses Apache Arrow as the memory model" }
]
}
]
@ -495,6 +529,12 @@
"recommendations": [
{ "name": "rustler", "notes": "Safe Rust bridge for creating Erlang NIF functions" }
]
},
{
"name": "Kotlin/Swift/Python/Ruby",
"recommendations": [
{ "name": "uniffi", "notes": "Share Rust codebase to create cross-platform apps (also 3rd party support for Kotlin Multiplatform, Go, C#, Dart)" }
]
}
]
},
@ -674,7 +714,7 @@
}],
"see_also": [{
"name": "rocket",
"notes": "Has an excellent API and a solid implementation. However development has been intermittent, and the async branch still doesn't have a stable release. Use of rocket is not recommended until this has been fixed."
"notes": "Has an excellent API and a solid implementation. However development has been intermittent."
}, {
"name": "poem",
"notes": "Automatically generates OpenAPI definitions."
@ -797,6 +837,9 @@
}, {
"name": "oracle",
"notes": "Rust bindings to ODPI-C"
}, {
"name": "sibyl",
"notes": "An OCI-based interface supporting both blocking (threads) and nonblocking (async) AP"
}]
}
]
@ -823,6 +866,14 @@
"name": "elasticsearch"
}]
},
{
"name": "LMDB",
"notes": "<a href=\"https://github.com/mozilla/rkv\">The rkv crate</a> depends on <a href=\"https://github.com/mozilla/lmdb-rs\">the lmdb-rkv dependency</a> which is archived and is inactive.",
"recommendations": [{
"name": "heed",
"notes": "A fully typed LMDB wrapper with minimum overhead."
}]
},
{
"name": "Rocks DB",
"recommendations": [{
@ -919,6 +970,20 @@
"name": "notify",
"notes": "Watch files or directories and execute a function when they change"
}]
},
{
"name": "User directories",
"recommendations": [{
"name": "dirs",
"notes": "Provide platform-specific locations for configuration, cache, and other data"
}, {
"name": "directories",
"notes": "A higher-level library that can also compute paths for applications"
}],
"see_also": [{
"name": "etcetera",
"notes": "An alternative with a different license"
}]
}
]
},
@ -950,6 +1015,13 @@
"name": "crossterm",
"notes": "Low-level cross-platform terminal rendering and event handling"
}]
},
{
"name": "Interactive prompts",
"recommendations": [{
"name": "inquire",
"notes": "Ask for confirmation, selection, text input and more"
}]
}
]
}
@ -1025,7 +1097,6 @@
{
"slug": "gui",
"name": "GUI",
"description": "GTK and Tauri are probably the only options which can be described as production-ready without caveats.<br />The Rust native options are usable for simple projects but are all still quite incomplete.",
"purposes": [
{
"name": "GTK",
@ -1048,42 +1119,56 @@
}]
},
{
"name": "Rust Native GUI",
"name": "Immediate Mode Native GUI",
"recommendations": [{
"name": "egui",
"notes": "Immediate-mode UI. Lots of widgets. The most useable out of the box if your needs are simple and you don't need to customise of the look and feel"
}]
},
{
"name": "Retained Mode Native GUI",
"recommendations": [{
"name": "iced",
"notes": "Retained mode UI with a nice API. It's useable for basic apps, but has a number of missing features including multiple windows, layers, and proper text rendering."
}, {
"name": "egui",
"notes": "Immediate-mode UI. Lots of widgets. The most useable out of the box if your needs are simple and you don't need to customise of the look and feel"
"name": "floem",
"link": "https://github.com/lapce/floem",
"notes": "Inspired by Xilem, Leptos and rui, floem is currently more complete than any of them for native UI. Used by the Lapce text editor."
}, {
"name": "slint",
"notes": "Possibly the most complete rust-native UI library. But note that it's dual GPL3/commercial licensed."
}],
"see_also": [{
"name": "vizia",
"link": "https://github.com/vizia/vizia",
"notes": "Fairly complete with sophisticated layout and text layout but has yet to make a stable release."
"notes": "Fairly complete with sophisticated layout and text layout, but has yet to make a stable release."
}],
"see_also": [{
"name": "xilem",
"link": "https://github.com/linebender/xilem",
"notes": "The replacement for Druid based on the more interoperable Vello and Glazier crates. However, it's currently not complete enough to be usable."
}, {
"name": "freya",
"link": "https://github.com/marc2332/freya",
"notes": "Dioxus-based GUI framework using Skia for rendering."
}, {
"name": "slint",
"notes": "Possibly the most complete rust-native UI library. But note that it's dual GPL3/commercial licensed."
}, {
"name": "druid",
"notes": "Druid is a relatively mature alternative to Iced/Slint, however it has been discontinued in favour of Xilem so it's use for new projects is discouraged."
}, {
"name": "xilem",
"link": "https://github.com/linebender/xilem",
"notes": "The replacement for Druid based on the more interoperable Vello and Glazier crates. However, it's currently not complete enough to be usable."
"name": "gpui",
"link": "https://github.com/zed-industries/zed/tree/main/crates/gpui",
"notes": "High performance framework used in the Zed text editor. Now available on macOS and linux."
}, {
"name": "rui",
"notes": "SwiftUI inspired UI framework."
"name": "makepad",
"link": "https://makepad.dev/",
"notes": "Makepad has a strong focus on performance and minimising bloat but is consequently less feature complete in areas such as accessibility and system integration."
}, {
"name": "concoct",
"notes": "Jetpack compose inspired UI framework. Promising but still immature, even compared to other Rust GUI frameworks."
}, {
"name": "kas",
"notes": "One of the older Rust GUI crates, but it never seems to have caught on for some reason"
}]
"name": "ribir",
"link": "https://ribir.org/"
},
{ "name": "cushy" },
{ "name": "rui" },
{ "name": "concoct" },
{ "name": "kas" }]
}, {
"name": "Window creation",
"recommendations": [{
@ -1102,17 +1187,23 @@
"notes": "Specialized window creation library targetting windows to be embedded in other applications (e.g. DAW plugins)"
}]
}, {
"name": "2D Canvas Renders",
"name": "2D Renderers",
"recommendations": [{
"name": "femtovg",
"notes": "Pure Rust. Offers a simple API. Probably the easiest to get started with."
"notes": "OpenGL based. Offers a simple API. Probably the easiest to get started with."
}, {
"name": "skia-safe",
"notes": "Based on the Skia C++ library. The most complete option with the best performance. However, it can be difficult to get it to compile."
"notes": "Bindings to the Skia C++ library. The most complete option with excellent performance. However, it can be difficult to get it to compile."
}, {
"name": "vello",
"link": "https://github.com/linebender/vello",
"notes": "Pure Rust, and uses cutting edge techniques to render using the GPU. Still somewhat immature and hasn't yet put out a stable release."
"notes": "WGPU based and uses cutting edge techniques to render vector paths using the GPU. Still somewhat immature and hasn't yet put out a stable release."
}, {
"name": "vger",
"notes": "A simpler WGPU based option which is less innovative but currently more stable than vello."
}, {
"name": "webrender",
"notes": "OpenGL based. Mature with production usage in Firefox but documentation and OSS maintenance are lacking."
}]
}, {
"name": "UI layout",
@ -1141,13 +1232,9 @@
}]
}, {
"name": "Clipboard",
"notes": "Both cli-clipboard and copypasta are forks of the original rust-clipboard that add support for wayland.",
"recommendations": [{
"name": "cli-clipboard",
"notes": ""
}, {
"name": "copypasta",
"notes": ""
"name": "arboard",
"notes": "A fork of rust-clipboard that supports copy and pasting of both text and images on Linux (X11/Wayland), MacOS and Windows."
}]
}, {
"name": "File Dialogs",
@ -1164,10 +1251,13 @@
"purposes": [
{
"name": "Game Engines",
"notes": "Bevy is the clear winner for complex games (and especially 3D games). For those wanting something simpler, both ggez and macroquad are good options",
"notes": "",
"recommendations": [{
"name": "bevy",
"notes": "By far the most developed Rust game engine. It's still early, but already impressive and very much useable."
"notes": "An ECS based game engine, good for 3D but also capable of 2D."
}, {
"name": "fyrox",
"notes": "An OOP-focused game engine with 3D and 2D support and a full GUI scene editor."
}, {
"name": "ggez",
"notes": "A simpler option for 2d games only."

View file

@ -2,20 +2,20 @@
{
"name": "VS Code",
"url": "https://code.visualstudio.com/",
"editor_plugins": "Rust Analyzer (note: avoid the \"Rust\" plugin. It is in the process of being deprecated and has a number of issues that are solved in the new Rust Analyzer plugin)",
"editor_plugins": "Rust Analyzer (note: avoid the \"Rust\" plugin. It is deprecated and has a number of issues that are solved in the new Rust Analyzer plugin)",
"notes": "Generally recommended"
},
{
"name": "Intellij/CLion",
"name": "RustRover",
"url": "https://www.jetbrains.com/rust/",
"editor_plugins": "Rust Plugin",
"notes": "Well supported. A good option if you like Intellij products."
"editor_plugins": "None needed, everything works out of the box",
"notes": "A full blown Rust IDE by JetBrains. A good option if you like Intellij products."
},
{
"name": "Sublime Text",
"url": "https://www.sublimetext.com/",
"editor_plugins": "sublime-lsp and lsp-rust-analyzer plugins",
"notes": "Well supported. A good option if you like Intellij products."
"editor_plugins": "sublime-lsp combined with lsp-rust-analyzer, Rustfmt and Rust Enhanced plugins",
"notes": "Great if you like a distraction-free editor."
},
{
"name": "Vim/NeoVim",
@ -35,4 +35,4 @@
"editor_plugins": "TBD",
"notes": "If you know you know. Not recommended for beginners."
}
]
]