4 ms·
Go exposes raw pointers to the programmer, so from your description i think those semantics are too rudimentary to implement Go's semantics, there would need to
by mappu 2y ago
Go exposes raw pointers to the programmer, so from your description i think those semantics are too rudimentary to implement Go's semantics, there would need to be a WasmGC 2.0 to make this work.
It sounds like it would be a great fit for e.g. Lua though.
- zozbot234 2y agoI don't think Go supports any pointer arithmetic out-of-the-box? What it has in the base language is effectively references.
- pjmlp 2y agoIt does, via unsafe package, yes it does look ugly, that is on purpose. item := *(*int)(unsafe.Pointer(uintptr(start) + size*uintptr(i))) A random example taken from Internet.
- zozbot234 2y agoThat's not the base language, it's an unsafe superset. There's no reason why a Wasm-GC backend for Golang should be expected to support that by default.
- pjmlp 2y agoIf it is part of the language reference it is part of the language. Usually when language reference books used to be printed, or we used ISO languages, what is there on paper, is the language. We are only discussing semantics, if it is hardcoded primitives, or made available via the standard library, specially in case of blessed packages like unsafe which aren't fully implemented, rather magical types for the compiler. Hence why the only thing you will see here is mostly documentation, https://github.com/golang/go/blob/master/src/unsafe/unsafe.go https://github.com/golang/go/blob/master/src/unsafe/unsafe.g... Which is nothing new since the 1960's that there are systems languages with some way to mark code unsafe, the C linage of languages are the ones that decided to ignore this approach.
- nasretdinov 2y agoThe standard library uses unsafe for syscalls, for higher-performance primitives like strings.Builder, etc, so it's support is mandatory to run any non-trivial Go program
- zozbot234 2y agoSomehow I don't think Wasm-GC is going to support bare metal syscalls anytime soon. That stuff all has to be rewritten anyway if you want to target WASM.
- nasretdinov 2y agoIt's not just system calls. E.g. reflection package uses unsafe too: https://github.com/golang/go/blob/master/src/reflect/value.go https://github.com/golang/go/blob/master/src/reflect/value.g... . Many packages from Go standard library use unsafe one way or the other, so it's not fair to say that unsafe package is separate from the rest of the language
- mappu 2y agoFor a while the GOOS=nacl port and the Google App Engine ports of Go disallowed unsafe pointer manipulation too, so there is some precedent. Throughout some of the ecosystem you can see pieces of "nounsafe" build tag support (e.g. in easyjson).
- pjmlp 2y agoMost programming languages that offer unsafe, either as language keyword, or meta package (unsafe/SYSTEM/UNSAFE whatever the name), have similar option, that doesn't make it less of a feature.
- mappu 2y agoIt also has an address-of operator, you can take the address of the middle of a large array. I suppose that would be possible with fat-pointers that are reference+offset.
- yencabulator 2y agoYou can get a pointer inside a struct ("interior pointers") without pointer arithmetic.