Programmering

Gå mot Python: Hvordan velge

Når det gjelder enkelhet og bekvemmelighet for utvikleren og akselererende utviklingshastighet, stiger to programmeringsspråk over pakken - Python og Go. I dag er Python en bærebjelke for skripting, devops, maskinlæring og testing, mens Go driver den nye bølgen av containerbasert, cloud-native databehandling.

Noen ganger er valget mellom Python og Go åpenbart: Velg Python for det rike økosystemet, velg Go for kjøringshastigheten. Men noen ganger er valget ikke så opplagt. I denne artikkelen går vi gjennom de viktigste forskjellene mellom de to språkene, og fremhever fordeler og ulemper for å hjelpe deg med å velge riktig språk for jobben.

Gå mot Python: Utviklervenlighet

Python og Go deler rykte for å være praktiske å jobbe med. Begge språkene har en enkel og grei syntaks og et lite og lett husket funksjonssett.

Både Python og Go har også en kort rediger-kompil-kjøresyklus. Python har ingen kompileringsfase - den tolkes - så manus utføres nesten umiddelbart. Go compiles på forhånd, men kompileringsfasen er langt raskere enn for språk som C ++. Go føles mer som et skriptspråk å jobbe med enn et språk som er samlet på forhånd.

Python bruker funksjoner for dynamisk skriving, noe som gjør det lettere å raskt prototype applikasjoner. Merking av ting med typer er valgfritt, og det kan gjøres for å håndheve ytterligere programkorrekthet (en god idé med store prosjekter), men det er aldri nødvendig. Større kodebaser kan bli uhåndterlige uten typer.

I Gos tilfelle er det strengt å skrive, men lett utledes i de fleste tilfeller, så det er mindre tungvint. Det betyr også at større kodebaser er lettere å administrere utenom boksen, fordi Go-programmerere har fulgt i tradisjonen med å bruke typer. På den annen side mangler Go generiske, så noen typer koder som vil bli uttrykt mer kortfattet på andre språk - inkludert Python - blir mer utdypende og kjele-y i Go.

Gå mot Python: Runtime-hastighet

Hvis det er et område der Go slår Python hendene ned, er det kjøringshastigheten. Go er en størrelsesorden eller raskere enn Python, selv uten noen optimaliseringer fra utviklerens side. Go kompilerer direkte til innfødt maskinkode, mens Pythons dynamikk for kjøretid er vanskelig å optimalisere for hastighet.

Ikke desto mindre kan Python være "rask nok" for mange vanlige oppgaver, så det er verdt å måle en Python-implementering for din brukstilfelle. Mange av de mest ytelsesintensive jobbene som Python brukes til, blir ikke utført i Python selv, men gjennom biblioteker skrevet i C eller C ++. Dessuten kan PyPy-kjøretiden, en erstatning for den vanlige CPython-kjøretiden, gi betydelige hastigheter for langvarige applikasjoner som webservere, selv der Pythons dynamikk er i stor bruk.

Gå mot Python: Distribusjon

Go ble designet fra begynnelsen slik at kompilerte apper lett kan distribueres som frittstående binære filer på flere plattformer. Python, derimot, ble opprinnelig oppfattet som et skriptspråk, så Python-programmer krever Python-kjøretiden.

Python mangler en innfødt løsning for å distribuere et skript som en frittstående kjørbar, men du kan henvende deg til tredjepartsbiblioteker som PyInstaller for det. Også containerløsninger som Docker gjør det litt lettere å pakke en Python-app med kjøretiden.

Gå mot Python: Prosjektledelse

En annen bonus bak Go fra begynnelsen: moderne programvareprosjektledelsesteknikker. Raske kommandolinjehandlinger oppretter et nytt Go-prosjektlager og administrerer dets avhengigheter. Det er verdt å merke seg at Go ikke alltid har hatt god støtte for avhengigheter og reproduserbare builds, men modulsystemet, introdusert i Go 1.11, gir nå en felles mekanisme for å jobbe med forskjellige versjoner av biblioteker.

På noen måter lider Python av det motsatte problemet: En mengde prosjektledelse og versjonsverktøy resulterer ofte i forvirring om hvilke verktøy og metoder som er best for en gitt jobb. På plussiden betyr det også at du ikke er tvunget til å gjøre ting på en bestemt måte.

Gå mot Python: Asynkron programmering

Asynkrone operasjoner - å utføre en oppgave mens de venter på at en annen skal fullføres - hjelper I / O-bundet kode, som nettverkstjenester, til å kjøre mer effektivt.

