Per quali tipi di applicazioni Python è una cattiva scelta? [chiuso]


21

Ho appena iniziato a studiare Python e mi piacerebbe avere un po 'più di contesto sulla lingua.

Mi rendo conto che, in molti casi, Python è un linguaggio lento rispetto al C o al C ++. Pertanto, Python non è probabilmente la scelta migliore per le applicazioni che devono essere eseguite il più rapidamente possibile.

Al di fuori di questo, sembra che Python sia un grande linguaggio di uso generale che è facile da leggere e scrivere. Le librerie disponibili gli offrono un'enorme quantità di funzionalità. Al di fuori delle applicazioni critiche per le prestazioni, dove è una cattiva scelta usare Python (e perché)?


8
Non esiste un linguaggio di grande utilità generale. Ogni cinque anni circa, uno nuovo sostituisce quello vecchio che sopravvive solo nei mercati di nicchia. Lisp, Fortran, Pascal, Basic, Ada, Perl ...
mouviciel

3
@mouviciel: Pascal una lingua di nicchia? Ok, il suo nome è stato cambiato in Delphi per corrispondere all'IDE Borland / CodeGear / Embarcadero, ma Delphi è ancora (basato su) Pascal e sebbene abbia perso markethare, non lo definirei esattamente una lingua di nicchia. E nemmeno di base per quella materia. Visual Basic è ancora Basic. Sia Delphi che Visual Basic sono utilizzati in molte aziende ...
Marjan Venema,

7
"Python è un linguaggio lento rispetto a C o C ++". È necessario eseguire il backup con il benchmark specifico utilizzato. In alcuni casi (programmi associati I / O che effettuano molte chiamate di sistema) Python è veloce come C perché è solo un wrapper per la libreria C.
S. Lott,

@ S.Lott True, e PyPy a volte può competere con la JVM o anche con C / C ++
yati sagade,

Pascal era la lingua di insegnamento preferita quando ero all'università. Poi sono passati alcuni decenni e ora sembra alla sua Java. Codifico diverse lingue in modo professionale (una mezza dozzina o giù di lì), ma ancora codice Delphi per divertimento.
Mawg dice di ripristinare Monica il

Risposte:


22

Software destinato a target integrati con risorse limitate. La maggior parte dei processori su questo pianeta non può eseguire Python a causa di risorse insufficienti, o nessuno ha portato una versione per quell'architettura. La maggior parte dei processori, anche adesso, ha meno di un megabyte di memoria.


... Questo fino a quando qualcuno non crea una porta Python di Arduino. Oh aspetta!
Spoike,

5
@Spoike quel link serve per eseguire effettivamente Python sul computer e comunicare solo in serie con Arduino. Arduino non esegue il codice Python
basarat il

1
@BasaratAli: Disclaimer - Ho scritto il mio commento per scherzo. ;-)
Spoike il

14

I due posti che mi vengono in mente sono cose che richiedono molta concorrenza, per le quali vorrei usare Erlang. O calcolo numerico pesante, che probabilmente proverei ad usare Fortran.


1
Fortran è ancora in vantaggio rispetto al C / C ++ nel calcolo numerico? ...
Sardathrion - Reinstalla Monica il

1
Sai che non lo so. Non è un settore in cui ho molta esperienza. Ma so che la gente del fortran ha trascorso più di 30 anni a far funzionare i suoi strumenti molto velocemente.
Zaccaria K,

@Sardathrion - È difficile da dire. Solo naturale, capisci. Ma, qualche mese fa, Lionel, famoso per la Intel Fortran, ha dichiarato che la sua linea fortran supera ogni altro prodotto della sua linea di sviluppo (che non è così stretta).
Rook,

@Idigas: In effetti, so che Fortran è ampiamente utilizzato, ma ciò potrebbe essere dovuto al codice legacy e non ai vincoli di ottimizzazione. Forse dovrei
porlo

Ricorda anche che molte persone che fanno calcoli numerici conoscono davvero bene Fortran ed è il loro strumento preferito. Quindi, quando dovranno svolgere quel tipo di compito, raggiungeranno Fortran.
Zaccaria K

8

Poiché Python è un linguaggio tipizzato in modo dinamico, senza controllo in fase di compilazione, sarà difficile refactoring di un grande progetto Python che non ha test unitari approfonditi.

