Golang PGO builds using GitHub Actions

(dolthub.com)

80 points | by kiyanwang 11 days ago

2 comments

  • KingOfCoders 11 days ago
    Excellent, I would wish Go had more build flags though, e.G. for deeper escape analysis to remove pointers and reduce GC.
    • ori_b 11 days ago
      Why a flag? In what case would you turn that analysis off separately from other optimizations?
      • diegobernardes 11 days ago
        Go is known by the speed of it's compiler, doing extra work during the compilation would slow it down. I would not mind either to have a "release" flag that would take minutes and produce a more optimized binary.
        • eliben 11 days ago
          In a way, that's what the PGO mode of the compiler is
        • KingOfCoders 11 days ago
          Yes this, I mainly use Go for it's simplicity and the speed of the compiler. What I don't want is Rust compile speeds.
          • pjmlp 11 days ago
            As proven by D, OCaml, F#, Delphi, Ada, C++23 (with modules, VC++/clang 18), it is a matter of toolchain.

            What we need is a Rust interpreter, or having something like Cranelift properly integrated, to only depend on LLVM when doing release builds on the CI/CD.

            • KingOfCoders 11 days ago
              Having used Scala for some years with it's abysmal compile speed, I fear it has to do with complexity of the language and features, it was "implicit" in Scala, it might be the borrow checker in Rust (IANACG)
              • steveklabnik 11 days ago
                If you examine what takes time in the Rust compiler, the borrow checker is never a significant component.

                The largest single bit tends to be codegen, which is why cargo check is so much faster than cargo build.

              • pjmlp 11 days ago
                Note that I left out Scala, while I included other languages of similar complexity, exactly because improving compile times has never been a major focus in Scala land, versus features.

                Example, development effort wasted on Scala 3 Python like syntax.

                There are several performance reports that show that the major culprit is the pile of LLVM IR sent to the backend.

        • pjmlp 11 days ago
          In theory that is what gccgo is for, in practice it is stuck in Go 1.18.
          • nasretdinov 11 days ago
            tinygo also tries really hard to produce an optimised binary, however it mostly optimises for size, not speed.
  • nikolayasdf123 11 days ago
    hope Go core team continue improving compiler!