Non è del tutto chiaro se stai parlando della semantica o della pragmatica qui. La tua domanda legge di più sulla semantica, ma nei commenti dici che stai chiedendo della pragmatica. Ho intenzione di rispondere su entrambi.
Semantica
- Pro: semplicità. Perché avere due concetti quando lo farai?
- Contro: nessuno.
Pragmatica
- Pro: semplicità. Anche in questo caso.
- Contro: prestazioni.
The Real World
Il modo in cui questo viene usato nel mondo reale è che si hanno linguaggi puramente orientati agli oggetti le cui implementazioni usano le primitive senza mai esporle al programmatore. Quindi, le uniche persone che hanno bisogno di affrontare le complessità di avere due "cose" differenti (oggetti e primitive non-object) sono gli implementatori di compilatori / interpreti. Gli utenti di lingue usano semplicemente gli oggetti.
Quindi, in altre parole, usa la semantica senza primitive, ma implementale con i primitivi. YARV, Rubinius, MRuby, MacRuby, praticamente tutte le implementazioni Lisp e Smalltalk (e derivate come Self e Newspeak), alcune implementazioni ECMAScript e probabilmente molte altre lo fanno.
Le tecniche per fare questo sono state conosciute dal (almeno) anni '80. Come molte altre cose utili, i progettisti della piattaforma Java sembrano averli dimenticati quando hanno progettato la piattaforma Java, e ora stanno combattendo una dura battaglia decennale contro i vincoli di compatibilità all'indietro per rimuovere nuovamente le primitive. (Si dice che siano passati da Java 10, ma poi di nuovo, questa voce è in circolazione da 15 anni.)