[HN Gopher] Blessed.rs - An unofficial guide to the Rust ecosystem ___________________________________________________________________ Blessed.rs - An unofficial guide to the Rust ecosystem Author : andrewshadura Score : 224 points Date : 2022-11-07 14:25 UTC (8 hours ago) (HTM) web link (blessed.rs) (TXT) w3m dump (blessed.rs) | kjaleshire wrote: | This reads suspiciously similar to the Rust Platform proposal in | 2016 [0] and was concensus-rejected by the community [1]. | | [0] https://news.ycombinator.com/item?id=12177002 | | [1] https://internals.rust-lang.org/t/follow-up-the-rust- | platfor... | iot_devs wrote: | I ways wonder what would happen if you were to promise | maintenance of those packages and improved doc, and then slap a | pricing page for corporate. | GolDDranks wrote: | Some more I'd wish to see on the page: | | - slotmap | | - memchr | | - bytecount | | - rouille | | - csv | maxbond wrote: | Submit a PR or open an issue! | | https://github.com/nicoburns/blessed-rs | epage wrote: | Doesn't bstr replace memchr? Unsure if it replaces bytecount. | burntsushi wrote: | No. bstr depends on memchr. | | bytecount is faster than memchr for counting occurrences for | bytes. It doesn't have to stop and report offsets. It can | just zip through and count. | pornel wrote: | I've developed a list of common crates based on the number of | active users: | | https://lib.rs/std | bogeholm wrote: | And thank you for that! Love lib.rs | gavinray wrote: | It's worth mentioning: Under "Async Executors", for "io_uring" | there is only "Glommio" | | I recently found out that ByteDance has a competitor library | which supposedly has better performance: | | https://github.com/bytedance/monoio | | https://github.com/DataDog/glommio/issues/554 | nicoburns wrote: | This is my project (although I didn't submit this to HN), AMA | | I consider quite incomplete at this point (but hopefully already | useful). There are several categories of crate that just aren't | covered yet (suggestions very welcome, either here or on the | github repo https://github.com/nicoburns/blessed-rs). | | I'd also like to add more hand curated content such as: | | - Installation and developer environment setup - Link to learning | resources (books, projects, etc) - Explanations of the community | (reddit, TWIR, discourse, github, zulip, etc) - Themed guides | (backend web development, CLI tools, game development, etc) | | 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. | outside1234 wrote: | Thanks for putting this together. | | Some other ideas: | | * Config: dotenvy | | * Database: sqlx (async), diesel (sync, ORM) | | * gRPC: prost (protobuf library) | TotempaaltJ wrote: | Another for config: https://crates.io/crates/config | rob74 wrote: | Thanks for compiling this! One small nitpick: "De facto random | number generation library" doesn't mean what you probably want | to say, it should be "De facto _standard_ [...] library ". | Otherwise the "de facto" applies to "library", and that doesn't | really make sense (at least not in Rust, where it's very well | defined what can be called a library and what not)... | c0balt wrote: | Just a small suggestion might be the category templating | engines (incomplete list, based on my experience): | | - askama | | - tera | | - liquid | | And more importantly logging, due to this being a common | usecase: | | - log | | - ... and companions | | - (maybe even advanced things, like opentelemetry) | rob74 wrote: | OTOH, this is supposed to be a list of "de facto standard" | libraries. If there are several alternatives with no clear | "winner", that may not be a good fit for this list? | mrits wrote: | Bless you. I keep a boilerplate crate around like this with | everything I frequently use already imported with some notes | about why I chose it over alternatives. I wonder if you would | take some pull requests that let you drill down into some of | these libs for more details on alternatives | endorphine wrote: | Curious to know the rationale behind the "batteries not included" | approach. | | One of the advantages of Go imho is it's solid stdlib, which | includes production-ready HTTP server/client, JSON, XML, crypto | libraries and more. | stusmall wrote: | For me I always point to the Java's time library pre-8 as an | example. It was a common pain point, experienced Java devs | would know to use joda time but beginners wouldn't know to look | to an alternative to the one in the standard library | implementation. Over many years and a lot of pain, it was | eventually replaced. | | If libraries are initially kept outside of the standard library | they can compete, gain and lose support, and a clear winner | will eventually surface. Old patterns can continue to exist and | be support without breaking changes while new, better APIs can | incubate. In time, after they've proved themselves, then they | can be pulled into the stdlib. | | When it isn't included in the stdlib then a new developer needs | to always ask "is this the recommended library?" In some of my | projects I'm still using a few libraries that might not be the | preferred community solution anymore, they are still very well | supported. When a winner becomes more clear then I can migrate. | | It comes down to two different approaches. Both are valid, both | have their advantages. I prefer rust's conservative approach to | the stdlib but I understand why someone would rather less | reliance on shifting 3rd party libraries. | brundolf wrote: | Some people would say Rust has too many batteries included in | the standard library (even though no_std exists) | | "Not enough" or "too much" is relative to your use-case. Go is | almost purpose-built for web servers, whereas Rust is much more | general and lower-level. It's got excellent built-ins for core | data structures, async primitives, etc (which makes it much | more batteries-included than C), but many (most?) of Rust's | users don't need an HTTP server or JSON parsing | | It's a judgement call. I think they struck a reasonably good | balance, especially considering the vibrant ecosystem and | breezy package management that can help fill in the gaps, but | it's never going to be perfect | maxbond wrote: | Both are legitimate approaches with interesting tradeoffs, and | Rust and Go are both great languages with distinct strengths. | There's a sort of cathedral and bizarre dynamic at work. Go's | language design decisions feel like a bizarre where people just | kinda brought their ideas and they happened; think about the | way you format dates in Go, it feels very much like someone | just thought that up, was like "yeah that feels right", and | shipped it. Their standard library is more of a cathedral; it's | expansive, monolithic, and complete. | | Rust's language design decisions are more of a cathedral; the | language feels cohesive and carefully put together, like a | delicate puzzle. They're slow to adopt language design | decisions, leaving them in an unstabilized purgatory until a | very high degree of confidence is developed that it's the right | decision. Rust's approach to dependencies is more of a bizarre; | you're expected to go to crates.io and work out what | dependencies to adopt for just about everything. | rapsey wrote: | Because it requires that library with that API be maintained | forever. Guaranteeing it eventually becoming unused because the | language is evolving and better APIs can be made. For instance | mpsc and mutex libs are commonly not used because crossbeam- | channels and parking_lot libraries are better than what Rust | ships with. | kibwen wrote: | Rust's standard Mutex type has been improved to the point | that they're now competitive or faster than parking_lot, at | least on Linux: https://github.com/rust- | lang/rust/pull/95035#issuecomment-10... | | Channels appear to be trickier, but it might be possible to | upstream crossbeam's version of those as well (it's certainly | been proposed and discussed for years). | maxbond wrote: | In the Python community this is called the "dead batteries" | problem, and the example I like to bring up is the csv | sniffer: | | https://docs.python.org/3/library/csv.html#csv.Sniffer | | This feature runs some heuristics and invents a new dialect | of CSV based on a sample of the file. That should send chills | down your spine, there is literally no safe way to use this | thing. Using it in production is a bug in and of itself and | will likely lead to security issues. | ohbtvz wrote: | > Because it requires that library with that API be | maintained forever. | | Why would you say that? Do a cycle of deprecate + remove | every few major releases, provide a migration path, and | you're good. | pornel wrote: | No, Rust has a strong backwards compatibility guarantee. It | can deprecate stuff, but not remove. | | Editions currently don't allow existence of multiple | standard libraries, because code from different editions | can be mixed. | kibwen wrote: | Note that editions don't allow multiple standard | libraries, but it would be possible (trivial, even) to | use an edition-specific lint to deny access to a | deprecated function on a newer edition. Even with that, | editions don't allow you to expose two different symbols | with the same name from the one single libstd so you | can't easily "reclaim" or "redefine" an existing | function, however since Rust already does mangling it | should be possible (though potentially hairy) to expose | identically-named functions that resolve to different | symbols depending on the chosen edition of the crate. | | Neither of these things have ever been done, though they | have been proposed, and it's just up to the library team | to determine if they ever think it would be worth it to | do so. | nicoburns wrote: | I would absolutely love rustc to gain the ability to | rename stdlib types across edition boundaries (e.g. you | create a Range2 type which is named Range in Rust 2024, | or vice versa). I'm not super familiar with the compiler | internals, but it seems to me that it shouldn't be all | that hairy. One ought to be able to deal with this in a | single pass at a very early stage in the compile process. | | Seems like this would be a great way to deal with | deprecated stdlib functionality. Especially in the case | that there is a better replacement available. Ranges and | channels would be obvious candidates for this. | endorphine wrote: | With things that don't change often like JSON, XML and | crypto, the same argument doesn't hold much value though. | maxbond wrote: | Those are all use cases that are likely to have security | issues; it would be nice if we could release security fixes | for them without needing to bump up the release schedule of | the entire language. (But this is an area where good | engineers reasonably differ.) | fiedzia wrote: | crypto does change. Maybe not specifications of specific | algorithms, but which of them are supported may change. Do | we want to break existing code when one of them will become | deprecated or do we want to allow insecure method to be | used to make web requests? | cesarb wrote: | > > With things that don't change often like [...] and | crypto | | > crypto does change | | A nearby comment mentioned Python, which did have that | problem. The ssl module on its standard library didn't | verify certificates by default, and since that's no | longer considered good cryptographic practice (to put it | mildly), that behavior had to change, even though it | could break existing code. See for instance | https://access.redhat.com/articles/2039753 and the | several PEPs it links to, in particular | https://peps.python.org/pep-0466/ which is about the | backporting of the Python 3.x version of that module to a | _patch release_ of Python 2.7. | nequo wrote: | I think the idea is that the people who write the compiler | might be good at writing compilers but less good at designing | HTTP or crypto libraries. So they leave that work to others. | | Designing Cargo was outsourced for a similar reason AFAIK. | kibwen wrote: | Yes, back in the day the goal was to provide a "batteries | included" stdlib with Rust, but eventually it became obvious | that good library design was hard and so almost all of the | "batteries" (like rand, rustc_serialize, many of the | collections, datetime, and more) were all offloaded to | crates.io. | | As for cargo, what we have today is literally Rust's third | package manager, after the experience with using the first | two led people to conclude that they just needed to hire | domain experts to design and implement it (the bundler | folks). | alfiedotwtf wrote: | Perl has BerkeleyDB and CGI in core. Peripheral library tastes | change over time, core backward compatibility lasts a lifetime | pornel wrote: | * Rust competes with C that comes with a leaking lead-acid | battery, so Rust's standard library already seems large and | luxurious in comparison. | | * One size does not fit all. Rust targets many different | environments, including embedded and WASM. A big stdlib makes | porting Rust harder. It's already problematic, e.g. `std::fs` | makes no sense in a browser context, and std's out-of-memory | handling strategy was unacceptable for the Linux kernel. | | * Rust is judged by the size of its "Hello World!" executable, | which already looks pretty fat due having stdlib linked | statically. | | * Rust has a strong backwards-compatibility guarantee, which | means that anything stabilized in stdlib has to stay, forever, | and can't evolve. Not many features can be nailed on the first | try, and not nailing them means people will forever debate | whether to use the worse-but-standard version or a 3rd party | version. | | * Rust has already dodged some bullets, because 3rd party | `serde` turned out better than Rust's old built-in `rustc- | serialize`, `syn` won over Rust's `syntex`, `criterion` is | better than built-in `bencher`, `rand` had 8 major revisions, | `time` broke compat 3 times, etc. | | * Rust is stuck with `std::mpsc` which turned out to be slower | and less flexible than `crossbeam-channel`. | | * Rust team is not an infinite resource. | | * The Rust language is designed to be extensible via libraries, | unlike Go where e.g. maps, channels, range iteration are | special built-ins you can't replace. | Sphax wrote: | I'm still not sure what crate I should use for time between time | and chrono, and searching the internet gives me conflicting | information: | | This site says about the time crate: "The original datetime crate | which was split out of std pre-rust-1.0" but as far as I can tell | the time crate as it is now is not the original crate and is | maintained. The book zero2prod uses chrono. | | What's the recommended crate to use for time today ? | k__ wrote: | Maybe, both are okay and it's just a matter of taste? | conradludgate wrote: | Both are maintained and fairly equivalent in API. chrono is | getting an upgrade soon in 0.5 that should make it slightly | easier to use too. | | I've made some PRs recently to chrono, the new maintainer is | very good | dochtman wrote: | Yes, the time crate was rebooted after 0.1 and got a new | maintainer. | | I think we're starting to do better again with Chrono, | hopefully it won't take us too long to get out a solid 0.5 | release. | | (I'm one of the current Chrono maintainers -- the previous | maintainer burnt out on the project earlier this year, at which | point the project sorely needed some TLC.) | Sphax wrote: | Thanks for the information. If both are now maintained I'll | probably just try both crate and see which one I prefer. | nicoburns wrote: | Do you think there's any possibility of `time` and `chrono` | merging at some point? (or one depending on the other and | providing a superset of functionality). It's rather confusing | having two de-facto datetime libraries in the Rust ecosystem, | and as far as I can see there isn't any major difference in | philosophy or scope between the two libraries? | woile wrote: | This is great! I wish it was a bit more opinionated and gave for | example 1 or 2 http server option(s). I don't know under which | criteria though | nicoburns wrote: | The options are ordered, so you can effectively get this by | just reading the top 2 and ignoring the others. Perhaps this | could be made clearer though. I've been trying to balance | keeping the list short with providing some context about why | you perhaps shouldn't other options. | woile wrote: | I think the approach you've taken by providing this document, | allows you to give 1 option, and when there's something | better you just change it. Ideally if you follow semver and | there's something replacing something else, you could | introduce a breaking change. And if you let people navigate | different versions, they could see how things changed over | time. | | Thanks for it btw! | freedomben wrote: | I did C/C++ for years 10+ years ago, but since learning Ruby and | then Elixir I've loved the functional approach. I've thought a | lot about rust over the years but I haven't yet found a project | where it made more sense than Ruby or Elixir did given the | learning effort. I've done a few projects in Go and while I like | it's simplicity, I dislike the verbosity and lack of functional | features. | | Does anybody else have a similar background that can share their | opinion/love level of rust? | | Rust people: do you use Rust for (nearly) everything? i.e. does | it feel very general purpose, or if you are doing something that | will be entirely network I/O bound anyway do you reach for | something else? | mcronce wrote: | I came from PHP, Python, and Go (in that order) with very | limited experience in both C and C++ and now use Rust for | everything with one exception - a scraper for mint.com that | uses https://github.com/mintapi/mintapi. That has a lot going | on, including spinning up a headless browser, and _my_ code is | virtually trivial, so the benefits of porting it to Rust are | limited, and the work would be pretty significant. | | As far as things I typically make, database-backed HTTP APIs | are probably the most common, and influxdb collectors second | most common. | freedomben wrote: | Thanks! Is there a specific rust framework you would | recommend for HTTP APIs? Or is the standard lib good enough | that you don't really need one? | fiedzia wrote: | > do you use Rust for (nearly) everything? | | Nearly. There are still some things easier to do in Python or | JS, but the gap is closing quickly and I'm fine with spending | small amount of convenience to get quality of Rust code. I am | looking now into having nearly 100% Rust frontend + Rust | backend for some simple project and it does look promising. | SevenNation wrote: | The most surprising thing about Rust is how high-level it feels | compared to other "systems" languages. Unless the problem space | _demands_ something other than Rust, I don 't see much reason | to choose anything else. And this includes projects where Ruby, | Python, and JavaScript were used. | quake wrote: | I can probably chime in here. I have used Rust professionally | for 2 years but I've been working with it as a hobby for 3. | Experience predominantly in C/C++ embedded and systems | environments. | | I've used Rust for *nix based IOT programs to ingest data from | different sources (network I/O, serial, CAN, files, etc), as | well as for bare-metal embedded development. I've also made | some dinky webservers as an exercise and various random | tooling. | | It's a very, very flexible language, once you get over its | quirks. I found myself using it to make tools that I would | usually turn to Python for. I'm quite impressed with how "high | level" the language feels despite being able to work with low- | level concepts. Simple stuff like mapping iterators and the | Option<T> type while working without an OS is a fantastic | feeling. | | As most people will likely say, take Rust for a test drive with | a basic project to decide for yourself. I would say to keep it | simple and not go down the async route as your first foray, | though. | ReadEvalPost wrote: | Do you have any recommendations on libraries for parsing CAN | with Rust (or are your tools OSS)? I'll be working on a | project in a couple of months that'll need to pull data off | CAN. | [deleted] | rapsey wrote: | > I did C/C++ for years 10+ years ago, but since learning Ruby | and then Elixir I've loved the functional approach. | | Not Elixir but I spend 10 years in Erlang before moving to Rust | and prefer to never go back. | | A statically typed language is just better. No matter how easy | Erlang/Elixir makes some things. I do not at all miss needing | to refactor my code and being scared of all the crashes that | inevitably result. I do not at all miss seeing crashes that | only show up under production load. | freedomben wrote: | Thanks, that is pretty helpful since Erlang and Elixir are so | similar in philosophy. | | How long did it take you to get to the point with Rust where | you wouldn't want to back? | | Do you use any sort of actor implementation in Rust? | lalaithion wrote: | It's very general purpose. I feel like I could do anything in | it. However, I still do numerical stuff and one-off scripts in | Python, just due to lack of friction and not needing | correctness/performance, and for bigger projects where being | I/O bound is the main issue - I still use Rust, but I do wish | there was an alternative which was "Rust but with a garbage | collector". | | Haskell and the ML family are fine but they just don't have the | same number of high-quality libraries with the well thought out | modern stdlib of Rust as a base. Elixir/Erlang/Lisps are fine | but I'd really like strong, static types. Gleam/Pony are too | niche. I'd like to like Scala but every time I try I run into | something inscrutable and demonic, and the Java ecosystem is | comprehensive but (in my opinion) super annoying. | LinXitoW wrote: | Damn do I with there was Rust with GC. Rust has so many | wonderful high level features I'm missing even in "hip" | languages (compare error handling with Kotlin), but I don't | really care that much about the systems programming parts. | pizza234 wrote: | > Does anybody else have a similar background that can share | their opinion/love level of rust? | | I come from higher level language(s). But I find hard to | program without functional composition as well. | | > Rust people: do you use Rust for (nearly) everything? i.e. | does it feel very general purpose, or if you are doing | something that will be entirely network I/O bound anyway do you | reach for something else? | | General purpose language != efficient for all the use cases. I | do a considerable amount of hobby programming in Rust, but I | think it's a niche language. I think it's vastly most efficient | to use other language in the very large majority of the use | cases - there are plenty of modern languages the are good | enough and don't have such a high overhead (ie. manual memory | management). Nonetheless I've found that with a couple of years | of experience (likely less than half, if programming | professionally), developing with Rust is considerably simpler | than one would imagine. | marcus_cemes wrote: | I've done some C/C++, a lot of JS/TS due to its web dominance. | I found Elixir a year ago and fell in love with it. | | I love the functional style of Elixir, it's elegant to write | and read, but feels unsafe. The lack of a type system is hard | for me and has been a nightmare when trying to find the origin | of a particular error tuple and refactoring code, running the | app to see if it works. Running it in production feels like a | ticking time bomb, even if it does handle fault tolerance | gracefully. | | I've reached for Rust for the occasional project and have never | regretted it, I couldn't justify its use for everything though. | Very high-quality ecosystem, rock solid and predictable | performance and tiny footprint. I've made a VPN supervisor | process that fits in a few MB Docker image (without OS), uses a | few MB of RAM, no idle CPU and wonderful latency. | | Perhaps Erlang can manage tail latencies better under load, | pre-emptive scheduling is awesome, but my personal experience | has been that Rust is just much more efficient at doing the | same task, giving you more free CPU time, predictable memory | freeing that rivals Erlang's per-process GC. You finish that | blocking computation before it even becomes noticeable. | Erlang's fault tolerance is matched by Rust's type system and | memory safety guarantees. It's hard to compare C++/Rust to | Erlang/Python/Ruby, they're just different. | | It's slower and more frustrating to write, but the language | server gives you so much feedback and useful comments. I find | the linter amazing, it finds some pretty obscure and neat | improvements with the additional type information it has, and | Option<T> and Result<T,E> have an almost functional-like | chaining pattern. | | For a small hobby project, Rust 100% of the time. No painful | dependency management, no complex build process. For a more | serious project, or for a client, not always justifiable. I | always miss Rust's language features and libraries when coding | in another language that has the upper hand in their respective | dominant fields, although I like that a lot of tooling | (ESBuild, swc, Tailwind's compiler, fnm, Rome, ...) is being | remade in Go/Rust, it benefits far more people than it | inconveniences. | papascrubs wrote: | Does something like this exist for other languages (Go/Python | etc)? This seems well curated, looking for community input vs | digging on a search engine. | | I'm all for "batteries not included", but every time I dip my | toes into languages like that, it can take a bit of work to find | out common libraries that the majority is using. Not trying to | re-ivent the wheel. It's nice to see opinionated takes on things | in one central location. | jmfurlott wrote: | Curious about one for python as well | dimitar wrote: | The clojure toolbox: https://www.clojure-toolbox.com/ | | There also the various awesome lists on GitHub, but they are | not always well curated | kibwen wrote: | Note that they're literally called "Awesome" lists, that's | not an adjective describing the lists themselves. :P | wging wrote: | Well, this has already paid off for me, even though I thought I | knew most of it. I recently built a toy chat app with | tungstenite+websockets, and am now kind of kicking myself because | I could probably have just used axum. At least I got some good | practice and learned a couple things by doing it a more 'manual' | way, and get to compare it to axum's websocket support. | | Something else I'd like to see is a tad more clarity on how the | recommended channel implementations relate to std::mpsc::channel | and tokio::mpsc::channel - the recommended options seem to claim | to be better than their respective std/tokio counterparts, but | blessed.rs itself doesn't explicitly make that claim. Should it? | (I've only ever used std::mpsc and tokio::mpsc, and not in a | production context.) | necubi wrote: | Crossbeam channels are better in just about every way than | std::sync::mpsc. They're faster, have more features (including | supporting multiple consumers), and have a better API. | | Tokio vs crossbeam/std::sync is a bit of a different question. | Using the tokio implementations let you await (i.e., | asynchronously block) on a channel, whereas the others will | block the thread. So within async code, use tokio for use cases | where you may have a blocking operation (writing to a bounded | queue or waiting for a message). Otherwise, use crossbeam. | wging wrote: | I didn't mean to imply these were _all_ substitutes for each | other - rather that there are both sync and async channels in | the list and it seems worthwhile to compare the sync ones | against std::sync::mpsc, and the async ones against | tokio::sync::mpsc. Not to mention the sync /async ones | against each other (flume and postage both have async | capabilities). I do think the site does a decent job of | calling out that there is a difference between the two types | of channel. | root_axis wrote: | This list recommends the tracing package over the slog package. | I've only ever used slog, so I'd be interested to hear why some | people prefer tracing to slog. | msvan wrote: | From the slog Github repo: | | > You might consider using tracing instead. It's been a while | since slog was created and it served Rust community well all | this time. It remains a stable, featureful and battle-tested | library, used in many important projects. | | > In last few years, another ecosystem for Rust was created | with similar features and a very good support for debugging | async code and already larger dev team and community. | | > Please check tracing and see if it is more suitable for your | use-case. It seems that it is already a go-to logging/tracing | solution for Rust. | | > Reasons you might want to stick with slog anyway: | | > async support doesn't benefit you | | > you consider mature, stable code & API a plus | | > it has some features that tracing is missing | | > great performance (I have NOT done any comparison, but slog's | performance is very good). | root_axis wrote: | Thanks! | mwcampbell wrote: | > Older binding to the windows APIs. Unofficial, but more | complete than windows-rs | | What is windows-rs missing that's in winapi? So far I've found | everything I need in windows-rs, including some pretty obscure | corners of the massive Windows API. | lijogdfljk wrote: | Tangent, i really enjoy the design of that site. Crisp, readable, | simple. Maybe a bit low on contrast, but not terribly so. | mpalmer wrote: | Agreed; I'd give it full marks if it were optimized for mobile. | nicoburns wrote: | I've added some basic mobile styling :) Probably could be | better, but I think this makes it somewhat readable on | mobile. | kitd wrote: | Good work. | | But I can't help thinking this could or (should even) be under | the auspices of crates.io. Provide a way to categorise crates and | highlight commonly-used or trusted crates. | jgilias wrote: | I've found that search in crates.io works surprisingly well for | me. I just make a few searches with different keywords I feel | make sense for what I'm looking for, look at download | characteristics, and that's it. A curated list can quickly get | outdated. | | I do like this website though! | echelon wrote: | See also: | | https://github.com/rust-unofficial/awesome-rust | | This list is currently far more comprehensive, and it's filled | with a lot of high-quality crates for a wide variety of common | tasks. | | I would like to see this list transformed into a navigable | website. It'd also be nice to include code samples (eg. I | recently had to investigate each test mocking library directly, | and a high level summary or comparison would have helped). | tptacek wrote: | Awesome Rust doesn't solve the problem this page sets out to | solve. Rust has a tiny standard library, and (many would say) | there needs to be a _de facto_ consensus on the best mainstream | libraries to solve "the rest of it" --- serialization, error | handling, logging, &c. | | An "Awesome" list can help you find 6 different very | interesting libraries for each of those problems, but that's | not solving the big problem, because everyone will pick a | different library; without a consensus pick, some of those | libraries can lose momentum, which is a problem 2 years down | the road when the maintainer packs up shop. | | What you'd want, if you're the audience for this page, is just | a list of straight-up "use this library" picks, in the hopes | that those libraries will be stable and maintained | indefinitely, and will develop supportive communities. | Xeoncross wrote: | The problem with awesome-?? sites is that they list 18 error | libs without actually stating which one is has the most use by | high profile projects or some other "recommended" metric. | | Github search is much better for finding quality libraries as | you can filter by star count, age, recency, last commit, and | see fork numbers. It's not perfect, but generally cuts the work | down significantly and then you can finish evaluation the | projects by clicking through to read the stats of each one. | bravetraveler wrote: | Indeed, or listing quite a few clearly abandoned projects. | Awesome for learning perhaps, but depending on the case... | perhaps not something I'd readily suggest using | | The Wayland list comes to mind, while I don't have any | specific examples | jaxrtech wrote: | This is fantastic. This is almost identical to what I've been | having to remember in the back of my head every time I go create | a new project haha. I've also settled on the anyhow + thiserror | deal. Rust is not batteries included -- it's nice for those | experienced or beginners to know _which_ batteries to use without | going on some expedition to find them. | | The more challenging part is working in niche areas, | https://lib.rs definitely helps as well. ___________________________________________________________________ (page generated 2022-11-07 23:00 UTC)