# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 12
# self = https://watcher.sour.is/conv/p222heq
Rust might be interesting as a language, but its ecosystem is a total clusterfuck.
Rust might be interesting as a language, but its ecosystem is a total clusterfuck.
Rust might be interesting as a language, but its ecosystem is a total clusterfuck.
@movq so, how similar is it to NodeJS? I think NodeJS sits at the top of all clusterfucks. Depending on the programmer, I think Golang can be very dependency aggressive as well, ain't that right, @prologic?
@fastidious I’m not a web dev and I don’t know NodeJS at all. Can’t compare these two. I’ll give you an anecdote: I once tried to find a library to parse command line arguments (something like getopt) and eventually gave up on it due to all the deps they pulled in. Most people appear to be using clap. This is what it looks like when you compile the most basic example: https://movq.de/v/3ffe9bec70/claptest.txt Just for parsing command line options? Really?

And this is what it looked like when I was trying to compile a simple HTTP client using reqwest (which appears to be the most popular library): https://movq.de/v/3ffe9bec70/reqwesttest.txt Oof. How am I supposed to keep track of all of that?

The Rust standard library *aims to be small*. This means that a lot of things *must* be external libraries. (This is in stark contrast to Python, for example. You might have seen this: https://xkcd.com/353/) That explains why the chrono library for doing date and time stuff exists – but it doesn’t explain everything.

My theory is: Since Rust has its own package management which makes it easy to publish and use packages, well, people do just that. A lot. Including pointless (IMHO) stuff like the following (got these from the log outputs above):

- https://crates.io/crates/itoa (converting integers to string, because the standard library is too slow?)
- https://crates.io/crates/ryu (same for floats)
- https://crates.io/crates/lazy_static (instantiate static values only when you need them, because ... well, why?)
- https://crates.io/crates/matches (if is not enough?)
- https://crates.io/crates/smallvec (the performance penalty for using the standard library’s Vec with just a few elements must be horrible)
- https://crates.io/crates/memchr (again, why not improve the standard library?)

The list goes on and on.
@fastidious I’m not a web dev and I don’t know NodeJS at all. Can’t compare these two. I’ll give you an anecdote: I once tried to find a library to parse command line arguments (something like getopt) and eventually gave up on it due to all the deps they pulled in. Most people appear to be using clap. This is what it looks like when you compile the most basic example: https://movq.de/v/3ffe9bec70/claptest.txt Just for parsing command line options? Really?

And this is what it looked like when I was trying to compile a simple HTTP client using reqwest (which appears to be the most popular library): https://movq.de/v/3ffe9bec70/reqwesttest.txt Oof. How am I supposed to keep track of all of that?

The Rust standard library *aims to be small*. This means that a lot of things *must* be external libraries. (This is in stark contrast to Python, for example. You might have seen this: https://xkcd.com/353/) That explains why the chrono library for doing date and time stuff exists – but it doesn’t explain everything.

My theory is: Since Rust has its own package management which makes it easy to publish and use packages, well, people do just that. A lot. Including pointless (IMHO) stuff like the following (got these from the log outputs above):

- https://crates.io/crates/itoa (converting integers to string, because the standard library is too slow?)
- https://crates.io/crates/ryu (same for floats)
- https://crates.io/crates/lazy_static (instantiate static values only when you need them, because ... well, why?)
- https://crates.io/crates/matches (if is not enough?)
- https://crates.io/crates/smallvec (the performance penalty for using the standard library’s Vec with just a few elements must be horrible)
- https://crates.io/crates/memchr (again, why not improve the standard library?)

The list goes on and on.
@fastidious I’m not a web dev and I don’t know NodeJS at all. Can’t compare these two. I’ll give you an anecdote: I once tried to find a library to parse command line arguments (something like getopt) and eventually gave up on it due to all the deps they pulled in. Most people appear to be using clap. This is what it looks like when you compile the most basic example: https://movq.de/v/3ffe9bec70/claptest.txt Just for parsing command line options? Really?

And this is what it looked like when I was trying to compile a simple HTTP client using reqwest (which appears to be the most popular library): https://movq.de/v/3ffe9bec70/reqwesttest.txt Oof. How am I supposed to keep track of all of that?

The Rust standard library *aims to be small*. This means that a lot of things *must* be external libraries. (This is in stark contrast to Python, for example. You might have seen this: https://xkcd.com/353/) That explains why the chrono library for doing date and time stuff exists – but it doesn’t explain everything.

My theory is: Since Rust has its own package management which makes it easy to publish and use packages, well, people do just that. A lot. Including pointless (IMHO) stuff like the following (got these from the log outputs above):

- https://crates.io/crates/itoa (converting integers to string, because the standard library is too slow?)
- https://crates.io/crates/ryu (same for floats)
- https://crates.io/crates/lazy_static (instantiate static values only when you need them, because ... well, why?)
- https://crates.io/crates/matches (if is not enough?)
- https://crates.io/crates/smallvec (the performance penalty for using the standard library’s Vec with just a few elements must be horrible)
- https://crates.io/crates/memchr (again, why not improve the standard library?)

The list goes on and on.
@movq What the heck v0.4.0 indeed!
@movq dear god! When you said it was a mess I took it lightly but now I see exactly what you meant.

Yup, it is similar on NodeJS. I am not a developer of any kind, but have used it enough to know this. Probably NodeJS is worse, but Rust seems to be competing for that second place.
@lyse Lol, I hadn’t seen that one. What the heck.
@lyse Lol, I hadn’t seen that one. What the heck.
@lyse Lol, I hadn’t seen that one. What the heck.