Go har støttet async innfødt fra begynnelsen ved hjelp av goroutines, en språksyntaksfunksjon. Goroutines lar deg kjøre mange små operasjoner side om side, med en innfødt kommunikasjonsprimitiv, kanaler, for å synkronisere operasjoner mellom dem. Go kommer også med verktøy for å redusere utilsiktet misbruk av disse funksjonene; du kan fremdeles skrive kode som sperrer eller har løpsforhold, men det er lett å fange de vanligste feilene av den typen.

Python fikk nylig støtte på språknivå for asynkron oppførsel medasynkronisere / vente søkeord. Før det var asynkron programmering mulig i Python, bare ikke grei. Det betyr at biblioteksstøtte for moderne Python async-idiomer ikke er så avansert som det kunne være, siden det er en etterkommere for språket. Men støtten forbedres ettersom flere biblioteker blir asynk-kompatible og de ikke-asynkroniserte versjonene av Python faller ut av støtte.

Gå mot Python: Feilhåndtering og feilsøking

Python og Go har dypt forskjellige filosofier for feilhåndtering.

I Python er feil førsteklasses objekter, og de sprer seg opp i programmets samtalekjede når appen kaster et unntak. Dette gjør feilhåndtering valgfri, så programmereren må bestemme hvilke saker som skal behandles og håndtere dem manuelt. På samme måte gjør Pythons tilnærming det også mulig å skrive mer fleksible feilhåndteringsmekanismer som ikke forstyrrer hvert anropsside.

Med Go returnerer hver funksjon verdien for selve funksjonen, samt et mulig feilobjekt. Go-programmer har vanligvis eksplisitte merknader om mulige feilforhold på funksjonssamtaler, så koden har utvetydig feilhåndtering. Ulempen med dette er detaljert kode. Go har ogsåfå panikk / komme seg nøkkelord for å håndtere ekstreme situasjoner som berettiger til å drepe programmet direkte, selv om de selvfølgelig ikke er ment å brukes så voldsomt som Python-unntak. Go 2.0 kan inneholde nye feilhåndteringsmekanismer som reduserer ordlyden, men at revisjon av språket fortsatt er langt unna.

Gå mot Python: Testing

Ikke all moderne programvareutvikling bygger på enhetstester og integrasjonstester, men prosjekter som gjør det er mer robuste. Go og Python gir begge innfødte mekanismer for enhetstesting. For Go er det innfødtetesting pakke. For Python er detunittest rammeverk.

Go inkluderer beregninger for testdekning som en del avtesting; med Python trenger du en tredjepartspakke,dekning, for å bestemme hvor grundig testpakken din blir. På den annen side har Python svært fleksible innebygde testalternativer for å utfylle dynamikken - for eksempel har den påstander om å sjekke et bredt spekter av vanlige forhold, inkludert reiste unntak. Python bruker også en klasse for å skille testkode fra applikasjonskode, mens Go bruker konvensjoner om funksjon og filnavn.

Gå mot Python: Økosystemer

Gjennom årene har Python og Go samlet imponerende biblioteker med tredjeparts programvare rundt dem som gjenspeiler brukssaker og styrker.

Python har lenge vært språket for skripting og automatisering, så vel som for å bygge webtjenester og skape brukervennlige grensesnitt mellom komplekse systemer. Denne siste kategorien er hvordan Python har kommet til å dominere innen datavitenskap og maskinlæring: Python gjør det enkelt å lime sammen de store, komplekse bibliotekene og arbeidsflytene som brukes i avanserte dataanalyser og maskinlæringsmodeller.

Go's suksesshistorier dreier seg om dets asynkroniseringsprogrammeringsfunksjoner og systemets opprinnelige hastighet. Webservere, nettverksapplikasjoner, CPU-bundne mikrotjenester og systemverktøy er alle gode kandidater for Go. Det meste av programvaren som driver moderne, containerbasert applikasjonsutvikling - inkludert Docker og Kubernetes - er skrevet i Go.

En måte å finne ut om du skal velge Go eller Python er å se hvilke eksisterende prosjekter som er skrevet i dem, ligner din nåværende innsats. Det er stor sjanse for at mye av det du prøver å bygge allerede er bygget av noen andre, så du kan ikke bare velge språket, men også de støttende bibliotekene som passer.

Til slutt er det ingenting som sier at du ikke kan skrive i begge Pythonog Gå. Du kan bruke Go for ytelsesfølsomme deler av applikasjonen din, og tilby Python-innpakninger eller frontend for utviklerkomfort og komfort.

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