According to the Racket Docs it is syntactic suger:
Incrementing (adding 1) and decrementing (subtracting 1) are somewhat common in programming. Using names for them is intended to make it easier for someone reading code to see at a glance which of the two operations is intended.
Performance: Using the native '+' is the best way to go performance wise. 'Generic arithmetic operations'(+,-,<,> etc...) are inlined by the JIT compiler racket docs:
Inlined fixnum and flonum arithmetic operations are among the most important advantages of the JIT compiler. For example, when + is applied to two arguments, the generated machine code tests whether the two arguments are fixnums, and if so, it uses the machine’s instruction to add the numbers (and check for overflow).
The performance difference is 'so small it is difficult to detect', from scheme JIT compiler:
The JIT compiler works incrementally as functions are applied, but the JIT compiler makes only limited use of run-time information when compiling procedures, since the code for a given module body or lambda abstraction is compiled only once. The JIT’s granularity of compilation is a single procedure body, not counting the bodies of any lexically nested procedures. The overhead for JIT compilation is normally so small that it is difficult to detect.
Some cons of adding a definiton to the global environment: Memory usage, Namespace clashes, Increase GE maintanance.
Some pros of adding a definiton to the global environment: Readability, easier maintenance, reusable code.