Hacker News new | past | comments | ask | show | jobs | submit login
Compiler Explorer (thechipletter.substack.com)
116 points by rbanffy 25 days ago | hide | past | favorite | 17 comments



Author here. Thanks for all the upvotes - and Compiler Explorer is awesome - but I’m not sure this should be on the front page as it’s mostly a collection of links. @dang


I disagree. I found it to be a very nice approachable high-level walkthrough of what CE can do. I've used CE for various things, but still learned about several capabilities that I didn't know about and can make use of.

And calling something like this just "a collection of links"... have you seen the crap that passes for a web page on today's web? I'll take a manually curated collection of links with some useful commentary any day over the AI-generated "here are 30 answers to your question and several similar questions, with repeats and contradictory answers thrown in for free" things I find all over the place.


> but I’m not sure this should be on the front page as it’s mostly a collection of links

I disagree. A lot of time there's a link to a project on Hacker News without any kind of about page. I significantly prefer to go to an about / demo page that tells me about the tool, with links to the tool itself.

> Disclaimer: We are now entering a ‘rabbit hole’ that may consume several hours of your time.

I really enjoyed skimming the article; seeing your results instead of taking the time to learn how to use the tool and generate similar results.


I have never seen it called anything other than godbolt and rightfully so because it's a fantastic, free, open source tool (so that guy deserves all the notoriety furnished by everyone knowing the tool by only his name).


For me (on every domain highlighted in github) it's

  //ÄTypeÄyourÄcodeÄhere,ÄorÄloadÄanÄexample.
  intÄsquare(intÄnum)Ä{
which renders the code unreadable


apparently those are fonts 'Liberation mono' and 'Consolas' on macos


> may consume several hours of your time

Several hours? More like few lives, the stack is just too big to deal within a single life :)

And the rabbit hole goes even deeper with external tools like https://alive2.llvm.org/ce/ and mirrored versions for obscure architectures


As a low-level performance-oriented engineer I use the Compiler Explorer almost every day. It is a great tool, give it a try.


Is Common Lisp the only language with this built-in?

    CL-USER> (defun foo (a b)
               (declare (optimize (speed 3))
                        (type fixnum a b))
               (+ a b))
    FOO
    
    CL-USER> (disassemble #'foo)
    
    ; disassembly for FOO
    ; Size: 23 bytes. Origin: #x1002230744                        ; FOO
    ; 44:       4801FA           ADD RDX, RDI
    ; 47:       48D1E2           SHL RDX, 1
    ; 4A:       710A             JNO L0
    ; 4C:       48D1DA           RCR RDX, 1
    ; 4F:       FF1425F00C1050   CALL [#x50100CF0]                ; SB-VM::ALLOC-SIGNED-BIGNUM-IN-RDX
    ; 56: L0:   C9               LEAVE
    ; 57:       F8               CLC
    ; 58:       C3               RET
    ; 59:       CC10             INT3 16                          ; Invalid argument count trap
    NIL
    
    CL-USER>
The Emacs Lisp mode has support for it, too - I have Alt-F8 open the disassembly of the current function in a new window next to the current window.



you were probably looking for

    (defun foo (a b)
      (declare (optimize (speed 3))
               (type fixnum a b))
      (the fixnum (+ a b)))


Heh, I didn't really think about it, but to finish out the example:

    CL-USER> (defun foo (a b)
      (declare (optimize (speed 3))
               (type fixnum a b))
      (the fixnum (+ a b)))
    WARNING: redefining COMMON-LISP-USER::FOO in DEFUN
    FOO
    
    CL-USER> (disassemble #'foo)
    ; disassembly for FOO
    ; Size: 22 bytes. Origin: #x101127E9B4                        ; FOO
    ; B4:       4801FA           ADD RDX, RDI
    ; B7:       488BC2           MOV RAX, RDX
    ; BA:       48D1E0           SHL RAX, 1
    ; BD:       7006             JO L0
    ; BF:       48D1E2           SHL RDX, 1
    ; C2:       C9               LEAVE
    ; C3:       F8               CLC
    ; C4:       C3               RET
    ; C5: L0:   CC59             INT3 89                          ; OBJECT-NOT-FIXNUM-ERROR
    ; C7:       0A               BYTE #X0A                        ; RDX(s)
    ; C8:       CC10             INT3 16                          ; Invalid argument count trap
    NIL
    
    CL-USER> 
And to optimize away everything:

    CL-USER> (defun foo (a b)
      (declare (optimize (speed 3) (safety 0) (debug 0) (space 3))
               (type fixnum a b))
      (the fixnum (+ a b)))
    WARNING: redefining COMMON-LISP-USER::FOO in DEFUN
    FOO
    
    CL-USER> (disassemble #'foo)
    ; disassembly for FOO
    ; Size: 6 bytes. Origin: #x101127F026                         ; FOO
    ; 6:       4801FA           ADD RDX, RDI
    ; 9:       C9               LEAVE
    ; A:       F8               CLC
    ; B:       C3               RET
    NIL
    
    CL-USER>


Indeed. Keep in mind though that the disassembly begins at an offset and doesn't contain the function header, i.e. FOO is quite a bit larger than 6 bytes.


Related. Others?

The Compiler Explorer Story – Matt Godbolt - https://news.ycombinator.com/item?id=40140698 - April 2024 (5 comments)

Matt Godbolt: Five things you didn't realise your CPU did for you - https://news.ycombinator.com/item?id=33312400 - Oct 2022 (16 comments)

Compiler Explorer - https://news.ycombinator.com/item?id=33224542 - Oct 2022 (107 comments)

Happy 10th Birthday Compiler Explorer - https://news.ycombinator.com/item?id=31470251 - May 2022 (20 comments)

Compiler Explorer - https://news.ycombinator.com/item?id=24066570 - Aug 2020 (48 comments)

Compiler Explorer - https://news.ycombinator.com/item?id=18671993 - Dec 2018 (44 comments)

How it works: Compiler Explorer - https://news.ycombinator.com/item?id=16295493 - Feb 2018 (25 comments)

Godbolt: Enter C, get Assembly - https://news.ycombinator.com/item?id=13182726 - Dec 2016 (151 comments)

Compiler Explorer – now with side-by-side compiler comparison - https://news.ycombinator.com/item?id=12627295 - Oct 2016 (6 comments)

Compiler Explorer - https://news.ycombinator.com/item?id=11671730 - May 2016 (38 comments)

Interactive C++ Assembly Explorer - https://news.ycombinator.com/item?id=9861294 - July 2015 (8 comments)

See What Your C Function Compiles To - https://news.ycombinator.com/item?id=9808870 - June 2015 (2 comments)

Interactive Go source to assembly - https://news.ycombinator.com/item?id=9085158 - Feb 2015 (12 comments)

Nibble sort competition winner on GCC Explorer - https://news.ycombinator.com/item?id=9049864 - Feb 2015 (1 comment)

C/C++ Fiddle - https://news.ycombinator.com/item?id=7593109 - April 2014 (40 comments)

Interactively watch how your C++ gets compiled. - https://news.ycombinator.com/item?id=4020814 - May 2012 (1 comment)


Well, as awesome as the godbolt explorer and similar tools are, I see the danger of them aiding in premature optimization.


Wait, people use them for benchmarks? I just use them to find quick workarounds to incrutable compiler errors and language idiosyncracies. I wouldn't trust a web app for any serious optimization testing (unless the web was my target platform).


I think that Amdahl's law explains it much more succinctly.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: