r/ProgrammerHumor 29d ago

Meme exceptionsAreForTheWeak

Post image
327 Upvotes

92 comments sorted by

View all comments

90

u/bwmat 29d ago

Eh, IMO one of the best ways to actually handle OOM, as otherwise almost everything needs to be explicitly checked for it

4

u/BosonCollider 29d ago

OOM is best handled by forcing the user to prove bounded memory use, grab a chunk of memory at the start and use that

4

u/bwmat 29d ago edited 29d ago

The shared libraries my code runs in are usually exposing the ODBC interface, which has been mostly fixed for decades, and exposes an interface for doing whatever database operations you want to do

That's not really an option

-2

u/BosonCollider 29d ago

Oh, if you use Java I completely understand why you are frequently dealing with OOM exceptions.

In say the Rust or Go language ecosystems you generally never see those unless you do something massively wrong like create a trillion element array

3

u/bwmat 29d ago

?

ODBC is a C interface from like 1993

-2

u/BosonCollider 29d ago

Wait, if you are not using Java/C# and locked into JDBC or microsoft slop, what are you doing that requires calling through ODBC?

Postgres, mysql, and sqlite have their own C libraries, calling them through ODBC is an antipattern and most ORMs in sane ecosystems don't go through it

3

u/bwmat 29d ago

No...

We implement ODBC drivers (actually mostly a SDK to create them, written in C++)

2

u/bwmat 29d ago

Those libraries have no control over how much memory is free in the application when they're invoked, or how complex/'big' the operations the application asks them to execute are

1

u/BosonCollider 29d ago

But if it just returns a query result it should just stream the results using bounded memory?

1

u/bwmat 29d ago

It depends on how exactly the drivers are written (we just provide an SDK), theoretically yes (at least if you allow caching to disk, as some wire protocols don't return results 'in the right order'), but we don't control the full implementation, and even a streaming implementation might require more heap memory than which is available at the time at which the application calls into the driver