On Tuesday, 22 March 2022 at 18:47:19 UTC, Ali Çehreli wrote:
On 3/22/22 11:28, Era Scarecrow wrote:
>   So when should you use size_t?

I use size_t for anything that is related to count, index, etc. However, this is a contested topic because size_t is unsigned.

I don't see a problem with that. It's not like you can access -300 address space or index (*although making your own index function technically you could*). I'm actually surprised signed is the default rather than unsigned. Were negative numbers really that important in 16bit MS-DOS that C had to have signed as the default?

This question is probably going off topic but still be interesting to know if there's an answer.

> Is it better to use int, long, size_t?

D uses size_t for automatic indexes during foreach, and as I said, it makes sense to me.

Otherwise, I think the go-to type should be int for small values. long, if we know it won't fit in an int.

Mhmm. More or less this is what i would think. I'm just getting sick of either numbers i return that i have to feed into indexes and it complains it's too big, or putting what is going to be a smaller number in an array because the array type is too small. Casting or using masks may resolve the issue, but it may crop up again when i make a change or try to compile on a different architecture.

My usual writing at this time is doing my work on a 64bit laptop, but sometimes i go and run the 32bit dmd version in windows on a different computer and checking for differences between ldc/gdc and dmd for if the code complains. I see more and more why different versions of compilers/OSes is a pain in the ass.

I'd almost wish D had a more lenient mode and would do automatic down-casting, then complain if it *would* have failed to downcast data at runtime.

> Or is it better to try to use the smallest type you need that > will fulfill the function's needs and just add to handle > issues due to downcasting?

That may be annoying, misleading, or error-prone because smaller types are converted at least to int in expressions anyway:

Yeah, and i remember reading about optimization in GCC where doing smaller types can actually be slower, much like in some architectures having offsets in memory address results in a speed penalty for non-aligned data.

But yeah, if your function works on a byte, sure, it should take a byte.

Expect wild disagreements on this whole topic. :)

Though internally it may be an int...

Reply via email to