Bedste svar
Tjek dette python-meme
Svar
Nogle få grunde:
- På et bestemt tidspunkt kan den menneskelige hjerne ikke opleve nogen forbedringer i hastighed. Hvis jeg genimplementerer min Python-kode i C, og den kører 200 gange hurtigere, vil brugeren ikke engang bemærke, hvis den oprindelige kode allerede kørte på 0,01 sekunder. Heck, de vinder sandsynligvis ikke engang, hvis den originale kode kun kørte på 0,1 sekunder. Forskellen mellem 0,1 sekunder og 0,0005 sekunder er faktisk umærkelig for de fleste mennesker. Selv for de mennesker, der rent faktisk kan skelne det, føles det stadig fuldstændig umærkeligt.
- Dets langsommelighed afhænger meget af, hvordan du bruger det. Det virkelige problem er, at mange mennesker lider af problemet med for tidlig optimering. Ja, Python er langsom, men chancerne er, at din kode faktisk ikke er langsom på grund af Python; den er langsom, fordi din kode bruger de forkerte datastrukturer og algoritmer til at løse et givet problem. Brug af et kompileret sprog som C skjuler kun problemet. Ja det er hurtigere, men det er kun hurtigere ved en ineffektiv algoritme. Brug af de korrekte datastrukturer og algoritmer skaleres, stort set uanset hvilket sprog du implementerer dem på, og uanset hvor mange data du ender med at beskæftige dig med. Ændring til en hurtigere sprog vil kun skabe kortsigtede gevinster. En O (n!) – algoritme er stadig en O (n!) – algoritme, selvom du implementerer den i C! Virkelig kyndige ingeniører ved dette og kan lave applikationer, der er mere end hurtige nok og at skalere godt, uanset implementeringssprog, fordi de bruger de rigtige strukturer og algoritmer.
- Python har primært været (og vil sandsynligvis fortsat være) et “lim” sprog; det er meget godt til at forbinde software, der ikke stammer fra Det er meningen, at vi skal arbejde direkte med hinanden. Det er også godt til at automatisere opgaver, der normalt udføres manuelt. Til disse formål er det mere end hurtigt nok, da hovedarbejdet alligevel sker andre steder. For “hurtigere” sprog som C er denne type limarbejde så smertefuldt langsom, og fejl, der er tilbøjelig til at kode, er det næppe engang værd. Eventuelle gevinster i eksekveringshastighed opvejes mere end af den mængde spildt udviklertid brugt på at få det til at arbejde. Det er en kæmpe grund til, at det fortsat er så populært.
- Nogle flaskehalse er simpelthen uden for direkte kontrol af implementeringssproget. IO er en almindelig. Jeg har at gøre med en applikation lige nu, hvor alt i Python er mere end hurtigt nok. Det er først, når vi rammer netværket for at søge i databasen, at tingene bliver langsomme. Min profilering viser, at de selv de langsomste stykker af Python-koden er helt ubetydelige sammenlignet med den brugte tid på netværket IO. Jeg forsøger nu at finde måder at ramme databasen mindre (caching på klientsiden, undgå overflødige fornuftskontroller af data osv.). Selvom jeg skrev ansøgningen i samler, ville dette stadig være et problem. At løse dette problem med Python er faktisk hurtigere og lettere, fordi det kommer med (meget robuste) profilbiblioteker i standardbiblioteket. Mange “hurtige” kompilerede sprog kommer traditionelt ikke med dette ud af kassen.
Moralen i historien er: udviklertid trumfer maskintid næsten altid. Når det ikke gør det hold, langsomhed er normalt i stand til bestemte flaskehalse, som let kan optimeres til et eksternt bibliotek eller en tjeneste. De tidspunkter, hvor noget virkelig ikke kan optimeres væk i et eksternt bibliotek eller en tjeneste er utroligt sjældent. Som i næsten ikke-eksisterende.
En undtagelse er, hvis du fra starten ved, at din applikation kræver så tæt på realtidsydelse som muligt, og størstedelen af koden vil være beregningscentreret. Et godt eksempel er videospil eller DCC-applikationer. Disse er bedre så tæt på realtid som muligt, ellers har du ikke en bruger base at tale om.
Men medmindre dette er tilfældet, foretrækker mange udviklere Pythons produktivitetsgevinster, selvom det kun er til prototyping.