The
setup()is called once, when the sketch starts. It's a good place to do setup tasks like setting pin modes or initializing libraries.
There are copious places where that is affirmed. Enough to justify my claim that it's a contract.
Bear in mind that tutorial is older than this thread and has not been subjected to peer review (until now). It needs to be updated.
There is. It has a high price.
That would be a breaking change. The overhead of checking for initialization would interfere with existing code that requires low(-ish) latency.
Serial.begin
Wire.begin
SPI.begin
Notecard.begin
LiquidCrystal_I2C .begin
WiFi.begin
The MIDI Device has a begin.
et cetera
The spirit of Arduino is to include a begin meant to be called in setup.