Purego – A library for calling C functions from Go without Cgo

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • InfluxDB - Collect and Analyze Billions of Data Points in Real Time
  • SonarCloud - Analyze your C and C++ projects with just one click.
  • Mergify - Updating dependencies is time-consuming.
  • purego

    I thought I had a piece of dust on my screen, but as I scrolled the dust scrolled: what do these 0xB7 characters do in the identifiers? Are they just "name mangling" to keep them from being exported or something?

    https://github.com/ebitengine/purego/blob/v0.2.0-alpha/sys_d...

    I noticed another 0xB7 character in a comment, and sure enough it seems to be part of the identifiers: https://github.com/ebitengine/purego/search?q=runtime%C2%B7c...

  • mach

    zig game engine & graphics toolkit

    Very cool! I will definitely give this a try, I've been looking to build Go bindings to Mach[0] soon.

    How does this work around the stack size problem? IIRC the reason CGO overhead exists is at least partly because goroutines only have an ~8k stack to start with, and the C code doesn't know how to expand it-so CGO calls "must" first have the goroutine switched to an OS thread which has an ~8MB stack.

    One reason I think Go <-> Zig could be a fantastic pairing is that Zig plans to add a builtin which tells you the maximum stack size of a given function[1], so you could grow the goroutine stack to that size and then call Zig (or, since Zig an compile C code, you could also call C with a tiny shim to report the stack required?) and then eliminate the goroutine -> OS thread switching overhead.

    [0] https://github.com/hexops/mach

    [1] https://github.com/ziglang/zig/issues/157

  • InfluxDB

    Collect and Analyze Billions of Data Points in Real Time. Manage all types of time series data in a single, purpose-built database. Run at any scale in any environment in the cloud, on-premises, or at the edge.

  • bud

    The Full-Stack Web Framework for Go

    Awesome!

    This would be such a game-changer for server-side rendering Javascript in Go with V8.

    I'd love to integrate this into Bud[1].

    [1] https://github.com/livebud/bud

  • SWIG

    SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages.

    How is this any different than a mature tool such as SWIG (https://www.swig.org/)?

    I've used SWIG extensively with Python to call C code and import C headers for testing/tooling purposes.

  • rust-plus-golang

    Rust + Go — Call Rust code from Go using FFI

    Oh then sure, I don't see why you couldn't use it with something like https://github.com/mediremi/rust-plus-golang

  • SonarCloud

    Analyze your C and C++ projects with just one click.. SonarCloud, a cloud-based static analysis tool for your CI/CD workflows, offers a one-click automatic analysis of C and C++ projects hosted on GitHub. Zero configuration and free for open-source projects! Analyze free.

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts