Go tried to hardcode syscalls on macOS anyway. Then they broke the gettimeofday interface and all Go apps exploded. The other issue is that Go's C FFI is slow (and buggy and convoluted), and they have to use it for syscalls on those platforms, with worse results.
-
-
Replying to @marcan42 @hikari_no_yume and
So Go *does* dynamically link with C libs in the end on those platforms, but that entire feature sucks.
1 reply 0 retweets 7 likes -
aaaahahaha
1 reply 0 retweets 0 likes -
Replying to @hikari_no_yume @marcan42 and
I also wonder how they handle like, 3D graphics. I guess it's not something people use Go for, but if they want to, sorry… you need dynamic linking. You can't statically link the graphics driver, unless perhaps you really love Mesa
1 reply 0 retweets 2 likes -
I mean, they do claim to support dynamic linking C libs. People use it. I've used it. It sucks.
1 reply 0 retweets 5 likes -
Replying to @marcan42 @hikari_no_yume and
The first time I tried using Go I ran into a FFI bug which took 2 days to find and fix (after the Go devs had been unable to figure it out for months) and then a month of bureaucracy to get merged. I didn't write any more Go after that (and after seeing the guts of the runtime).
1 reply 0 retweets 5 likes -
Replying to @marcan42 @hikari_no_yume and
Then I still had to find and debug *another* Go runtime bug after unfortunately running into random segfaults in a piece of software I used that was written in go. The root cause turned out to be Go devs knowingly making invalid ABI assumptions **to avoid using their slow FFI**.
1 reply 0 retweets 5 likes -
Replying to @marcan42 @hikari_no_yume and
Because on Linux... surprise! gettimeofday is not a syscall if you want to be fast, it's a call into vDSO, which is just a C ABI call into a special dynamic library that the kernel stuffs into your address space... But actually using Go's C FFI for that would kill the perf.
1 reply 0 retweets 5 likes -
Replying to @marcan42 @hikari_no_yume and
As it turns out, calling C functions with the Go ABI is a stupid idea. Who knew. Well, the Go devs knew, there was even a comment. They still did it. That was another day spent debugging Go.https://marcan.st/2017/12/debugging-an-evil-go-runtime-bug/ …
2 replies 6 retweets 15 likes -
Replying to @marcan42 @hikari_no_yume and
Wow. And one of the worst parts of that isn't the Go stuff, but the CPU behaviour handling the unmapped write and leaking it to other threads. That sounds like the most "Woah, WTF!" part of all this! Is there any way to consider that sane?
2 replies 0 retweets 0 likes
That's not the CPU, that's Go. Go does not leave guard pages between stacks, so one thread overflowing its stack just runs into other mapped memory belonging to something else.
-
-
Thanks. Twitter will use this to make your timeline better. UndoUndo
-
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.