Git Product home page Git Product logo

blessed-rs's Introduction

A community guide to the Rust ecosystem

blessed-rs's People

Contributors

0xflotus avatar adamchalmers avatar adammitha avatar atezet avatar attila-lin avatar baptiste0928 avatar ccothrun avatar colin99d avatar didibear avatar djc avatar ecklf avatar ethransom avatar falkwoldmann avatar hniksic avatar ilyagr avatar jack-sibley avatar jdtw avatar joshka avatar jskitty avatar jtdowney avatar kanegreen avatar krojew avatar lioncat2002 avatar lukad avatar lukehsiao avatar marc2332 avatar nicoburns avatar oconnor663 avatar reynn avatar senekor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

blessed-rs's Issues

Add Fyrox game engine

I think adding fyrox to the list of game engine would complete it. Fyrox is a OOP Game engine with an UI for rust and is definitively worth mentioning.

Consider mentioning indicatif

(Full disclosure, I am a maintainer for indicatif.)

I think indicatif is probably the de facto standard progress bar library for CLIs, might make sense to mention in the CLI section?

Add `heapless` to `Common > General > Stack-allocated arrays` (and other data structures)

Alongside arrayvec and tinyvec, heapless has stack-allocated arrays, but also includes:

  • Arc – like std::sync::Arc but backed by a lock-free memory pool rather than #[global_allocator]
  • Box – like std::boxed::Box but backed by a lock-free memory pool rather than #[global_allocator]
  • BinaryHeap – priority queue
  • IndexMap – hash table
  • IndexSet – hash set
  • LinearMap
  • Object – objects managed by an object pool
  • String
  • Vec
  • mpmc::Q* – multiple producer multiple consumer lock-free queue
  • spsc::Queue – single producer single consumer lock-free queue

Consider adding inquire

I recently discovered inquire, which is just what I needed at the time. It was one of those "I wish someone (like blessed.rs) had told me about this sooner!"

That being said, I haven't put much more thought into whether it's a good fit for the site beyond that it seems high quality and useful for a broad range of use cases. I'm guessing there's more that goes into the descision? Popularity, maintenance status...

I'd say CLIs > Terminal Rendering would be an appropriate place.

Thanks for considering it.

What the *ring* crate provides

You've listed ring in the TLS/SSL section, but it actually provides many of the same crypto primitives (AEADs, hashes, signatures) as the RustCrypto crates, so maybe that should be more clearly explained?

I actually think webpki and ring probably shouldn't be mentioned in the TLS section, since they're low-level building blocks that rustls uses but that aren't very friendly as libraries.

Notify and watchexec

Watchexec (the library) is extremely focused on, like, making watch tools. It's only used by a few things, because it has that very particular focus. Notify is the general purpose filesystem watching library. That's the part that's used by like, RA and mdBook and alacritty and all that.

bpaf vs clap

It seems quite surprising to me that bpaf comes before clap in the current version, when the former has some 12k recent downloads compared to clap's 15M. I wouldn't disagree that clap might be ripe for disruption, but in terms of the ecosystem it seems that clap is still the favorite by far.

Correct the diesel entry

Stable release is sync only. Pre-release async branch is currently AGPL.

Neither of this is true:

  • There is no pre-release branch for async support in diesel. It's a different crate, so it should likely be listed as a separate entry
  • That crate is not licensed as AGPL code anymore

Needs a section on database crates

One important section I noticed missing is database related crates.

Just to kick off the list, here are some popular database libraries:

  • SQLx: Async SQL library with support for PostgreSQL, MySQL, SQLite, and MSSQL
  • SeaQuery: SQL query builder
  • SeaORM: Async ORM (built on top of SQLx and SeaQuery)
  • Diesel: Sync ORM

surf isn't getting much maintenance

I think the mention of surf should probably come with a caveat, at least:

http-rs/surf#352

For one thing, the latest release of surf (and current Git) still depend on a rustls version from over 2 years ago (2 semver-incompatible versions ago).

Add a link somewhere

I could guess that rs is a tld, but it would be nice to see that this repo is actually hosted. I just found it through my github activity :)

Question: something similar for Go?

This is a great list. I just wonder: is there something similar for Go? My problem is the same: I have no idea which package to pick. Thanks in advance.

Add various encoding crates

One fairly common usecase that doesn't seem to be covered by crates on blessed.rs is encoding text and binary data.
In particular I think there are two main cases:

  • Encoding strings with a non-UTF8 encoding
    • UTF8 encoding is well supported by the standard library, but for other encodings you need an external library. The main choice for this seems to be encoding_rs.
  • Encoding binary data to string. In particular the two common cases here are hex and base64.
    • For hex there is the crate hex. This crate hasn't had a release in 2 years and there are a number of unmerged pull requests. I don't know if this is a cause for concern or not.
    • For base64 there is base64.
    • Another popular one seems to be data-encoding, which supports hex, base64 and a few other encodings.

It would be nice if at least some more stable and well maintained encoding crates could be added to blessed.rs, especially since encoding is an area where both performance and correctness are important, so you would want to prefer crates that have been vetted by the community.

Page information is outdated and sometimes misleading

Thank you for an effort to create this list.

However, I have a few points to address:

  1. Page don't need to contain rust source. Whole page can be simplified to page generated from AsciiDoc sources with a custom CSS.
  2. Page information contains many claims without any source links, co these claims can't be trusted. If information had been taken from an issue, issue link must be provided, if an article, lemmy, mastodon or another source, the same.
    1.page information contains no version information for projects, thus it's hard to say if claim is true or false at time of reading.
  3. At the time of writing lib.rs and crates.io contain way more libs and tools on each topic, some of them could be added manually to the list.
  4. I hope this page is populated not only by issues but also checked manually from time to time. It would be misleading if not (see point about claim sources).