Quindi, se hai un grande progetto che deve essere mantenuto e modificato per molto tempo e il tuo team non è impegnato nella creazione di test automatizzati per tutto, allora potresti fare meglio per usare Java o C #.


17
Rifattorizzare qualsiasi progetto di grandi dimensioni senza test unitari è molto difficile.
Sardathrion - Ripristina Monica il

9
Vero, ma molto più difficile senza la sicurezza del tipo.
Eric Wilson,

3
@Eric Wilson - Anche in questo caso, una digitazione forte può darti un falso senso di sicurezza ... Compila,
Mark Booth,

2
Questo potrebbe non essere al 100% sull'argomento della domanda, ma comunque un punto valido. Il supporto degli strumenti, in particolare il refactoring per i linguaggi tipizzati dinamicamente, è carente rispetto a linguaggi come Java o C #. Solo rinominare le cose può essere un esercizio esaustivo in grandi progetti Python.
OliverS,

Python richiede un runtime o una VM separati o può generare un singolo eseguibile autonomo?
Jim In Texas,

2

Se il focus principale è lo sviluppo della GUI di Windows, allora consiglierei contro CPython poiché mancano buoni progettisti di moduli (rispetto all'utilizzo di .Net).

Tuttavia, IronPython funziona su .Net e ci sono due IDE con i progettisti di moduli tra cui scegliere: Visual Studio e SharpDevelop. In effetti, Python Tools per Visual Studio può essere utilizzato per CPython e IronPython, il che è abbastanza pulito anche se non l'ho ancora provato ...


2

Questo dipende davvero da cosa intendi per "scelta sbagliata".

Se intendi applicazioni in cui l'utilizzo di Python è molto difficile, ce ne sono relativamente poche: la principale che viene in mente e che non è stata ancora menzionata è il codice che richiede alti livelli di correttezza in cui le lingue con sistemi di tipi sofisticati (Haskell, linguaggi tipicamente dipendenti ) sono opzioni migliori.

Se intendi applicazioni in cui Python non è ottimale (ovvero, ci sono scelte migliori) allora ce ne sono altre ma sono anche più soggettive. Ad esempio, nella mia esperienza dichiaratamente limitata, lavorare su compilatori e interpreti è molto più semplice con tipi di dati algebrici, pattern-matching e caratteristiche più funzionali rispetto a Python. Tuttavia, l'elenco esaustivo di applicazioni come questa è impossibile in quanto variano da persona a persona.


2

È ideale per scrivere rapidamente qualcosa grazie alla sua capacità espressiva e all'ampia varietà di librerie di supporto.

Il controllo dinamico dei tipi e la mancanza di dichiarazioni variabili esplicite lo rendono una scelta inadeguata per grandi progetti che coinvolgono centinaia di migliaia o persino milioni di righe di codice. Lo stesso vale per i sistemi mission critical o di sicurezza. In un sistema avionico, ad esempio, sarebbe del tutto inaccettabile che un sistema fallisse a causa di un errore che avrebbe potuto essere rilevato al momento della compilazione.


0

Bene, proprio come te, sto anche iniziando con Python. Ma per me nel contesto dell'apprendimento automatico e della scienza dei dati.

Ho anche acquisito tutte le nuove conoscenze in Java 8 e nelle sue nuove librerie orientate al flusso.

Mi è davvero piaciuta la sensazione fluida delle nuove librerie di stream Java 8 e quanto mi sentissi vicino con le librerie di scintille di Apache. Quando sono entrato in Python, mi aspettavo lo stesso e molto altro.

Ho visto di più. Ma molto meno. Scarsa documentazione, sebbene ce ne fosse in abbondanza; nessuna fluidità, e di fatto mi è stato lasciato indovinare se un metodo stava regnando su un nuovo oggetto o operasse su questo; niente vicino a una mappa / riduzione ecc. Sono stato sorpreso di rimanere deluso.

Dall'inizio, tuttavia, non avevo grandi aspettative su quanto sarebbe stato facile imparare la lingua. Mi è sembrato giusto: incoerente, non intuitivo, difficile da imparare. Ma questa è stata solo la mia esperienza di essere abbastanza bravo in tutto ciò che piace a Java.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.