Julia vs. Python: Vilket är bäst för datavetenskap?

Bland de många användningsfall som Python täcker har dataanalys blivit kanske den största och mest betydelsefulla. Pythons ekosystem är laddat med bibliotek, verktyg och applikationer som gör arbetet med vetenskaplig databehandling och dataanalys snabbt och bekvämt.

Men för utvecklarna bakom Julia språket - med särskild inriktning på ”vetenskapliga beräkningar, maskininlärning, data mining, storskaliga linjär algebra, distribueras och parallella beräkningar” -Python är inte snabb eller bekvämt nog . Julia syftar till att ge forskare och dataanalytiker inte bara snabb och bekväm utveckling utan också flammande körningshastighet. 

Vad är Julia-språket?

Julia skapades 2009 av ett team för fyra personer och presenterades för allmänheten 2012 och är tänkt att ta itu med bristerna i Python och andra språk och applikationer som används för vetenskaplig databehandling och databehandling. ”Vi är giriga”, skrev de. De ville ha mer: 

Vi vill ha ett språk som är öppen källkod, med en liberal licens. Vi vill ha hastigheten på C med dynamiken i Ruby. Vi vill ha ett språk som är homoikoniskt, med sanna makron som Lisp, men med en uppenbar, välbekant matematisk notation som Matlab. Vi vill ha något så användbart för allmän programmering som Python, lika lätt för statistik som R, lika naturligt för strängbearbetning som Perl, lika kraftfullt för linjär algebra som Matlab, lika bra på att limma program tillsammans som skalet. Något som är smutsigt enkelt att lära sig, men ändå håller de allvarligaste hackarna nöjda. Vi vill ha det interaktivt och vi vill att det ska sammanställas.

(Nämnde vi att det borde vara lika snabbt som C?)

Här är några av de sätt som Julia genomför dessa ambitioner:

  • Julia är sammanställd, inte tolkad.  För snabbare runtime-prestanda är Julia just-in-time (JIT) sammanställd med hjälp av LLVM-kompilatorramverket. När det är som bäst kan Julia närma sig eller matcha hastigheten på C.
  • Julia är interaktiv. Julia inkluderar en REPL (read-eval-print loop) eller interaktiv kommandorad, liknande vad Python erbjuder. Snabba engångsskript och kommandon kan stansas direkt.
  • Julia har en rak syntax. Julias syntax liknar Pythons - kortfattad, men också uttrycksfull och kraftfull.
  • Julia kombinerar fördelarna med dynamisk typning och statisk typning. Du kan ange typer för variabler, till exempel ”osignerat 32-bitars heltal.” Men du kan också skapa hierarkier av typer för att tillåta allmänna fall för hantering av variabler av specifika typer - till exempel för att skriva en funktion som accepterar heltal utan att specificera längden eller signeringen av heltalet. Du kan till och med göra utan att skriva helt om det inte behövs i ett visst sammanhang.
  • Julia kan ringa Python, C och Fortran bibliotek. Julia kan gränssnitt direkt med externa bibliotek skrivna i C och Fortran. Det är också möjligt att gränssnitt med Python-kod via PyCall-biblioteket och till och med dela data mellan Python och Julia.
  • Julia stöder metaprogrammering. Julia-program kan generera andra Julia-program och till och med ändra sin egen kod på ett sätt som påminner om språk som Lisp.
  • Julia har en komplett felsökare.  Julia 1.1 introducerade en felsökningssvit, som kör kod i en lokal REPL och låter dig gå igenom resultaten, inspektera variabler och lägga till brytpunkter i koden. Du kan till och med utföra finkorniga uppgifter som att gå igenom en funktion som genereras av kod.

Relaterad video: Hur Python gör programmeringen enklare

Perfekt för IT, förenklar Python många typer av arbete, från systemautomation till arbete i banbrytande fält som maskininlärning.

Julia vs. Python: Julias språkfördelar

