<div dir="ltr">Dear P4 Designers,<div><br></div><div>I take my job as a professor seriously including, too often, being quite absent minded. Issues #150 (<a href="https://github.com/p4lang/p4-spec/issues/150">https://github.com/p4lang/p4-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.</div><div><br></div><div>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. <br></div><div><br></div><div>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?</div><div><br></div><div>bit<32> x; </div><div>control c1() { ... x = 0; ... }</div><div>control c2() { ... x = x + 1; }</div><div><br></div><div>Arguments for: </div><div><br></div><div>- The abstraction of top-level global variables may be more convenient and more familiar to programmers.</div><div><br></div><div>- In cases where a top-level global variable is used just once, the compiler can inline those variables anyway.</div><div><br></div><div>Arguments against: </div><div><br></div><div>- Not all targets will be able to implement programs where a top-level global variable is accessed by multiple P4-programmable components.</div><div><br></div><div>- Arguably it's more in the spirit of P4-16 if all global state resides in the architecture.</div><div><br></div><div>- 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.</div><div><br></div><div>Possible decisions:</div><div><br></div><div>(1) Stick with the status quo and allow top-level global state.</div><div><br></div><div>(2) Forbid top-level global state.</div><div><br></div><div>(3) Allow top-level global state only if it can be inlined.</div><div><br></div><div>I could personally live with any of these options. However, I have a preference for (2) in the short-term since it seems safest.</div><div><br></div><div>Please let me know what you think about this issue, either publicly, or privately if you prefer...</div><div><br></div><div>Thanks,</div><div>-N<br></div><div><br></div><div><br></div><div><br></div></div>