Programmering

Gå mod Python: Hvordan man vælger

Når det kommer til lethed og bekvemmelighed for udvikleren og fremskyndelse af udviklingshastigheden, stiger to programmeringssprog over pakken - Python og Go. I dag er Python en grundpiller i scripting, devops, machine learning og test, mens Go driver den nye bølge af containerbaseret, cloud-native computing.

Nogle gange er valget mellem Python og Go indlysende: Vælg Python for dets rige økosystem, vælg Gå for dets udførelseshastighed. Men nogle gange er valget ikke så indlysende. I denne artikel gennemgår vi de vigtigste forskelle mellem de to sprog og fremhæver fordele og ulemper for at hjælpe dig med at vælge det rigtige sprog til det aktuelle job.

Gå mod Python: Udviklervenlighed

Python og Go deler ry for at være bekvemme at arbejde med. Begge sprog har en enkel og ligetil syntaks og et lille og let husket funktionssæt.

Både Python og Go har også en kort rediger-kompil-kør-cyklus. Python har ingen kompileringsfase - det fortolkes - så scripts udføres næsten øjeblikkeligt. Go kompileres på forhånd, men kompileringsfasen er langt hurtigere end for sprog som C ++. Go føles mere som et script-sprog at arbejde med end et sprog, der er kompileret på forhånd.

Python bruger dynamiske typefunktioner, hvilket gør det lettere at prototype applikationer hurtigt. Mærkning af ting med typer er valgfri og kan gøres for at håndhæve yderligere programkorrekthed (en god idé med store projekter), men det er aldrig nødvendigt. Større kodebaser kan blive uhåndterlige uden typer.

I Go's tilfælde er skrivning streng, men udledes let i de fleste tilfælde, så det er mindre besværligt. Det betyder også, at større kodebaser er lettere at håndtere ud af kassen, fordi Go-programmører har fulgt i traditionen med at bruge typer. På den anden side mangler Go generiske, så nogle former for kode, der ville blive mere præcist udtrykt på andre sprog - inklusive Python - bliver mere detaljeret og kedelplade-y i Go.

Gå mod Python: Kørselshastighed

Hvis der er et område, hvor Go slår Python helt ned, er det eksekveringshastighed. Go er en størrelsesorden eller hurtigere end Python, selv uden nogen optimeringer fra udviklerens side. Gå kompilerer direkte til indbygget maskinkode, mens Pythons dynamik i runtime er vanskelig at optimere til hastighed.

Ikke desto mindre kan Python være "hurtig nok" til mange almindelige opgaver, så det er værd at sammenligne en Python-implementering til din brugssag. Mange af de mest præstationsintensive job, som Python bruges til, udføres ikke i Python selv, men gennem biblioteker skrevet i C eller C ++. Også PyPy-runtime, en erstatning for den konventionelle CPython-runtime, kan give betydelige hastigheder til langvarige applikationer som webservere, selv hvor Pythons dynamik er i stor brug.

Gå mod Python: Implementering

Go blev fra starten designet til at tillade, at kompilerede apps let kan implementeres som enkeltstående binære filer på tværs af flere platforme. Python var derimod oprindeligt tænkt som et script-sprog, så Python-programmer kræver Python-runtime.

Python mangler en indbygget løsning til implementering af et script som en enkeltstående eksekverbar, men du kan henvende dig til tredjepartsbiblioteker som PyInstaller for det. Containerløsninger som Docker gør det også lidt nemmere at pakke en Python-app med sin kørselstid.

Gå mod Python: Projektledelse

En anden bonus bagt i Go fra starten: moderne softwareprojektstyringsteknikker. Hurtige kommandolinjeaktioner opretter et nyt Go-projektlager og administrerer dets afhængigheder. Det er værd at bemærke, at Go ikke altid har haft god support til afhængigheder og reproducerbare builds, men modulsystemet, der blev introduceret i Go 1.11, giver nu en fælles mekanisme til at arbejde med forskellige versioner af biblioteker.

På nogle måder lider Python af det modsatte problem: En overflod af projektledelses- og versioneringsværktøjer resulterer ofte i forvirring om, hvilke værktøjer og metoder der er bedst til et givet job. På plussiden betyder det også, at du ikke er strikjacket til at gøre tingene på en bestemt måde.

Gå mod Python: Asynkron programmering

Asynkrone operationer - udførelse af en opgave, mens de venter på, at en anden skal udføres - hjælper I / O-bundet kode, ligesom netværkstjenester, med at køre mere effektivt.

