As runtime decision can be made compile/static time if we know the process already and with user inputs
No, noi non possiamo prendere decisioni in modo statico. Non possiamo nemmeno decidere qualcosa di così semplice come se il programma si fermasse o meno.
In effetti, IFF potremmo decidere quale funzione avremmo chiamato, quindi potremmo trasformare automaticamente il polimorfismo di runtime in polimorfismo in fase di compilazione. Questo è chiamato de-virtualization e i compilatori C ++ lo fanno già come ottimizzazione, ma non sempre funziona, perché, avete indovinato, equivale a risolvere il problema di interruzione.
Nota: un dynamic compiler può eliminare l'invio dinamico e quindi abilitare l'inlining, ad esempio. Un compilatore de-optimizing dynamic può anche compiere un ulteriore passo avanti ed eseguire Inlineing speculativo : può semplicemente integrare il metodo assumendo che la ricerca porti sempre allo stesso metodo e quando si scopre che questa ipotesi è sbagliata, il compilatore può semplicemente de-inline il metodo (e quindi potenzialmente inline di nuovo il metodo nuovo ). Oppure può costruire una cache di tipi precedentemente visti e i metodi corrispondenti; può quindi integrare i metodi in quella cache, incorporare la cache nel sito di chiamata o entrambi. Le parole chiave da cercare sono Cache in linea monomorfica , Cache in linea duomorfa e Cache in linea polimerica ; la mia descrizione è estremamente semplificata. Questa area generale è denominata Ottimizzazione adattiva .