Si puo' spiegare un po' meglio.
1) c'e' un aspetto "sintattico" del linguaggio di programmazione che, ovviamente, non ha nessun impatto in fase di esecuzione.
che il metodo sia privato/protetto/pubblico/packaged/friend (C++), a livello implementativo non cambia assolutamente nulla. La sua "implementazione" (il codice binario) sara' SEMPRE lo stesso.
Sono regole SINTATTICHE che aiutano il programmatorea fare meno pasticci.
2) c'e' un aspetto "implementativo": ad esempio come vengono implementati i metodi "virtuale" in C++. Di questo si trova sui libri. Tra l'altro, una volta capito come si fa, si puo' fare programmazione OOP ANCHE in "C" (ho messo le virgolette apposta!)
E non in modo "meno efficiente", ma esattamente con la "stessa efficienza" del "C++"
3) tutti i compilatori compilano per una "virtual machine" di riferimento. Anche GNU C++.
Poi, a seconda dei casi, il "pseudo assembler" puo' essere "interpretato" (java, c#), oppure ulteriormente convertito in codice macchina (GNU C/C++/Java/Ada/Go/Fortran/...).
Vedasi l'esistenza dei "just in time compilers" che non fanno altro che convertire il "bytecode" in codice macchina, la dove trovano utile farlo.
4) la virtual machine, a seconda dei casi, puo' essere una macchina a stack oppure a registri.
le macchine a stack funzionano come le calcolatrici RPN, mentre quelle a registri, circa come le moderne CPU (ad esempio, i registri sono tutti uguali).
Esempio: la suite di compilatori GNU e' fatta esattamente in questo modo.
Se si va a vedere il numero di CPU supportate, c'e' ne sono a decine. Questo perche' c'e' solo un moduletto "relativamente" semplice da implementare per ogni nuova CPU. La rimanente parte del compilatore, quella relativa alla sintassi, non viene intaccata.
Risulta anche "facile" aggiungere un nuovo linguaggio. Ed una volta aggiunto, sara' disponibile per TUTTE le CPU automaticamente.
Lo stesso e' stato fatto con Java e C#: ci sono una miriade di linguaggi aggiuntivi che compilano per le rispettive vm. Una volta compilati, sono indistinguibili dal compilato prodotto dall'equivalente in Java o C#
Ci sono corsi specifici all'univ su come si progettano i linguaggi di programmazione ed i compilatori. E ci sono anche ottimi libri di testo.
https://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811/ref=sr_1_1?dchild=1&keywords=compilers&qid=1632702265&sr=8-1
E' un super classico (scritto da un "Grande").
NON PENSARE che sia un libro vecchio perche' del 2006.
Certi principi sono "permanenti". Una volta identificati, rimarranno "per sempre".
Il "teorema di Pitagora" e' stato scoperto nel 570 AVANTI CRISTO.
Ha quasi 2600 anni, e NON E' obsoleto