Go har understøttet async indfødt fra starten af ​​goroutines, en sprogsyntaksfunktion. Goroutines giver dig mulighed for at køre mange små operationer side om side med en oprindelig kommunikationsprimitiv kanal, for at synkronisere operationer mellem dem. Go leveres også med værktøj til at reducere utilsigtet misbrug af disse funktioner; Du kan stadig skrive kode, der blokerer eller har løbetilstand, men det er let at fange de mest almindelige fejl af den slags.

Python fik for nylig støtte på sprogniveau til asynkron opførsel medasynkroniser / afventer nøgleord. Før det var asynkron programmering mulig i Python, bare ikke ligetil. Det betyder, at biblioteksunderstøttelse af moderne Python async-idiomer ikke er så avanceret som det kunne være, da det er en latecomer til sproget. Men supporten forbedres, efterhånden som flere biblioteker bliver asynk-kompatible, og de ikke-asynkroniserede versioner af Python falder ud af support.

Gå mod Python: Fejlhåndtering og fejlretning

Python og Go har meget forskellige filosofier til fejlhåndtering.

I Python er fejl førsteklasses objekter, og de spredes op i programmets opkaldskæde, når appen kaster en undtagelse. Dette gør fejlhåndtering valgfri, så programmøren skal beslutte, hvilke sager der skal håndteres og håndtere dem manuelt. På samme måde gør Pythons tilgang det også muligt at skrive mere fleksible fejlhåndteringsmekanismer, der ikke forstyrrer hvert opkaldssted.

Med Go returnerer hver funktion værdien for selve funktionen såvel som et muligt fejlobjekt. Go-programmer har typisk eksplicitte kommentarer om mulige fejltilstande på funktionsopkaldssteder, så kode har utvetydig fejlhåndtering. Ulempen ved dette er en detaljeret kode. Go har ogsåfå panik / komme sig nøgleord til håndtering af ekstreme situationer, der berettiger til at dræbe programmet direkte, selvom de selvfølgelig ikke er beregnet til at blive brugt så voldsomt som Python-undtagelser. Go 2.0 kan indeholde nye fejlhåndteringsmekanismer, der reducerer ordligheden, men revisionen af ​​sproget er stadig langt væk.

Gå mod Python: Test

Ikke al moderne softwareudvikling trækker på enheds- og integrationstest, men projekter, der gør, er mere robuste. Go og Python giver begge indfødte mekanismer til enhedstest. For Go er der den indfødtetest pakke. For Python er derunittest ramme.

Go inkluderer testdækningsmålinger som en del aftest; med Python har du brug for en tredjepartspakke,dækning, for at bestemme, hvor grundig din testpakke vil være. På den anden side har Python meget fleksible indbyggede testindstillinger, der supplerer dens dynamik - for eksempel har det påstande om at kontrollere en bred vifte af almindelige forhold, herunder hævede undtagelser. Python bruger også en klasse til at skelne testkode fra applikationskode, hvorimod Go bruger funktion og filnavngivningskonventioner.

Gå mod Python: Økosystemer

I årenes løb har Python og Go samlet imponerende biblioteker med tredjepartssoftware omkring dem, der afspejler deres brugssager og styrker.

Python har længe været go-to-sproget til scripting og automatisering såvel som til opbygning af webservices og oprettelse af brugervenlige grænseflader mellem komplekse systemer. Denne sidste kategori er, hvordan Python er kommet til at dominere inden for datalogi og maskinindlæring: Python gør det let at klæbe sammen de store, komplekse biblioteker og arbejdsgange, der bruges i avanceret dataanalyse og maskinindlæringsmodeller.

Go's succeshistorier drejer sig om dets async-programmeringsfunktioner og system-native hastighed. Webservere, netværksapplikationer, CPU-bundne mikrotjenester og systemværktøjer er alle gode kandidater til Go. Det meste af softwaren, der styrer moderne, containerbaseret applikationsudvikling - inklusive Docker og Kubernetes - er skrevet i Go.

En måde at finde ud af, om du skal vælge Go eller Python, er at se, hvilke eksisterende projekter der er skrevet i dem, der ligner din nuværende indsats. Der er en god chance for, at meget af det, du prøver at bygge, allerede er bygget af en anden, så du kan ikke kun vælge det sprog, men de understøttende biblioteker, der passer.

Endelig er der intet, der siger, at du ikke kan skrive i begge Pythonog Gå. Du kan bruge Go til præstationsfølsomme dele af din applikation og levere Python-indpakninger eller frontends til udviklers bekvemmelighed og komfort.

$config[zx-auto] not found$config[zx-overlay] not found