this post was submitted on 05 May 2024
21 points (95.7% liked)

Rust

6005 readers
3 users here now

Welcome to the Rust community! This is a place to discuss about the Rust programming language.

Wormhole

[email protected]

Credits

  • The icon is a modified version of the official rust logo (changing the colors to a gradient and black background)

founded 1 year ago
MODERATORS
 

Hi rustaceans! What are you working on this week? Did you discover something new, you want to share?

all 17 comments
sorted by: hot top controversial new old
[–] [email protected] 7 points 6 months ago (1 children)

Just learning. I threw together a little CRUD API in Rocket the other day.

Now I’m playing around with Diesel. I don’t love the intermediate New types, coming from EF Core. Is that because Rust ~~~~doesn’t really have constructors?

[–] [email protected] 2 points 6 months ago (1 children)

Can you give an example? Pretty much everything in Diesel is abstracted away through trait macros.

[–] [email protected] 1 points 6 months ago* (last edited 6 months ago) (1 children)

The insert on their Getting Started guide.

let new_post = NewPost { title, body };

diesel::insert_into(posts::table)
    .values(&new_post)
    .returning(Post::as_returning())
    .get_result(conn)
    .expect("Error saving new post")

Of course the other possibility is this guide is very low on abstractions.

[–] [email protected] 2 points 6 months ago (1 children)

Ah, I see. So you're expecting to have one object for creation, updates, queries, etc.

I work with something like that at work (SQLAlchemy in Python), and I honestly prefer the Diesel design. I build an object for exactly what I need, so I'll have a handful of related types used for different purposes. In Python, we have a lot of "contains_eager" calls to ensure data isn't lazy loaded, and it really clutters up the code. With Diesel, that's not necessary because I just don't include data that I don't need for that operation. Then again, I'm not generally a fan of ORMs and prefer to write SQL, so that's where I'm coming from.

[–] [email protected] 1 points 6 months ago (1 children)

One of my main concerns with this is the potential for making a lot of separate calls to the DB for a complex data structure. Then again there are trade offs to any architecture.

[–] [email protected] 1 points 6 months ago* (last edited 6 months ago)

Isn't the reverse true? If you make separate models for each query, the ORM knows exactly what data you need, so it can fetch it all as once. If you use generic models, the ORM needs to guess, and many revert to lazy loading if it's not sure (i.e. lots of queries).

That's at least my experience with SQLAlchemy, we put a lot of effort in to reduce those extra calls because we're using complex, generalized structures.

[–] [email protected] 6 points 6 months ago* (last edited 6 months ago) (2 children)

reverse proxy using tokio and hyper, there are few things to figure out on high traffic sites, it doesn't work as well compared to nginx after a certain threshold.

[–] [email protected] 5 points 6 months ago (1 children)

Maybe Cloudflare's pingora suits this purpose better given that it is being used by cloudflare to proxy traffic at a large scale

[–] [email protected] 4 points 6 months ago* (last edited 6 months ago)

Yeah, I'm looking at it, will probably rewrite the logic using Pingora. or maybe I did something wrong. Not sure if its something using the hyper legacy client, that has connection pooling, maybe there's something there to improve.

or maybe the use of RwLock to share the config struct is reaching some limits. Will try using parking_lot to see if anything changes.

[–] [email protected] 2 points 6 months ago (1 children)

That's too bad, I was thinking of replacing our nginx proxy with Rust. We need a little logic, so we currently have nginx -> gateway service -> microservice, and I was hoping to drop nginx. Maybe I still can, but it sounds like there would be some tradeoffs.

[–] [email protected] 2 points 6 months ago

this might be more on me writing shit code than on tokio/hyper. give it a go.

[–] [email protected] 4 points 6 months ago* (last edited 6 months ago)

A general purpose memory allocator although this is really much a work in progress i think there are some good opportunities for otimization in a memory allocator for rust.

For example Rust gives you the size of memory region to free, which means the allocator does not have to track that.

[–] [email protected] 4 points 6 months ago

Working on a static site generator for a publication coming out of my high school

[–] [email protected] 3 points 6 months ago

I just started writing a programming language! I'm using pest for the grammar/lexing, which makes if super easy. I built my ast using enums and structs, which makes me appreciate Rust even more. I also am coming to love the way rust handles errors. For example, when there's an error converting from pest -> ast, it feeds all of the error into into my error type, which is so much easier to handle than making it panic out of the function

[–] [email protected] 2 points 6 months ago

Tamagotchi like game 😂

[–] [email protected] 1 points 6 months ago

Made a discord soundboard bot. Some simple text channel commands get the bot to join whatever voice channel you're in and get the bot to display available sounds as buttons in the text channel. It actually works really well and sounds great.

My friends and I just wanted a bigger soundboard without having to pay for it.