Two more differences I can think of: Contracts are only left out when you compile without release, thus using 'in-out-body' can be a way to compile in contracts without debug code. Not saying anything for or against this, but it's a possibility. Contracts are also inherited although iirc this behavior isn't implemented.