Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I only meant to illustrate the feature, not argue that this specific constructor should use exceptions vs optional return.

Regardless: Why would it be a bad use of exceptions? It reduces the API size and unifies flows, and gives me the option of seeing the specific error. It simply happens to be that in practice I've never needed to know the specific error in this case.



In .NET it’s idiomatic to avoid exceptions for control flow because “it failed to parse” means creating an exception which costs you an allocation and getting the stack trace, among other things.


    > means creating an exception which costs you an allocation
Please. What percent of .NET users are really worried about that allocation? Maybe 0.01%?


Exceptions are meant to represent exceptional states.

The data is always expected to be valid and there is no recovery? .Parse

The data may be invalid and the implementation can handle it? .TryParse

This is a very common pattern and adopted for reasons besides the cost of exceptions. Though in this case it is Uri.TryCreate instead.


The allocation is plenty cheap, but creating the stack trace is expensive in pretty much all structured exception systems, and it is noticeable in loops, not necessarily even really tight ones.

So yeah if you’re parsing thousands of url candidates and expect many will not parse, don’t use exceptions to communicate the expected errors. Otherwise don’t worry about it.


Exceptions are nice DX, but theoretically if you were parsing URLs in an inner loop and expecting lots of them to fail it would be very expensive compared to returning a tuple (or Optional, whatever).




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: