Most of what you're suggesting there would simply relate to how the server
passes data around itself internally and wouldn't even affect the data formats
on disk. So we can definitely look at those things.
Remember that Citadel is nearly 43 years old, and this implementation of
it is about 37 years old, so you'll still find vestiges of things that had
to fit on a computer that was MUCH smaller than what we have now. I'm kind
of euphoric about returning structs from functions now that I know it works,
but I wouldn't put something "gigantic" there. For example, my rewrite of
imap_roomname()'s calling and return syntax was done on a whim (and ended
up being all I did this weekend) when I peeked at it and saw that I had done
some really ugly things by stuffing two values into the upper and lower halves
of an int. So in the future I'll be returning structs for SMALL things,
basically
as a C variant of the ability other languages have to return multiple values
from a function. For example, in Python:
def foo():
str = "bar"
x = 123
return str, x
baz, y = foo()
The stack size in Linux is 8 megabytes! And you can make it even bigger
if you want. The fact that it's virtual space means you don't actually consume
that space unless your program needs it. A far more comfortable environment
than the 256 byte stacks that I had on my 8-bit machines.
So yes, we can try doing things that we couldn't do in the past. If it impacts
interoperability, you just have to commit to testing with a bunch of different
clients to make sure nothing broke. Aside from that, the sky's the limit.
And as I keep pointing out, I have no business muddling about in Citadel
Server when I've got the rest of WebCit-NG to finish.