<div dir="auto">Thank you, that was very illuminating.</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jul 17, 2018, 3:37 PM Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com">simonpj@microsoft.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-GB" link="blue" vlink="purple">
<div class="m_4518150608925449575WordSection1">
<p class="MsoNormal"><span>Here’s a little bit of background.<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<ul style="margin-top:0cm" type="disc">
<li class="m_4518150608925449575MsoListParagraph" style="margin-left:0cm"><span>C—started when Norman Ramsey and I decided to have a stab at designing a “portable assembly language”.<u></u><u></u></span></li><li class="m_4518150608925449575MsoListParagraph" style="margin-left:0cm"><span>Our primary motivation was GHC: I wanted to clearly separate the business of turning lambda calculus into an imperative language, from that
 of turning the imperative language into machine instructions for a particular CPU architecture.  But our intention was that many compilers, not just GHC, could generate C--.<u></u><u></u></span></li><li class="m_4518150608925449575MsoListParagraph" style="margin-left:0cm"><span>We published a series of papers describing why this goal is less easy than it looks (tail calls, garbage collection, exception handling, lightweight
 threading).<u></u><u></u></span></li><li class="m_4518150608925449575MsoListParagraph" style="margin-left:0cm"><span>But then along came LLVM.   It’s goal was the same (some differences in emphasis).   And LLVM “won” – it gained mindshare, a corporate sponsor,
 an ecosystem.   I’m quite happy about this – hundreds of person-years invested by someone else
</span><span style="font-family:"Segoe UI Emoji",sans-serif">😊</span><span>.<u></u><u></u></span></li><li class="m_4518150608925449575MsoListParagraph" style="margin-left:0cm"><span>As a result C—is really a GHC-only language (though nothing stops other compilers from using it)   <u></u><u></u></span>
<ul style="margin-top:0cm" type="circle">
<li class="m_4518150608925449575MsoListParagraph" style="margin-left:0cm"><span>Cmm is the GHC data type (defined in compiler/cmm) that represents C—syntax trees internally in GHC.<u></u><u></u></span></li><li class="m_4518150608925449575MsoListParagraph" style="margin-left:0cm"><span>We do parse foo.cmm for a few runtime system support files; e.g. rts/Apply.cmm<u></u><u></u></span></li><li class="m_4518150608925449575MsoListParagraph" style="margin-left:0cm"><span>But most Cmm is generated from STG by compiler/codeGen<u></u><u></u></span></li><li class="m_4518150608925449575MsoListParagraph" style="margin-left:0cm"><span>We do CPS conversion on Cmm<u></u><u></u></span></li><li class="m_4518150608925449575MsoListParagraph" style="margin-left:0cm"><span>…and then either emit LLVM, or generate assembly code directly (compiler/nativeGen)<u></u><u></u></span></li></ul>
</li></ul>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span>I hope that helps a bit.<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span>Simon<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> ghc-devs <<a href="mailto:ghc-devs-bounces@haskell.org" target="_blank" rel="noreferrer">ghc-devs-bounces@haskell.org</a>>
<b>On Behalf Of </b>Gabor Greif<br>
<b>Sent:</b> 17 July 2018 07:17<br>
<b>To:</b> Daniel Cartwright <<a href="mailto:chessai1996@gmail.com" target="_blank" rel="noreferrer">chessai1996@gmail.com</a>><br>
<b>Cc:</b> <a href="mailto:ghc-devs@haskell.org" target="_blank" rel="noreferrer">ghc-devs@haskell.org</a><br>
<b>Subject:</b> Re: Cmm learning tools<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">No worries! I searched for C--, which was its name back in the day. There are a bunch of other conference papers in the "GHC commentary" too.<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Cheers,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">     Gabor<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">Em ter, 17 de jul de 2018 às 08:00, Daniel Cartwright <<a href="mailto:chessai1996@gmail.com" target="_blank" rel="noreferrer">chessai1996@gmail.com</a>> escreveu:<u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">Thanks, I'll check it out.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">P.S.: Apologies if my request seemed low-effort w.r.t. searching, I did spend a good 15 minutes doing so before asking, and was unable to find the document you just produced.<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Tue, Jul 17, 2018, 1:49 AM Gabor Greif <<a href="mailto:ggreif@gmail.com" target="_blank" rel="noreferrer">ggreif@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">Hello Daniel,<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">a quick web search brought up this manual:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal"><a href="https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fresearch%2Fwp-content%2Fuploads%2F1998%2F01%2Fpal-manual.pdf&data=02%7C01%7Csimonpj%40microsoft.com%7C7bb75be5019e41da25c108d5ebace57c%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636674050179363610&sdata=FsXmfxGIxygcYNE0B%2BKEtS%2FQ%2BYVTS3FXiIkmY79avys%3D&reserved=0" target="_blank" rel="noreferrer">https://www.microsoft.com/en-us/research/wp-content/uploads/1998/01/pal-manual.pdf</a><u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Please note that Cmm is slightly different, but it should get you started.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Cheers,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">     Gabor<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">Em ter, 17 de jul de 2018 às 05:20, Daniel Cartwright <<a href="mailto:chessai1996@gmail.com" target="_blank" rel="noreferrer">chessai1996@gmail.com</a>> escreveu:<u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">Hello all, I've recently become interested in learning Cmm, but cannot seem to find any concrete learning resources or extensive papers. It doesn't help that the web seems to contain a lot of useless information for a newcomer to Cmm. If
 anyone could provide some reading material about Cmm, I would be most grateful.<u></u><u></u></p>
</div>
<p class="MsoNormal">_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank" rel="noreferrer">ghc-devs@haskell.org</a><br>
<a href="https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-devs&data=02%7C01%7Csimonpj%40microsoft.com%7C7bb75be5019e41da25c108d5ebace57c%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636674050179373618&sdata=qtMzW379UuYSun9DPOePyGSYMXlBA%2FGLnEzUVHcdkXs%3D&reserved=0" target="_blank" rel="noreferrer">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><u></u><u></u></p>
</blockquote>
</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>

</blockquote></div>