Possibile motivazione di avere una funzione principale minima come nel codice sorgente CPython?

-2

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?

Link al principale
Link a Py_Main e _Py_UnixMain

    
posta Ayxan 22.11.2018 - 22:29
fonte

1 risposta

4

Python non è solo un'applicazione, può anche essere incorporata come libreria. Un programma può contenere solo un simbolo main , quindi CPython non deve fornirlo se è destinato a essere utilizzabile come libreria.

L'uso di diverse funzioni principali nell'API Python è motivato dai loro diversi tipi di argomenti, cioè wchar vs char . Non sarebbe necessario offrire queste funzioni in quanto i loro contenuti potrebbero essere scritti nel reale main / wmain, ma questo mantiene il file di Python con l'implementazione main () minima, e quindi più mantenibile.

+-------------+        +-----------+
| Application |  --->  |  Library  |
|   main()    |        | Py_Main() |
+-------------+        +-----------+
    
risposta data 23.11.2018 - 00:33
fonte

Leggi altre domande sui tag