| Website | https://www.joachimschipper.nl/ |
@whitequark This is good!
One optional suggestion for the second sentence: I care much less about “written in Go” than about “runs the popular grebedoc service” (i.e. actually works, and also here is a demo.)
(Yes, Go does matter, but it’s not the third thing I want to know about this.)
One more optional suggestion: you might also want to be more explicit about the webhook angle; a very classic Apache config also serves static pages and accepts updates from the site author, but it’s usually not too hard to figure out whether one wants classic Apache or this software.
@jann I assume, with no familiarity with the Linux implementation, that the pages are shared between network buffers and the page cache for disk? That seems fairly close to optimal; are you in a setting where your data in-flight is a sizable fraction of your memory?
(Back of the napkin, I get ~1.25 GB of data in-flight for a 100 Gbps server with 100ms RTT; that’s a lot, but not a large fraction of the sort of server I’d expect to find hooked up to a 100 Gbps link.)
Of course, most things can’t use sendfile() because it’s not flexible enough… but thanks for entertaining my curiosity!
@jann I assume you’re well aware, but just in case: I think sendfile() should get you some of that? (“If out_fd refers to a socket or pipe with zero-copy support…”)
Of course, your proposal is more flexible; one wouldn’t want to do TLS via sendfile()…
@david_chisnall For low-level stuff, I sometimes care more about the system calls or even the assembly than about the code - and C is more transparent. (Lack of abstraction is not only a bad thing!)
Between C/asm for low-level and Python/Rust/Java for higher-level stuff, my need for C++ is too small for me to invest the (rather large) amount of time needed to get good - and C++ is too dangerous to use without being good at it.
@thephd That looks very interesting, thanks - as always - for your hard work!
One minor point of copy-editing: the final comment in the second code sample of par. 3.7 probably needs to be updated - presumably, the point of vendor::const is to _allow_ that code?
Again, thanks! Good to see C getting all sorts of neat goodies / 21st century features!