5 ms·
Compiler Explorer
- s9w 8y agoAnd right at the top there's a link to the "diversity" initiative includecpp.org... whose resources happily teach about "Mansplaining", "White Privilege", "Inequality of Pay" and "GoogleBro - Google Memo August 2017 - James Damore". Wow
- tomalpha 8y agoNice to see this continues to get exposure. It remains awesome and every time I return to it Matt's added some new nifty feature. More please Matt!
- xvilka 8y agoSee also a command line tool[1] for this, written in Rust. [1] https://github.com/ethanhs/cce https://github.com/ethanhs/cce
- danieldk 8y agoNote that for Rust programs, there is also cargo-asm: https://github.com/gnzlbg/cargo-asm https://github.com/gnzlbg/cargo-asm (I frequently use Godbolt though, it's so nice for comparing across languages.)
- wyldfire 8y agoNeat. But once you're using command line tools why not just use the constituent tools used by Compiler Explorer? `objdump`, etc?
- johnisgood 8y agoBecause it is not written in Rust!!!1!1one However, something tells me that it has been ported to Rust.
- deleted 8y ago[deleted]
- drej 8y agoMatt Godbolt is a great speaker as well. I loved this talk that included a bit about the architecture behind his Compiler Explorer. The rest of his talk is super cool as well. E.g. closed form solutions from O(n) code? Compilers are awesome. https://m.youtube.com/watch?v=bSkpMdDe4g4 https://m.youtube.com/watch?v=bSkpMdDe4g4
- 15116 8y ago#incluide "/etc/passwd" ?
- phoe-krk 8y agoNothing out of the ordinary there. And the compiling user is not permitted to read /etc/shadow.
- mattgodbolt 8y agoExactly :) Also even if it could, it would be the `/etc/shadow` of the docker container things run in :)
- foxrob92 8y agoDoesn't look like it works any more. In any case, Matt Godbolt has spoken a bit about the architecture of Compiler Explorer. Seems like he's given some thought to security. https://www.youtube.com/watch?v=bSkpMdDe4g4 https://www.youtube.com/watch?v=bSkpMdDe4g4 https://www.youtube.com/watch?v=nAbCKa0FzjQ https://www.youtube.com/watch?v=nAbCKa0FzjQ
- wyldfire 8y agoIIRC the main sandboxing comes from a wrapper around libc that restricts pathnames used in open() and friends. It seems reasonably well designed for its intent but probably not super difficult to escape. Certainly if the C library adds another entry point, it won't be obvious that there's a new way around. What the Compiler Explorer has going for it in this regard is that there's very little treasure to be found once you escape. No user accounts, no passwords, no security questions, no financial transactions, etc. Compiler Explorer doesn't execute the programs it builds, so the risk is limited to what you can convince the compiler/assembler to do on your behalf.
- twic 8y ago> limited to what you can convince the compiler/assembler to do on your behalf C++ is a not a language where i would have a lot of confidence in that limitation!
- wener 8y agoGodbolt is very impressive for learning assembly, I also post this 5 days ago https://news.ycombinator.com/item?id=18635399 https://news.ycombinator.com/item?id=18635399
- robertsd247 8y agoNo perl?!?!?!?
- detaro 8y agoIn a tool to study assembly output of compilers?
- hoytech 8y ago$ perl -MO=Concise -e 'my $v = 1234; $v *= 9876' a <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 -e:1) v:{ ->3 5 <2> sassign vKS/2 ->6 3 <$> const[IV 1234] s ->4 4 <0> padsv[$v:1,2] sRM*/LVINTRO ->5 6 <;> nextstate(main 2 -e:1) v:{ ->7 9 <2> multiply[t2] vKS/2 ->a 7 <0> padsv[$v:1,2] sRM ->8 8 <$> const[IV 9876] s ->9 -e syntax OK
- 0xcde4c3db 8y agoThis tool is really built for AOT native code generation. Does Perl have a compiler like that? The ones I've heard of are all some flavor of compiling to bytecode followed by an interpreter or JIT.
- hoytech 8y agoFor perl5 there have been several attempts at AOT native code compilers. For example: http://rperl.org http://rperl.org
- deleted 8y ago[deleted]
- pjmlp 8y agoIt a very nice project. I really like how it grew to encompass any language with AOT/JIT compilers, as long as anyone is willing to support the language related tooling.
- singularity2001 8y agothat's such a wonderful tool, for which I have 0 usage
- nyrulez 8y agoThis is amazing for all computer science degree courses. I wish I had this when I was learning this stuff. Sadly, I think the truth is that most profs or students won't know this platform exists.
- pjmlp 8y agoCompilers have had the ability do dump Assembly since the early days, and many IDEs do support an interleaved Assembly view, so the missing teaching opportunity has been there for quite a long time.
- kazinator 8y agoSee: https://news.ycombinator.com/item?id=18683814 https://news.ycombinator.com/item?id=18683814
- jokh 8y agoThis would be really useful if it can be run offline. Much easier to use than writing code, compiling it with -S to produce assembly, then trawling through the assembly to look for the code you're interested in.
- rasjani 8y agoI haven’t really tried it but from all the exposure godbolt gets in cppcast, I think there is a way to run it locally.
- mshockwave 8y agoIt's open source, so you can just clone the source code and run the server locally on your computer. I've been running it like this for a long time :-)
- jokh 8y agoOh, I had no idea it was open source. Thanks!
- ufo 8y agoHow hard was it to set up for you? Is it a small standalone thing or a beast with complex dependencies? Did you configure it to run everything locally or is it still requesting a web service to compile the programs?
- je42 8y agoi got it up and running within 30min or so.
- Const-me 8y agoIf you're interested in the code, put a breakpoint and launch with a debugger. In Visual C++ that literally two keypresses, F9 and F5. As a nice side effect, you can step over the assembly instructions observing how they change registers and memory.
- unhammer 8y ago
- purple_ducks 8y agoLegit 10/10 for their displayed privacy policy.
- mouldysammich 8y agoThere is this thing that works similarly but for emacs: https://gitlab.com/jgkamat/rmsbolt https://gitlab.com/jgkamat/rmsbolt It seems pretty gosh darn spicy
- johnisgood 8y agoWow, this is amazing. Thank you!
- WhitneyLand 8y agoReally nice work by Matt. Haven’t seen a project before that makes some of that stuff quite so quick and simple. Tangentially, anyone have a transpiler recommendation? Started to look at Babel but it seems most inclined to targeting Javascript. Looking to go bidirectional between Python and a proprietary DSL. Would have to reverse engineer the DSL grammmar I assume but it doesn’t seem very complex, so hearing of any good tooling would be interesting.
- kazinator 8y agoOr, in one line of shell: echo 'int square(int num) { return num*num; }' | gcc -S -x c - -o - How about this: open an editor on "test.c". Then in another terminal window, run this script: #!/bin/sh rm -f test_copy.c while true ; do if [ test.c -nt test_copy.c ] ; then cp test.c test_copy.c clear gcc -S test_copy.c -o - fi sleep 0.3 done Every time you save test.c, the compiler output updates in the other shell window (within a fraction of a second).
- steveklabnik 8y agoGodbolt has many more features than this. It can show you mappings from your code to the outputted asm, it can show help text on what instructions mean, you can compare multiple compilers against the same source file easily...
- sigjuice 8y agoIs there a way to set this up to have two windows? One window to type code into and the other to run my program? I have been fiddling with the UI for a while, but can't quite figure it out.
- sigjuice 8y agoMy bad. For some reason I thought I could actually run programs, but looks like that isn’t the case.