| ▲ | Go on Embedded Systems and WebAssembly(tinygo.org) |
| 64 points by uticus 3 hours ago | 9 comments |
| |
|
| ▲ | nasretdinov 2 hours ago | parent | next [-] |
| Tinygo made a lot of progress over the years -- e.g. they've recently introduced macOS support! It does indeed produce much smaller binaries, including for macOS. yuriy@MacBookAir ~/t/tinygo> time tinygo build -o test-tiny main.go
________________________________________________________
Executed in 1.06 secs fish external
usr time 1.18 secs 0.31 millis 1.18 secs
sys time 0.18 secs 1.50 millis 0.18 secs
yuriy@MacBookAir ~/t/tinygo> time go build -o test-normal main.go
________________________________________________________
Executed in 75.79 millis fish external
usr time 64.06 millis 0.41 millis 63.64 millis
sys time 96.76 millis 1.75 millis 95.01 millis
yuriy@MacBookAir ~/t/tinygo> ll
total 5096
-rw-r--r--@ 1 yuriy staff 74B 3 Apr 19:17 main.go
-rwxr-xr-x@ 1 yuriy staff 2.3M 3 Apr 19:18 test-normal*
-rwxr-xr-x@ 1 yuriy staff 192K 3 Apr 19:18 test-tiny*
yuriy@MacBookAir ~/t/tinygo> cat main.go
package main
import "fmt"
func main() {
fmt.Printf("Hello world!\n")
}
|
|
| ▲ | carverauto an hour ago | parent | prev | next [-] |
| We're using TinyGo and the Wazero runtime for our WASM plugin system in ServiceRadar, highly recommend both if you're using golang. |
| |
| ▲ | apitman 24 minutes ago | parent | next [-] | | Wazero is awesome. For anyone wanting to embed in languages other than Go, check out Extism. | |
| ▲ | evacchi 32 minutes ago | parent | prev [-] | | Yay wazero maintainer here, thanks for the shout-out! |
|
|
| ▲ | tatjam an hour ago | parent | prev [-] |
| Writing embedded code with an async-aware programming language is wonderful (see Rust's embassy), but wonder how competitive this is when you need to push large quantities of data through a micro controller, I presume this is not suitable for real-time stuff? |
| |
| ▲ | carverauto an hour ago | parent | next [-] | | We're streaming RSTP camera feeds through WASM plugins and host-bridge adapters, no problem. I was surprised how well it worked TBH. https://code.carverauto.dev/carverauto/serviceradar/src/bran... | |
| ▲ | nasretdinov an hour ago | parent | prev | next [-] | | You can disable GC in tinygo, so if you allocate all the necessary buffers beforehand it can have good performance with real-time characteristics. If you _need_ dynamic memory allocation then no, because you need GC it can't provide realtime guarantees. | |
| ▲ | clktmr 36 minutes ago | parent | prev | next [-] | | I've written a fair amount of code for EmbeddedGo. Garbage Collector is not an issue if you avoid heap allocations in your main loop. But if you're CPU bound a goroutine might block others from running for quite some time. If your platform supports async preemption, you might be able to patch the goroutine scheduler with realtime capabilities. | |
| ▲ | randusername 15 minutes ago | parent | prev [-] | | Can you elaborate on this and how it would be different from signaling on interrupts and DMA? Hardware-level async makes sense to me. I can scope it. I can read the data sheet. Software async in contrast seems difficult to characterize and reason about so I've been intimidated. |
|