include the `nix` crate?

I don't know exactly what the inclusion criteria are for blessed.rs, but nix has almost as many downloads as winapi :) More subjectively, I think folks who are new to the Rust ecosystem and who benefit the most from blessed.rs, also have the most to gain from the safety provided by nix.

Add cargo-zigbuild crate

cargo-zigbuild is a really handy tool for easy cross compilation using Zig as a linker. It's already being used by cargo-lambda. As an alternative to cross, it stands out because it doesn't require any containers. In my own experience, cargo-zigbuild was much faster and easier to use than cross.

Add some arena crates

Arenas can be categorized into three kinds:

  • bump arenas: No reuse of the backing storage is supported
  • non-generational arenas: Reuse of the backing storage is supported, but indices can be reused, potentially resulting in ABA problems
  • generational arenas: Reuse of the backing storage is supported and indices are never reused

My suggestions are:

  • bumpalo for a Drop-less heterogenous bump arena
  • typed-arena for a homogenous bump arena
  • slab for a homogenous non-generational arena
  • slotmap for a homogenous generational arena

All four are well-maintained and used.

Add "unstable" indicator to pre-1.0 packages?

Would you be open to a PR adding either a major version indicator or an "unstable" indicator to the packages?

Something like this, for example:
Screenshot 2024-02-25 at 11 58 15

It's a useful thing to know when comparing libraries "at a glance".

Mention frameworks under websockets

I think it would be useful to add another category to the websocket section that lists the web frameworks that support websockets. I know that you mention that frameworks often support them above the list, but it is easy to miss. I think it would make it more clear to instead list them under a new category called "As part of a web framework" or similar.

`byteorder` probably isn't common in new code?

I think byteorder was common and indispensable prior to the introduction of to_<endian>_bytes and from_<endian>_bytes in Rust 1.32. But now that those are standard, I think it's less common to have a need for that crate in new code.

Add rouille as a "see also" web framework

I think that adding Tomaka's Rouille would be warranted: https://crates.io/crates/rouille

Why? Because it's mature and its stack and philosophy is significantly different from many of the other frameworks. It doesn't use Hyper or Tokio, but mini-http as its HTTP implementation. It eschews async, and provides a simple, linear microframework-style API. In this sense, it is the "go-to" experience if you want to quickly set up a simple non-async web service.

Rustqlite typo

Rustqlite isn't a crate - I think this should be rusqlite

bpaf description seems a bit odd

In particular what are those rough edges and which parts of the API are confusing?

Comments I encounter on the Internet are mostly in favor of it as having small and flexible API and with derive macro until you start doing strange things the difference with clap is mostly with what you derive and how you run it. And once you do start doing strange things - everything comes from a combination of a few rules similarly to how you would chain iterators...

https://news.ycombinator.com/item?id=35734051

Oddly on the cli parsing thing, I did end up finding a library I like - bpaf. It's kind of abstract but seems more conceptually principled than the near-universal clap. The kind of abstraction where once you have grasped a small set of orthogonal concepts, you can just combine them at will, seems OK to me. As contrasted with the type which has dozens of small rules, and special cases that rely heavily on (human) memory and/or constant doc lookups.

add parser library

Hi.

Is there any chance to add parser library. Such as nom and pest?

Thanks!

Adding ratatui ?

It was recently mentioned here that we should consider adding ratatui to blessed.rs. I hadn't heard of blessed.rs before so I am unfamiliar with the process for adding a project to it.

The ratatui fork was recently created as the original maintainer of the tui crate was no longer responding. The crate is being actively maintained and we are about to release the first version of the crate since the fork.

Create short permalinks for sections and crates

It is currently possible to link directly to a section of blessed.rs using a link like https://blessed.rs/crates#section-graphics-subsection-gui, which works however:

  • The links are long an unwieldy
  • The links are tied to the section name which is liable to change

We should add "short links" like https://blessed.rs/crates#gui which are snappy and can also be preserved if/when the crates list is reorganised. We could also add crate specific links like https://blessed.rs/crates#axum or similar.

Add zerocopy to Safe type casts

Zerocopy is an alternative to bytemuck that has similar popularity and I believe is worth adding.

While bytemuck has ~3x more all-time downloads, zerocopy, by both crates.io and lib.rs metrics, is currently getting more monthly downloads. After trying both crates myself, I can't necessarily recommend one over the other; they both achieved the exact same thing. I personally landed with zerocopy but that was mostly down to it having more recent downloads, being under Google, and having a roadmap for future improvements.

Crate suggestion: `getargs`

Since lexopt and pico-args are mentioned in the argument parser section, I would like to propose getargs, which I significantly revamped a while ago. (it also works quite well with argv)

It is still a minimal argument parser, as opposed to the huge framework that is clap, but it is fairly competitive in benchmarks and also somewhat pedantic about correctness. It also has a decent API as far as I can tell, though it is still iterator-based.

It was not accepted into argparse-benchmarks-rs due to the low number of downloads that it has. But the purpose of this website is to raise awareness, yes? :D

Contributing on a regular basis?

If you'd like, I'd be happy to help review changes here? You mentioned on HN:

I want to put together more guidance on how to contribute, and gradually transition this into more of a community maintained model over time, but I haven't had a chance to do this yet.

I could just start watching the repo -- maybe you could set up branch protection so that PRs are required, and I'd have a chance to give feedback.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.