go
TinyGo
go | TinyGo | |
---|---|---|
2,172 | 99 | |
123,918 | 15,414 | |
0.7% | 1.2% | |
10.0 | 9.4 | |
6 days ago | 5 days ago | |
Go | Go | |
BSD 3-clause "New" or "Revised" License | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
go
- Go Turns 15
- Go memory regions (arena-like)
- Discussion on Feedback for Go Memory Regions
- Early draft discussion of memory regions for Go language to reduce GC overhead
-
Why I love Rust for tokenising and parsing
I think they're asking how the code in the Go runtime that implements the garbage collector, a core feature of the language, avoids needing the garbage collector to already exist to be able to run, being written in the language that it's a core feature of. I suspect the answer is just something like "by very carefully not using language features that might tempt the compiler to emit something that requires an allocation". I think it's a fair question as it's not really obvious that that's possible--do you just avoid calling make() and new() and forming pointers to local variables that might escape? Do you need to run on a magical goroutine that won't try to grow its stack with gc-allocated segments? Can you still use slices, closures, ...?
I think the relevant code is https://github.com/golang/go/blob/master/src/runtime/mgc.go and adjacent files. I see some annotations like //go:systemstack, //go:nosplit, //go:nowritebarrier that are probably relevant but I wouldn't know if there's any other specific requirements for that code.
-
Play games from your terminal!
I decided to use Go because I'm familiar with it, it's easy to learn and read, it's popular, and it's fast. Being a compiled, cross-compatible language doesn't hurt, either.
-
How to use migrations with Golang
To follow this article you'll need: Go and Docker with Docker Compose
-
Writing Secure Go Code
My own experience is that the Go stdlib has resulted in worse security than, for example, rust.
The reason for that is that both the Rust and Go stdlib have a stability promise, so anything built into them can't change if it's insecure.
For example, the 'tar' package in go by default returns unsanitized paths, and has led to a bunch of CVEs: https://github.com/golang/go/issues/55356
The go stdlib can't change the tar package to make it secure by default because it would be a breaking change to do so.
Rust, on the other hand, has a tar package outside of the stdlib, and so it can evolve to be more secure and over time find a better interface.
We've seen that with various other packages, where the Go stdlib HTTP implementation defaults to no timeouts, and thus makes it easy to DoS yourself. Ditto for DNS. The tls package has similar backwards compatibility warts that make it less secure by default.
Forcing backwards compatibility with network protocols by baking them into the stdlib has largely not been a security win in my experience.
-
Australia/Lord_Howe is the weirdest timezone
> America/Nuuk does daylight savings at -01:00 (yes, with a negative)
Europe/Dublin also has a negative DST offset. Irish DST runs through the European winter (i.e. the opposite of the other European timezones).
(More details here: https://github.com/golang/go/issues/56743#issuecomment-13157... )
-
Go sync.Cond, the Most Overlooked Sync Mechanism
By the way, there's actually been talk about removing sync.Cond in Go 2: proposal: sync: remove the Cond type.
TinyGo
- Introduction to the event "TinyGo Keeb Tour 2024"
- TinyGo – A Go Compiler for Small Places
- Cylon: JavaScript framework for robotics, drones, and the Internet of Things
- Gokrazy – Go Appliances
-
A "Tiny" APISIX Plugin
Reading through the documentation, you will understand why this plugin is called "tiny," i.e., the SDK uses the TinyGo compiler instead of the official Go compiler. You can read more about why this is the case on the SDK\'s overview page, but the TLDR version is that the Go compiler can only produce Wasm binaries that run in the browser.
-
What's Zig got that C, Rust and Go don't have? [video]
Not only you can fit Go into a kernel, there is at least two products that do so.
TamaGo, used to write the firmware used in USB armory.
https://www.withsecure.com/en/solutions/innovative-security-...
TinyGo, which even has official Arduino and ARM support, and is sponsored by Google
https://tinygo.org/
Ah but that isn't proper Go! Well neither is the C code that is allowed to be used in typical kernel code, almost nothing from ISO C standard library is available, and usually plenty of compiler specific language extensions are used instead.
-
Show HN: A new stdlib for Golang focusing on platform native support
Reminds me of https://tinygo.org/ - a project that brings Golang to embedded devices, browser (wasm) contexts. Do you converge or diverge from that project?
- TinyGo release 0.29 is out
-
Pico with C
You should also consider TinyGo. It can compile Go for the Pico, and is starting to get good device support.
-
Rust 1.71.0
Thankfully some folks completly ignored whatever the rest of the world thinks system programming is all about and created:
- TinyGo (https://tinygo.org/), which is acknowledged by people in the industry[0][1]
- TamaGo unikernel on USB Armory secure key (https://www.withsecure.com/de/solutions/innovative-security-...)
And then there is the question if writing compilers, assemblers, linkers is systems programming or not.
[0]-https://www.cnx-software.com/2019/08/28/tinygo-go-compiler-f...
[1]-https://twitter.com/ArmSoftwareDev/status/131680481331796787...
What are some alternatives?
v - Simple, fast, safe, compiled language for developing maintainable software. Compiles itself in <1s with zero library dependencies. Supports automatic C => V translation. https://vlang.io
MicroPython - MicroPython - a lean and efficient Python implementation for microcontrollers and constrained systems
zig - General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.
Nim - Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula. Its design focuses on efficiency, expressiveness, and elegance (in that order of priority).
micropython-ulab - a numpy-like fast vector module for micropython, circuitpython, and their derivatives
Angular - Deliver web apps with confidence 🚀
awesome-micropython - A curated list of awesome MicroPython libraries, frameworks, software and resources.
golang-developer-roadmap - Roadmap to becoming a Go developer in 2020
PlatformIO - Your Gateway to Embedded Software Development Excellence :alien:
RxGo - Reactive Extensions for the Go language.
zephyr - Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.