Di recente stavo guardando attraverso il codice sorgente CPython e ho notato qualcosa di piuttosto intrigante:
/* Minimal main program -- everything is loaded from the library */
#include "Python.h"
#include "pycore_pylifecycle.h"
#ifdef MS_WINDOWS
int
wmain(int argc, wchar_t **argv)
{
return Py_Main(argc, argv);
}
#else
int
main(int argc, char **argv)
{
return _Py_UnixMain(argc, argv);
}
#endif
La funzione principale chiama semplicemente una funzione diversa come indicato nel commento sopra
Minimal main program
E queste due funzioni che sono state chiamate ( Py_Main
e _Py_UnixMain
) non sembrano eseguire operazioni drasticamente diverse o molto complesse, e alla fine chiamano la stessa funzione ( pymain_main
):
int
Py_Main(int argc, wchar_t **argv)
{
_PyMain pymain = _PyMain_INIT;
pymain.use_bytes_argv = 0;
pymain.argc = argc;
pymain.wchar_argv = argv;
return pymain_main(&pymain);
}
int
_Py_UnixMain(int argc, char **argv)
{
_PyMain pymain = _PyMain_INIT;
pymain.use_bytes_argv = 1;
pymain.argc = argc;
pymain.bytes_argv = argv;
return pymain_main(&pymain);
}
Sembra che queste operazioni possano essere eseguite molto facilmente nelle funzioni main
o wmain
.
La mia domanda è se c'è un chiaro vantaggio di questa scelta dal punto di vista del design e della struttura? Perché gli sviluppatori di CPython, probabilmente, hanno deciso di creare effettivamente una nuova funzione principale invece di utilizzare quella standard? Semplifica la manutenzione o il debug?