Beste svaret
Sjekk dette python-meme
Svar
Noen grunner:
- På et bestemt tidspunkt kan ikke menneskets hjerne oppfatte forbedringer i hastighet. Hvis jeg implementerer Python-koden min på nytt i C og den kjører 200 ganger raskere, vil ikke brukeren legge merke til om den opprinnelige koden allerede kjørte på 0,01 sekunder. Pokker, de vil sannsynligvis ikke engang legge merke til om den opprinnelige koden bare kjørte på 0,1 sekunder. Forskjellen mellom 0,1 sekunder og 0,0005 sekunder er faktisk umerkelig for folk flest. Selv for menneskene som faktisk kan skjelne det, fremdeles føles det fullstendig lite bemerkelsesverdig.
- Tregheten avhenger i stor grad av hvordan du bruker den. Det virkelige problemet er at mange mennesker lider av problemet med for tidlig optimalisering. Ja, Python er treg, men sjansen er at koden din ikke er treg på grunn av Python. Den er treg fordi koden din bruker feil datastrukturer og algoritmer for å løse et gitt problem. Å bruke et kompilert språk som C skjuler bare problemet. Ja, det er raskere, men det er bare raskere ved en ineffektiv algoritme. Å bruke de riktige datastrukturene og algoritmene skaleres, ganske mye uansett hvilket språk du implementerer dem på, og uansett hvor mye data du ender opp med å bytte til. raskere språk vil bare skape kortsiktige gevinster. En O (n!) – algoritme er fortsatt en O (n!) – algoritme, selv om du implementerer den i C! Virkelig kunnskapsrike ingeniører vet dette og kan lage applikasjoner som er mer enn raske nok og som skalerer godt, uavhengig av implementeringsspråk, fordi de bruker de riktige strukturene og algoritmene.
- Python har vært (og vil trolig fortsette å være) primært et «lim» -språk, det er veldig bra å koble til programvare som ikke var opprinnelse lly ment å jobbe direkte med hverandre. Det er også bra på å automatisere oppgaver som normalt vil bli gjort for hånd. For disse formålene er det mer enn raskt nok, siden hovedarbeidet uansett skjer andre steder. For «raskere» språk som C er denne typen limarbeid så smertefullt tregt og feilutsatt for kode er det neppe engang verdt innsatsen. Eventuelle gevinster i kjøringshastighet blir mer enn oppveid av hvor mye bortkastet utviklertid brukt på å få den til å fungere. Det er en stor grunn til at det fortsetter å være så populært.
- Noen flaskehalser er rett og slett utenfor direkte kontroll av implementeringsspråket. IO er vanlig. Jeg har en applikasjon akkurat nå der alt i Python er mer enn raskt nok. Det er først når vi treffer nettverket for å spørre databasen at ting blir sakte. Min profilering viser at de til og med de tregeste delene av Python-koden er helt ubetydelige sammenlignet med tiden du venter på nettverket IO. Jeg prøver nå å finne måter å slå databasen mindre (caching på klientsiden, unngå overflødige fornuftskontroller mot dataene osv.). Selv om jeg skrev søknaden i samler, ville dette fortsatt være et problem. Å fikse dette problemet med Python er faktisk raskere og enklere fordi det kommer med (veldig robuste) profileringsbiblioteker i standardbiblioteket. Mange «raske» kompilerte språk kommer tradisjonelt ikke med dette ut av esken.
Moralen i historien er: utviklertid trumfer maskintid, nesten alltid. Når det ikke gjør det hold, langsomhet er vanligvis lokalisert til visse flaskehalser som enkelt kan optimaliseres til et eksternt bibliotek eller tjeneste. Tidene da noe virkelig ikke kan optimaliseres til et eksternt bibliotek eller en tjeneste, er utrolig sjeldne. Som i, nesten ikke-eksisterende.
Et unntak er hvis du fra begynnelsen vet at søknaden din krever så nær sanntidsytelse som mulig, og flertallet av koden vil være beregningssentrert. Et godt eksempel er videospill eller DCC-applikasjoner. Disse er bedre så nær sanntid som mulig, ellers vil du ikke ha en bruker base å snakke om.
Men med mindre dette er tilfelle, foretrekker mange utviklere produktivitetsgevinsten til Python, selv om det bare er for prototyping.