<div dir="ltr">Okay, it sounds like we want to take option (2). I added a draft pull request on the spec to get the (techincal) discussion going.<div><br></div><div>-N</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 9, 2017 at 4:52 PM, Calin Cascaval <span dir="ltr"><<a href="mailto:cascaval@barefootnetworks.com" target="_blank">cascaval@barefootnetworks.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">As long as we do not break the conversion from P4_14 for extern instantiation, I'm ok with removing the global instantiation.<div><br></div><div>I assume this restriction is with respect to user instantiations. Architectures should be able to instantiate packages at the top level.<br><div>
<div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br class="m_3410577285326979459Apple-interchange-newline">--</div><div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">Thanks, Calin</div>

</div><div><div class="h5">
<br><div><blockquote type="cite"><div>On May 9, 2017, at 16:40, Chris Dodd <<a href="mailto:chris@barefootnetworks.com" target="_blank">chris@barefootnetworks.com</a>> wrote:</div><br class="m_3410577285326979459Apple-interchange-newline"><div><div dir="ltr">I don't think forcing the programmer to put all declarations inside their top level control or parser instead of at the global level is that onerous.  If we get complaints from users about it being too hard we can always revisit this later -- add stuff is much easier than removing it.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 9, 2017 at 4:04 PM, Mihai Budiu <span dir="ltr"><<a href="mailto:mbudiu@vmware.com" target="_blank">mbudiu@vmware.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div link="blue" vlink="purple" lang="EN-US">
<div class="m_3410577285326979459m_-90535796568698326WordSection1"><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">I think it’s easiest to disallow top-level control and parser instantiations.<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">For externs there may be legitimate cases.<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">So +1 for (2).<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">We can always change our mind later.<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Mihai<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> P4-design [mailto:<a href="mailto:p4-design-bounces@lists.p4.org" target="_blank">p4-design-bounces@list<wbr>s.p4.org</a>]
<b>On Behalf Of </b>Gordon Brebner<br>
<b>Sent:</b> Tuesday, May 9, 2017 9:16 AM<br>
<b>To:</b> Dan Talayco <<a href="mailto:dan.talayco@gmail.com" target="_blank">dan.talayco@gmail.com</a>>; Nate Foster <<a href="mailto:jnfoster@cs.cornell.edu" target="_blank">jnfoster@cs.cornell.edu</a>><br>
<b>Cc:</b> <a href="mailto:p4-design@lists.p4.org" target="_blank">p4-design@lists.p4.org</a><br>
<b>Subject:</b> Re: [P4-design] global instances<u></u><u></u></span></p>
</div>
</div><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">+1 for (2).<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Gordon.<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><a name="m_3410577285326979459_m_-90535796568698326__MailEndCompose"></a><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> P4-design [<a href="mailto:p4-design-bounces@lists.p4.org" target="_blank">mailto:p4-design-bounces@list<wbr>s.p4.org</a>]
<b>On Behalf Of </b>Dan Talayco<br>
<b>Sent:</b> Tuesday, May 09, 2017 7:18 AM<br>
<b>To:</b> Nate Foster <<a href="mailto:jnfoster@cs.cornell.edu" target="_blank">jnfoster@cs.cornell.edu</a>><br>
<b>Cc:</b> <a href="mailto:p4-design@lists.p4.org" target="_blank">p4-design@lists.p4.org</a><br>
<b>Subject:</b> Re: [P4-design] global instances<u></u><u></u></span></p><p class="MsoNormal"><u></u> <u></u></p>
<div><span>
<div><p class="MsoNormal"><span style="font-size:9.5pt">> (2) Forbid top-level global state.<u></u><u></u></span></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
</span><div><p class="MsoNormal">+1 for (2) (though I can see arguments for supporting it). (2) is more inline with P4 historically. I think it can be a fairly easy extension of the language if there is a desire to support it in the future for particular targets.<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>
<div><p class="MsoNormal"><u></u> <u></u></p>
<div><span><p class="MsoNormal">On Tue, May 9, 2017 at 12:20 AM, Nate Foster <<a href="mailto:jnfoster@cs.cornell.edu" target="_blank">jnfoster@cs.cornell.edu</a>> wrote:<u></u><u></u></p>
</span><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt"><span>
<div><p class="MsoNormal">Dear P4 Designers,<u></u><u></u></p>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">I take my job as a professor seriously including, too often, being quite absent minded. Issues #150 (<a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_p4lang_p4-2Dspec_issues_150&d=DwMGaQ&c=uilaK90D4TOVoH58JNXRgQ&r=tGW6TKXajnoXSyy1S1P4DHGPe8sj54GGvw-b21n7aWg&m=T-3jt77Ez2QYlLEFm2KnaKiPEskG8v_DFXQRYFltTpg&s=LLHexmHLQkhFUupvLzvNBdNhn1L_YKRtdD0j5gK_v_w&e=" target="_blank">https://github.com/p4lang/p4-<wbr>spec/issues/150</a>)
 was supposed to be on the agenda for this afternoon's meeting, but I somehow neglected to include it. My apologies.<u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">Since this issue was already discussed at a previous language design working group meeting and we are in the home stretch for finalizing P4_16, I'd like to propose that we attempt to resolve it by email if possible. <u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">The issue concerns global instances -- i.e., can one declare a variable outside of the scope of any P4-programmable component as in the following program?<u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">bit<32> x; <u></u><u></u></p>
