40 pointsby tosh10 hours ago6 comments
  • jsherer5 hours ago
    I was confused a few weeks ago. Check out the go pkg: https://pkg.go.dev/modernc.org/sqlite

    1. gitlab.com/cznic/sqlite is the primary repo

    2. github.com/cznic/sqlite was the github mirror but it moved

    3. github.com/mordernc-org/sqlite is the read-only mirror of the primary repo

    Cheers!

    • porjo2 hours ago
      > 3. github.com/mordernc-org/sqlite is the read-only mirror of the primary repo

      Typo, should be: github.com/modernc-org/sqlite

  • ncruces2 hours ago
    There's also my take on this [1], which does machine translation from C to Go via Wasm using [2].

    It's a somewhat less faithful translation, since I manually ported the VFS (SQLite OS abstraction layer).

    OTOH, each SQLite connection is sandboxed (can't access/corrupt Go memory, or other SQLite connections). And it should run everywhere Go runs.

    1: https://github.com/ncruces/go-sqlite3

    2: https://github.com/ncruces/wasm2go

  • yodon5 hours ago
    Seems like there are some trademark issues with just calling this SQLite.
  • usrnm5 hours ago
    The readme really lacks the answer to the "why" question. What's the use case, why should I prefer it over real sqlite?
    • tptaceka minute ago
      The biggest reason you'd want a cgo-free sqlite is if you're cross-compiling; for instance, from your macOS dev laptop to an x64 dev server.
    • ameliaquining4 hours ago
      The "port" terminology is misleading; this is real SQLite, compiled from C to Go using https://gitlab.com/cznic/ccgo/-/tree/master/v4 (by the same author; this library is its most widely used application). The use case is that a lot of Go codebases prefer to completely eschew FFI because a lot of the nice properties of Go's tooling and whatnot (cross-compilation is trivial, binaries are automatically static on Linux, etc.) only hold if the entire build is pure Go.
      • ivanjermakov3 hours ago
        So because of Go's design mistakes.
        • 10000truths4 minutes ago
          No. A mistake is unintentional. Go's rejection of a C runtime dependency is a deliberate trade off, and one that has served it well for its design goals.
        • ameliaquining3 hours ago
          Compared to what? Other languages AFAIK don't offer those properties at all, except I guess Zig.
    • blubber4 hours ago
      Because it's cgo-free maybe?
      • usrnm4 hours ago
        Cgo overhead is trivial compared to what's happening inside a database engine, totally not worth it
        • anupcshan4 hours ago
          It's not just about overhead/performance. cgo-free means no need to set up a cross-compiler if targeting other devices. Just "go build" with the right GOARCH and GOOS will let you compile a binary that will run on most devices.
          • dizhn4 hours ago
            Static builds cannot have cgo too if I am not mistaken.
            • agwa3 hours ago
              The following go flags let you build statically-linked cgo binaries, provided that all the C libraries that you're using support static linking and don't call the NSS functions in glibc:

              -tags netgo,osusergo -linkmode external -extldflags -static

              I regularly compile (cross-compile, even) static Go binaries that use the cgo sqlite package. But it's certainly a lot simpler if you can avoid cgo.

          • usrnm4 hours ago
            I'm pretty sure that C is a much better choice if you really care about binaries that run on most devices
            • Ferret74464 hours ago
              Depends on what you mean by "most". The cross compile story for Go is far superior to C for the platforms it supports.
            • anupcshan2 hours ago
              This project is for using Sqlite from Go code. It is not a general purpose replacement.
        • figmert4 hours ago
          Absolutely not. Maybe runtime overheads are minimal, but builds are so much harder to do. And yes, you need to figure it out maybe once, but it is still a lot more effort than just pulling in a new dependency. Now repeat that same effort for every new application, vs pulling that into every new application.
        • raggi4 hours ago
          that’s really not true when the database is all in memory, statements are prepared, and so on.

          but the overheads also stack up, the database/sql api is fairly allocation heavy too unless you do a lot of work and that friction increases quite a bit with the ffi boundary.

          this is not to suggest “modernc is faster” - it’s not for a lot a workloads.

          there are opportunities for optimization all over both approaches.

  • pstuart6 hours ago
    So is this a handmade port vs the translated port done by modernc?
    • vicek225 hours ago
      modernc is the name of the GitHub fork (identical repo) of the same project. This is machine translated, not hand written.
  • ftgffsdddr5 hours ago
    Gitlab requires js

    Would you please host it on a different forge, eg codeberg

    • zzo38computer4 hours ago
      I agree that it would be better to not require JavaScripts. (But, I think it can be helpful to have mirrors on other services as well, for this and other reasons.)

      However, there are some work arounds to some situations. Git could (presumably) still be used, if you have that (although you might not want the entire repository and only some files, so that is a possible issue with this). If you have a URL of a specific file that you can change "blob" to "raw" in the URL to access the raw file (this works on other services as well and is not specific to Gitlab). For commits, you can add ".patch" or ".diff" on the end of the URL (this also is not specific to Gitlab).

    • 3 hours ago
      undefined
    • slopinthebag5 hours ago
      Codeberg requires html

      Would you please host it on a different forge that doesn't require a web browser?

    • bananamogul4 hours ago
      HackerNews requires js.

      Would you please post this on a different discussion forum?