Julia designades från början för vetenskaplig och numerisk beräkning. Det är därför ingen överraskning att Julia har många funktioner som är fördelaktiga för sådana användningsfall:

  • Julia är snabb. Julias JIT-sammanställning och typdeklarationer betyder att den rutinmässigt kan slå "ren", ooptimerad Python i storleksordning. Python kan göras snabbare med hjälp av externa bibliotek, tredjeparts JIT-kompilatorer (PyPy) och optimeringar med verktyg som Cython, men Julia är utformad för att vara snabbare direkt utanför porten.
  • Julia har en mattevänlig syntax. En stor målgrupp för Julia är användare av vetenskapliga datorspråk och miljöer som Matlab, R, Mathematica och Octave. Julias syntax för matematiska operationer ser mer ut som hur matematiska formler skrivs utanför datavärlden, vilket gör det lättare för icke-programmerare att hämta.
  • Julia har automatisk minneshantering. Precis som Python, belastar inte Julia användaren med detaljerna för att fördela och frigöra minne, och det ger en viss mått på manuell kontroll över skräpsamling. Tanken är att om du byter till Julia förlorar du inte en av Pythons vanliga bekvämligheter.
  • Julia erbjuder överlägsen parallellitet. Matematik och vetenskaplig databehandling trivs när du kan använda alla tillgängliga resurser på en viss maskin, särskilt flera kärnor. Både Python och Julia kan köra operationer parallellt. Men Pythons metoder för att parallellisera operationer kräver ofta att data serieras och deserialiseras mellan trådar eller noder, medan Julias parallellisering är mer förfinad. Vidare är Julias parallelliseringssyntax mindre topptung än Pythons, vilket sänker tröskeln till dess användning.
  • Julia utvecklar egna infödda maskininlärningsbibliotek. Flux är ett maskininlärningsbibliotek för Julia som har många befintliga modellmönster för vanliga användningsfall. Eftersom den är skriven helt i Julia kan den ändras efter behov av användaren och den använder Julias ursprungliga just-in-time-sammanställning för att optimera projekt inifrån och ut. 

Julia vs. Python: Python-fördelar

Även om Julia är specialbyggd för datavetenskap, medan Python mer eller mindre har utvecklats till rollen, erbjuder Python några övertygande fördelar för datavetaren. Några av anledningarna till att "Python för allmänt ändamål" kan vara det bättre valet för datavetenskapligt arbete:

  • Python använder nollbaserad matrisindexering. På de flesta språk, inklusive Python och C, nås det första elementet i en matris med noll - t.ex. string[0]i Python för det första tecknet i en sträng. Julia använder 1 för det första elementet i en matris. Detta är inte ett godtyckligt beslut; många andra matematik- och naturvetenskapliga applikationer, som Mathematica, använder 1-indexering, och Julia är avsedd att tilltala publiken. Det är möjligt att stödja nollindexering i Julia med en experimentell funktion, men 1-indexering som standard kan stå i vägen för antagande av en mer allmän publik med inbyggda programmeringsvanor.
  • Python har mindre startkostnader.  Python-program kan vara långsammare än Julia-program, men själva Python-körtiden är lättare och det tar i allmänhet mindre tid för Python-program att starta och leverera de första resultaten. Även om JIT-kompilering påskyndar exekveringstiden för Julia-program kostar det långsammare start. Mycket arbete har gjorts för att Julia ska börja snabbare, men Python har fortfarande kanten här.
  • Python är mogen. Juliaspråket är ungt. Julia har utvecklats först sedan 2009 och har genomgått en hel del funktionskärnor under vägen. Däremot har Python funnits i nästan 30 år.
  • Python har mycket fler tredjepartspaket. Bredden och användbarheten av Pythons kultur av tredjepartspaket är fortfarande en av språkets största attraktioner. Återigen betyder Julias relativa nyhet att programvarukulturen runt den fortfarande är liten. En del av detta kompenseras av förmågan att använda befintliga C- och Python-bibliotek, men Julia behöver egna bibliotek för att trivas. Bibliotek som Flux och Knet gör Julia användbart för maskininlärning och djupinlärning, men de allra flesta av det arbetet görs fortfarande med TensorFlow eller PyTorch.
  • Python har miljontals användare. Ett språk är inget utan ett stort, hängivet och aktivt samhälle runt det. Samhället runt Julia är entusiastiskt och växer, men det är fortfarande bara en bråkdel av Pythonsamhällets storlek. Pythons enorma community är en stor fördel. 
  • Python blir snabbare. Bortsett från att få förbättringar av Python-tolk (inklusive förbättringar av flerkärnig och parallell bearbetning) har Python blivit lättare att påskynda. Mypyc-projektet översätter typkommenterad Python till inbyggd C, mycket mindre klumpig än Cython. Det ger vanligtvis fyra gånger prestandaförbättringar och ofta mycket mer för rena matematiska operationer.