|
|
|
|
|
by giovannibajo1
3143 days ago
|
|
> - Stdlib just loosely wraps posix features with many C flags copied verbatim. These APIs are old and could use a refresh but Go never bothered.
> - Similarly, Go doesnt bother to hide the differences of different OSes. I disagree with these. Go runtime/stdlib is architected to work around many many POSIX headaches and design bugs, hiding them completely from programmers, and to be fully portable. For instance: * Concurrency is completely redesigned (goroutines).
* Signal handling is redesigned and doesn't cause bugs when interacting with concurrency.
* Forking/Exec'ing is redesigned not to cause fd leaks in subprocesses (all file descriptors are marked as O_CLOEXEC, in a race-free way), nor have races while interacting with concurrency
* Sockets are exposed through a higher-level API (Dialer/Listener).
* epoll is not exposed but transparently used by a single thread to handle all supported file descriptors without wasting OS threads, to improve performance In fact, I think the only thing that is pretty much low-level is os.File and filesystem access in general, which tends to expose lower-level details. |
|
Sockets are actually another good example. If you need to tweak then at all, you get to use the same old horrendous POSIX names for everything. No name aliases?