[
https://issues.apache.org/jira/browse/ARROW-17584?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Tim Schaub reassigned ARROW-17584:
----------------------------------
Assignee: Tim Schaub
> [Go] Unable to build with tinygo
> --------------------------------
>
> Key: ARROW-17584
> URL: https://issues.apache.org/jira/browse/ARROW-17584
> Project: Apache Arrow
> Issue Type: Bug
> Components: Go
> Reporter: Tim Schaub
> Assignee: Tim Schaub
> Priority: Major
> Labels: pull-request-available
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> I was hoping to use TinyGo to build WASM binaries with Arrow. TinyGo can
> generate builds that are [1% the
> size|https://tinygo.org/getting-started/overview/#:~:text=The%20only%20difference%20here%2C%20is,used%2C%20and%20the%20associated%20runtime.&text=In%20this%20case%20the%20Go,size%20(251k%20before%20stripping)!]
> of those generated with Go (significant for applications hosted on the web).
> Arrow's use of `reflect.SliceHeader` fields limits the portability of the
> code. For example, the `Len` and `Cap` fields are assumed to be `int` here:
> https://github.com/apache/arrow/blob/go/v9.0.0/go/arrow/bitutil/bitutil.go#L158-L159
> Go's [reflect package
> warns|https://github.com/golang/go/blob/go1.19/src/reflect/value.go#L2675-L2685]
> that the SliceHeader "cannot be used safely or portably and its
> representation may change in a later release."
> Attempts to build a WASM binary using the github.com/apache/arrow/go/v10
> module result in failures like this:
> {code}
> tinygo build -tags noasm -o test.wasm ./main.go
> {code}
> {code}
> # github.com/apache/arrow/go/v10/arrow/bitutil
> ../../go/pkg/mod/github.com/apache/arrow/go/[email protected]/arrow/bitutil/bitutil.go:158:10:
> invalid operation: h.Len / uint64SizeBytes (mismatched types uintptr and int)
> ../../go/pkg/mod/github.com/apache/arrow/go/[email protected]/arrow/bitutil/bitutil.go:159:10:
> invalid operation: h.Cap / uint64SizeBytes (mismatched types uintptr and int)
> {code}
> This happens because TinyGo uses `uintptr` for the corresponding types:
> https://github.com/tinygo-org/tinygo/blob/v0.25.0/src/reflect/value.go#L773-L777
> This feels like an issue with TinyGo, and it has been ticketed there multiple
> times (see https://github.com/tinygo-org/tinygo/issues/1284). They lean on
> the warnings in the Go sources that use of the SliceHeader fields makes code
> unportable and suggest changes to the libraries that do not heed this warning.
> I don't have a suggested fix or alternative for Arrow's use of SliceHeader
> fields, but I'm wondering if there would be willingness on the part of this
> package to make WASM builds work with TinyGo. Perhaps the TinyGo authors
> could also offer suggested changes.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)