Shouldn't macro use the same principle as functions? That is: If your macro changes the value of variable you passed as argument (say @increment x), thus it works similar to a function accepting pointer, it should be marked with "!" at the end? (@increment! x)
If your macro changes variables that you even didn't pass in as an argument (say @increment() always increments x from outer scope), then the macro should be marked with "!!" at the end? (@increment!!) OR it could be marked with "![variable name]![variable name].... (@increment!x(), @increment!x!y!z() ...) I am not sure whether somebody wants to ever use the second type the macro, but if yes, people should definitely know about that without the need to read inner body of that macro. What do you think? Should we make it a rule similar to functions that change their arguments? (I hope its not already in docs and I just skipped that chapter :D)