</div>
<div><p class="MsoNormal">control c1() { ... x = 0; ... }<u></u><u></u></p>
</div>
<div><p class="MsoNormal">control c2() { ... x = x + 1; }<u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">Arguments for: <u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">- The abstraction of top-level global variables may be more convenient and more familiar to programmers.<u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">- In cases where a top-level global variable is used just once, the compiler can inline those variables anyway.<u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">Arguments against: <u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">- Not all targets will be able to implement programs where a top-level global variable is accessed by multiple P4-programmable components.<u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">- Arguably it's more in the spirit of P4-16 if all global state resides in the architecture.<u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">- Being conservative would suggest removing top-level global instances in the short term, and adding them back if we decide they are useful later. The opposite is harder to do.<u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">Possible decisions:<u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">(1) Stick with the status quo and allow top-level global state.<u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">(2) Forbid top-level global state.<u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">(3) Allow top-level global state only if it can be inlined.<u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">I could personally live with any of these options. However, I have a preference for (2) in the short-term since it seems safest.<u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">Please let me know what you think about this issue, either publicly, or privately if you prefer...<u></u><u></u></p>
</div>
<div><p class="MsoNormal"><u></u> <u></u></p>
</div>
<div><p class="MsoNormal">Thanks,<u></u><u></u></p>
</div>
<div><p class="MsoNormal">-N<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"><u></u> <u></u></p>
</div>
</div>
</span><p class="MsoNormal" style="margin-bottom:12.0pt"><br>
______________________________<wbr>_________________<br>
P4-design mailing list<br>
<a href="mailto:P4-design@lists.p4.org" target="_blank">P4-design@lists.p4.org</a><br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.p4.org_mailman_listinfo_p4-2Ddesign-5Flists.p4.org&d=DwMGaQ&c=uilaK90D4TOVoH58JNXRgQ&r=tGW6TKXajnoXSyy1S1P4DHGPe8sj54GGvw-b21n7aWg&m=T-3jt77Ez2QYlLEFm2KnaKiPEskG8v_DFXQRYFltTpg&s=gURv7kUepQyquVjJkMwijy44GXRq8V9vTzM2ldtQCl4&e=" target="_blank">http://lists.p4.org/mailman/li<wbr>stinfo/p4-design_lists.p4.org</a><u></u><u></u></p>
</blockquote>
</div><p class="MsoNormal"><u></u> <u></u></p>
</div><p class="MsoNormal" style="margin-bottom:12.0pt"><br>
<br>
This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy,
 or forward this email message or any attachments. Delete this email message and any attachments immediately.
<u></u><u></u></p>
</div>
</div>

<br>______________________________<wbr>_________________<br>
P4-design mailing list<br>
<a href="mailto:P4-design@lists.p4.org" target="_blank">P4-design@lists.p4.org</a><br>
<a href="http://lists.p4.org/mailman/listinfo/p4-design_lists.p4.org" rel="noreferrer" target="_blank">http://lists.p4.org/mailman/li<wbr>stinfo/p4-design_lists.p4.org</a><br>
<br>
<br></blockquote></div><br></div>
______________________________<wbr>_________________<br>P4-design mailing list<br><a href="mailto:P4-design@lists.p4.org" target="_blank">P4-design@lists.p4.org</a><br><a href="http://lists.p4.org/mailman/listinfo/p4-design_lists.p4.org" target="_blank">http://lists.p4.org/mailman/<wbr>listinfo/p4-design_lists.p4.<wbr>org</a><br><br></div></blockquote></div><br></div></div></div></div><br>______________________________<wbr>_________________<br>
P4-design mailing list<br>
<a href="mailto:P4-design@lists.p4.org">P4-design@lists.p4.org</a><br>
<a href="http://lists.p4.org/mailman/listinfo/p4-design_lists.p4.org" rel="noreferrer" target="_blank">http://lists.p4.org/mailman/<wbr>listinfo/p4-design_lists.p4.<wbr>org</a><br>
<br>
<br></blockquote></div><br></div>