Forbidden but allowed variable names in codebox
Say I make an codebox object and put in it "accum = 5;"
I will get an error that "accum" is a reserved word and the gen patch will not compile. That seems reasonable.
However, say I didn’t know that "accum" was a reserved word and made a codebox object containing "History accum(5);"
That will destroy the behavior of the gen patch, but there are no warnings that anything is incorrect. I spent an hour troubleshooting a patch with bizarre behavior but no compile errors, only to find that changing "accum" to "accumulator" fixed the behavior issues.
I had the same thing happen in a patch where I was using alphabet letters for a sequence of variable names (A, B, C…). "E" was breaking the patch due to the constant e, but I didn’t get any errors or warnings.
Can someone add warnings or errors to the gen patcher compiler for reserved keywords accidentally used as History variables? Also, is there a list of all the reserved keywords in one place, or should I make my own based on the different sections of the gen~ help file?
They way to think about this is that every constant or operator is already using that name, so pi, e, accum, gate, etc. already exist before your code is added to the mix. There is no definitive list of that has all of these names in a single place right now. If you look at the list of operators in the common gen ops and gen~ ops pages in the Max documentation, that will tell you all of the reserved words.
Your point about the error is noted. What you describe is definitely frustrating. We are working on making things more consistent in terms of error reporting and are aware of this particular issue. Definitely keep sending feedback about this stuff.
Thank you for responding. I understand the nature of reserved keywords, but just wanted to show a perspective from someone starting with gen~. I am used to reserved keywords from other languages, but "accum" and "E" have not been an issue before. I happened to be converting some mxj~ code into gen~ and was copying the variable names. There were no gen compile errors, so I assumed the output was not working because I had a math error somewhere.
I should also clarify what I meant by "destroy the behavior."
If I start with this codebox code…
out1 = in2;
out2 = in1;
…then add a single new line to the top like this…
out1 = in2;
out2 = in1;
…the outputs swap!
Even knowing that accum is a keyword, I would not expect that change in behavior since accum is not actually used anywhere in the code. Here is an example patch for reference:
----------begin_max5_patcher---------- 1171.3oc4YlziaaCEG+rBP9NHvSs.tSDor7RGzC8RaOzuASJFPKwwlIRjBRz yRBZ9rWtnERYIYEGamkdXrF+31e9683ijxe70uxCrg+LoD3+q924648QoEOs MkEuZCdfL7ywo3RcEAw7rLBS.lUUnf7rPWveRXexeCYG9QJuvubGeeZhe4S3 beJC5iYIxmnllkRYjX9dltsnZqzDcWw27teAF1T2G3LQI8CDUYPzMA01Y6yn rThPKLXs0brHdGks89BRrvL2PqVIakOBFpd.iBTOBmeSf++X0W78h5NKvdnY 3L8PC98BJNEnK4ee8qTOkOlMYxwHOImXGBtTNNIiTV5GbCJBzGJfmOTDBmql 7QZRrZsFKACChltxXS7RNwzO.PaStxPZY+PJ3LFu.W7sMj1msgT7o9vv5Fi4 EjR4BUrfxY1ysH87IDBUOBp9vUmGEdnwfW0.DrTyvEGidM8UFOg3X3.bVR2x jbalO3AY7fXb5VWjrQ5kz2DbI38JvYCbv4nez.mbzjZtOts3nwol0cqQeAgo iumfU+a1QXRvNGWHwkfTbOgg2jRb1t3.vavsj6avrsW4TlR+WugrKON50aWB QKuXr2d.BCO8DrUA1WFvNbzazYeul+GFGdNOfGL56g.pgHzV4Qm6iPny2lKU Dp5Hvgqlbb1H6kLEV4HIRQEcpwirIzTxijhRYFHaGiG.mmaY2ytQJp9NttuV Lq0FkYrEzZqf7HstKlWYU4wpGDqyEq4xRMjVDnWFNOxlORm61XdpYHtSlPb8 LqOfcpYJO98jDG0.34DFkYmy0s7DxC38oh6GvW6VgGvwjgad+NAOv1BZBmoD haaU1qGR4AQLKlhblS5pvv4807R4zYe4Fbgh1U4hPMkJ37T2xZ8xxELXFMCK HBpQxnf19klkWPMWQr0nIc2tx3BdZpauYJ5w9JJQFIDSdhlH1UcnFqhjMflW 6P.s3JgtkTJ5XTf2V10DUXlX.4EZU+eBvdF1dEamnX6zEtELZZC2TGxkm9Hm h56PVikCY3LsClKAYVe.MGze4A4RF4F0ilS0qMuZ8J0SFZwxCEqp5.nI5zPC 5HnwrANDUsCTPyiwXiSmd3cHmYeOxijmUWbb08A.u4M+EsTvKdwGGGuO6mB9 4aeawaYp+jCCz+2TuRlaq9JR+U3smeWwXwuTlObHeD7z7QASyGM2bYqoD7BG 2AcTmy0lnClP.cYHZXPzOzHUkjcvnz4WljrQWsbrVaxqdqrCsYkVipJL.MK4 6KhqcfUoX86nW4VsBJq4rO20PvtUbGMIoyoLLaHWp1g2bvpoGBbRRGNEou3a NoilJ06YN9UV5vOGoe9ntU7eBQd1VY+D+x8wX48UFXoPy5ppCYbS1yDqr.f5 LY.5ei+CfyPY9Rs.NkKQR9PBNt2qK19yD74dsvvUyM23o9yA+gQ5HaS8byaT MM559qmLG51c86SZkVO96d708h2oqqfonqnqttPNKbGPVq+pHqiRqUWcYsbJ xpCRuBxJbpx55RqESQVKu5xJZJxJ7KRVUYx57ZmzJp6qap6qZ5fWyjtWke7e .l57nDC -----------end_max5_patcher-----------