Julija (programski jezik)
Programer(i) | Džef Bezanson, Stefan Karpinski, Viral B. Shah, Alan Eldman |
---|---|
Prvo izdanje | 2012. godina |
Stabilno izdanje | 0.4.3 / 0.3.12
/ 12. januar 2016. godine |
Preliminarno izdanje | 0.5.0-dev / dnevno ažuriran
|
Napisan u | MATLAB, Lisp, C, Fortran, Matematika[1] (striktno svoj Volfram program), Pajton, Perl, R, Rubi, Lua[2] |
Operativni sistem | Linuks, OS X, FreeBSD, Windows |
Standard(i) | .jl |
Licenca | EmAjTi licenca,[3] GPL v2[4][5] Opcija za pravljenje fajlova pomoću GPL biblioteka.[6] |
Veb-sajt | julialang |
Julija je dinamički i programski jezik visokog nivoa dizajniran da odgovori na zahteve razvijenih numeričkih i naučnih izračunavanja, ali je takođe efektivan za efektivno opšte programiranje,[7][8][9][10] veb upotrebu[11][12], može se koristiti i za specifikaciju programskog jezika.[13] Karakteristike Julija programskog jezika obuhvatuju tipski sistem u paketu sa parametarskim tipskim sistemom u obliku celokupnog dinamičnog programskog jezika, kao i u obliku posebnih paketa u obliku sopstvenog jezgra programske paradigme. Omogućava istovremeno, paralelno i distribuirano izračunavanje, i direktno pozivanje biblioteka programskih jezika C i Fortran, bez posebnog koda. Julija je sakupljač smeća,[14] program koji koristi željenu procenu i u sebi sadrži efikasne biblioteke za izračunavanja, linearnu algebru, nasumičnu generaciju brojeva, brze Furijerove transformacije i upoređivanje regularnih izraza.
Karakteristike programskog jezika
[uredi | uredi izvor]Kako nam oficijelni sajt kaže, glavne karakteristike ovog programskog jezika su:
- Višestruko otpremanje: pružanje mogućnosti da se definiše ponašanje funkcije u više različitih tipova argumenata
- Dinamični tip sistema: tipovi za dokumentaciju, optimizaciju, i obaveštenje
- Dobre performanse, sličan statičkim tipskim programima kao što je C.
- Ugrađen menadžer paketa
- Lisp kao makroi i drugi objekti metaprogramiranja
- Pozivanje Pajtonovih funkcija: koristiti PajKol (PyCall) paket[a]
- Direktno pozivanje C funkcija: nije potreban specijalni API
- Veoma dobar šel uz pomoć kojeg se upravlja drugim procesima
- Dizajniran je za paralelno i raspodeljeno izračunavanje
- Korutine: jednostavan "zeleni" navoj
- Korisnički definisani tipovi predstavljaju ugrađene funkcije i veoma su kompaktni i brzi
- Automatsko proračunavanje efikasnosti, specijalizovan je kod za različite tipske argumente
- Elegantne i proširive konverzije i promocije za brojeve i ostale tipove
- Efikasna podrška za Junikod, koji poseduje UTF-8.
Višestruko otpremanje (poznato još i kao "višestruke metode" u Lisp-u) predstavlja uprošćavanje jednog otpremanja - najčešće se koristi polimorfni mehanizam u objektno orijentisanim (OO) programima koji koriste nasleđivanje. U Juliji, svi konkretni tipovi su podtipovi apstraktnih tipova, direktno ili indirektno poditpovi "Eni (any)" tipova, koji su na vrhu hijerarhije. Konkretni tipovi ne mogu biti podtipovi, ali se njihova kompozicija koristi preko nasleđivanja, koje koriste objektno orijentisani programi (takođe videti Nasleđivanje protiv podtipova).
Julija crpi značajnu inspiraciju iz različitih dijalekata programskog jezika Lisp, uključujući Šem i Common Lisp, i ima dosta zajedičkih odlika sa Dilanom (kao što je Algol koji ima slobodnu formu infiks sintakse dok Lisp ima prefiks sintaksu, dok je u Luliji "sve"[18] izraz) - takođe predstavlja dinamički programski jezik baziran na višesložnom uprošćavanju - i Fotres, još jedan numerički programski jezik sa osobinom višestrukog uprošćavanja i sofisticiranim parametarskim tipskim sistemom. Dok KLOS daje višestruko uprošćavanje od Common Lisp-a, uz dodatak: samo korisnički definisane funkcije eksplicitno deklarisane da budu generičke mogu biti proširene sa nekoliko novih multimetoda.
Julija makori - poznati kao higijenski makroi, koji se koriste za implementaciju metaprogramiranja, slično makroima korišćenim u Lisp-u - veoma su moćni i različiti su od nehigijenskih makroa korišćenih u nekim drugim programskim jezikama kao što je npr. C.
U Juliji, Dilanu i Fortresu, sa druge strane glediša, ova moć proširivanja je standardna, i sistemi ugrađenih funkcija su generički i proširivi. U Dilanu, višestruko uprošćavanje je osnovna funkcija kao što je slučaj u Juliji: sve korisnički definisane funkcije pa čak i osnovne ugrađene operacije, kao što je +
, su generičke. Dilanov tipski sistem, međutim, ne podržava baš sve parametarske tipove, koji su više tipični za ML programske jezike. Standardno, KLOS ne podržava uprošćavanja Lisp-ovih parametarskih tipova; kao što su - uprošćavanje proširenih semantika koje se jedino mogu dodati kao ekstenzija kroz KLOS-ov protokol Metaobjekta. Prema konvergentnom dizajnu, Fortres takođe poseduje višestruko uprošćavanje parametarskih tipova; suprotno od Julije, međutim, Fotres nije dinamički nego statički tip, sa odvojenom kompilacijom i izvršavanjem faza. Karakteristike programskih jezika su predstavljene u sledećoj tabeli:
Program | Tip sistema | Generičke funkcije | Parametarski tipovi |
---|---|---|---|
Julija | dinamički | standardne | da |
Common Lisp | dinamički | upravljačke | da (ali ne uprošćavanje) |
Dilan | dinamički | standardne | parcijalni (bez uprošćavanja) |
Fortres | statički | standardne | da |
Interakcija
[uredi | uredi izvor]Julijina zvanična distribucija obuhvata interaktivni šel, koji se naziva REPL, koji se može koristiti za eksperimentisanje i brzo testiranje koda.[19] Sledeći framgent predstavlja jednostavan primer REPL-a:[20]
julia> p(x) = 2x^2 + 1; f(x, y) = 1 + 2p(x)y
julia> println("Hello world!", " I'm on cloud ", f(0, 4), " as Julia supports recognizable syntax!")
Hello world! I'm on cloud 9 as Julia supports recognizable syntax!
REPL omogućava pristup sistemu šela i ima pomoćni režim, pritiskanjem ;
ili ?
posle linije (prethodeći svakoj komandi). REPL takođe čuva istoriju komandi, čak i između sesija. Za dodatne primere, videti Julijinu dokumentaciju[21] koja daje kodove koji se mogu testirati unutar Julijine interaktivne sekcije ili snimanjem fajla kao .jl
ekstenzija i pokrenuti sa komandne linije kucanjem (na primer):[18]
$ julia <filename>
Julija je takođe podržana od strane Jupitera, onlajn interaktivnog "nutbuks (notebooks)" okruženja (projektovani Jupiter je višejezična ekstenzija, koja je "dobijena" iz IPajtonove (IPython) komandne linije; koja sadrži Juliju).
Korišćenje Julije na drugim jezicima
[uredi | uredi izvor]Julijin ccall
(C-poziv) ključne reči se koristi za pozivanje C-ove (ili Fortranove) zajedničke biblioteke funkcija.
Julija ima Junikod podršku, uz pomoć UTF-8 koji se koristi za izvorni kod koji uglavnom dozvoljava uobičajne matematičke simoble za različite operacije, kao što je npr. ∈ za in
operator. Uz pomoć stringova UTF-8, UTF-16 i UTF-32 (i ASCII) kodiranje je potpuno podržano.
Julija ima pakete koji podržavaju jezike za označavanje kao što su, HTML (takođe za HTTP), XML, JSON, BSON (i MongoDB) itd.
Implementacija
[uredi | uredi izvor]Julijino jezgro je implementirano u C i C++ (C++ zavisi od VMNR), sopstvenom parseru u Šem programskom jeziku ("femtolisp"), dok se VMNR okvirni kompajler koristi u "tačno na vreme" (TNV) generacijama 64-bitnih ili 32-bitnih mašinskih kodova (npr. ne i za virtuelnu mašinu[22]) u zavisnosti od platforme koju Julija koristi. Uz nekoliko izuzetaka (npr. libuv), standardna biblioteka je samostalno ugrađena u Juliji. Najznačajniji aspekt Julijine implementacije je brzina, koja je često faktor dve beze u odnosu na potpuno optimizovan C kod (a samim tim često magnituda raste brže nego u Pajtonu ili R-u).[23] Razvoj programskog jezika Julija je započet 2009. godine dok je verzija otvorenog koda objavljena u Februaru 2012. godine.[1][24]
Julija, 0.4 linija, predstavlja raspored koji izlazi jednom mesečno gde su ispravljeni svi bagovi i gde vraćaju/dodaju neke karakteristike.[25]
Trenutne i buduće platforme
[uredi | uredi izvor]Dok Julija koristi TNV[26] (MCTNV[27] iz VMNR-a) – Julija generiše sve prirodne mašinske kodove, direktno kada se funkcija pokrene prvi put (nebajtkod pokrenut na virtuelnoj mašini, npr. preko Jave/Dalvika)
Trenutna podrška za novije x86 ili starije i386 procesore i u 0.4.0. 32-bitnoj ARM arhitekturi ("Eksperimentalna i rana podrška"[28] uz pomoć "posla u toku - za nekoliko testova je poznato da su nepoloženi, i da se ne mogu videti"[29] uz pomoć alfa podrške za Raspberi Pi 1/2[30][31] ali "[na ARMv7] Samsungovoj hrom-knjizi [..] Julija se pokreće sasvim dobro"[32]), 64-bitnom ARMv8[33] i PowerPC.[traži se izvor][34]
Julija2C "izvor-do-izvora" kompajler
[uredi | uredi izvor]Julija2C "izvor do izvora" kompajler se može nabaviti iz Intelove laboratorije.[35] Ovaj "izvor do izvora" kompajler je Julijin fork, koji implementira istu programsku sintaksu kao u Juliji, koji emituje C kod (zbog kompaktibilnosti sa procesorom) umesto prirodnog mašinskog koda za funkcije ili cele programe. Kompajler dozvoljava analiziranje koda na većem nivo nego u programskom jeziku C.[36]
Beleške
[uredi | uredi izvor]- ^ Pozivanje novog Pajton 3 takođe radi[15][16] (kao i PajPaj[17]) a pozivanje u suprotnom smeru, iz Pajtona u Juliju, je takođe omogućeno preko pyjulia. Čak je moguće i pozivanje rekurzije između ova dva programska jezika, bez (ili uz) pomoć korišćenja Polyglot.jl, koji podržava dodatne Pajtonove programe.
Reference
[uredi | uredi izvor]- ^ a b "Why We Created Julia" Arhivirano na sajtu Wayback Machine (18. januar 2016).
- ^ „Introduction — Julia Language 0.5.0-dev documentation”. Julia.readthedocs.org. Arhivirano iz originala 8. 04. 2016. g. Pristupljeno 15. 1. 2016.
- ^
- ^ The Julia Language
- ^ „Non-GPL Julia?”. Groups.google.com. Pristupljeno 15. 1. 2016.
- ^ „Introduce USE_GPL_LIBS Makefile flag to build Julia without GPL libraries”. „Note that this commit does not remove GPL utilities such as git and busybox that are included in the Julia binary installers on Mac and Windows. It lets you build from source without any GPL library dependencies.”
- ^ "The Julia Language" (official website).
- ^ Bryant, Avi (15 October 2012).
- ^ Krill, Paul (18 April 2012).
- ^ Finley, Klint (3 February 2014).
- ^ "Escher lets you build beautiful interactive Web UIs in Julia" Arhivirano na sajtu Wayback Machine (4. mart 2016).
- ^ "Getting Started with Node Julia". node-julia.
- ^ Moss, Robert (26 June 2015).
- ^ "Suspending Garbage Collection for Performance...good idea or bad idea?"
- ^ „Google Groups”. Groups.google.com. Pristupljeno 2. 2. 2016.
- ^ stevengj (10. 12. 2015). „PyCall.jl/PyCall.jl at master · stevengj/PyCall.jl · GitHub”. Github.com. Pristupljeno 2. 2. 2016.
- ^ „wavexx/Polyglot.jl: transparent remote/recu...”. GitHub. Pristupljeno 2. 2. 2016.
- ^ a b „Learn Julia in Y Minutes”. Learnxinyminutes.com. Pristupljeno 15. 1. 2016.
- ^ „Julia REPL documentation”. Docs.julialang.org. 16. 6. 2014. Arhivirano iz originala 30. 05. 2014. g. Pristupljeno 15. 1. 2016.
- ^ See also: http://julia.readthedocs.org/en/latest/manual/strings/ Arhivirano na sajtu Wayback Machine (3. novembar 2014) for string interpolation and the
string(greet, ", ", whom, ".\n")
example for preferred ways to concatenate strings. - ^ "Julia Documentation". julialang.org.
- ^ "Chris Lattner discusses the name LLVM" Arhivirano na sajtu Wayback Machine (12. januar 2012).
- ^ "Julia: A Fast Dynamic Language for Technical Computing" Arhivirano na sajtu Wayback Machine (2. decembar 2012) (PDF). 2012.
- ^ Gibbs, Mark (9 January 2013).
- ^ 0.3.3. „0.3.3 release planning issue · Issue #9045 · JuliaLang/julia · GitHub”. Github.com. Pristupljeno 15. 1. 2016.
- ^ "Support MCJIT".
- ^ "Using MCJIT with the Kaleidoscope Tutorial". 22 July 2013.
- ^ „JuliaLang/julia - Julia”. GitHub. Pristupljeno 15. 1. 2016.
- ^ JuliaLang (26. 11. 2015). „julia/README.arm.md at master · JuliaLang/julia · GitHub”. Github.com. Arhivirano iz originala 11. 11. 2016. g. Pristupljeno 15. 1. 2016.
- ^ "Cross-compiling for ARMv6".
- ^ "ARM build failing during bootstrap on Raspberry Pi 2".
- ^ „Cross-compiling for ARMv6 · Issue #10488 · JuliaLang/julia · GitHub”. Github.com. Pristupljeno 15. 1. 2016.
- ^ „AArch64 build fails surprisingly close to the end (building sys0.o) · Issue #10791 · JuliaLang/julia · GitHub”. Github.com. Pristupljeno 15. 1. 2016.
- ^ "Porting Julia to PowerPC".
- ^ „julia/j2c at j2c · IntelLabs/julia · GitHub”. Github.com. Pristupljeno 15. 1. 2016.
- ^ "Julia2C initial release" Arhivirano na sajtu Wayback Machine (7. decembar 2015).
Spoljašnje veze
[uredi | uredi izvor]- Zvanični veb-sajt
- The Julia manual
- Julia Package Listing – lista svih "registrovanih" paketa