Јулија (програмски језик)

С Википедије, слободне енциклопедије
Јулија
Програмер(и)Џеф Безансон, Стефан Карпински, Вирал Б. Схах, Алан Елдман
Прво издање2012. година
Стабилно издање
0.4.3 / 0.3.12 / 12. јануар 2016. године
Прелиминарно издање
0.5.0-дев / дневно ажуриран
Написан уМАТЛАБ, Lisp, C, Фортран, Математика[1] (стриктно свој Волфрам програм), Пајтон, Перл, R, Руби, Луа[2]
Оперативни системЛинукс, OS X, FreeBSD, Windows
Стандард(и).јл
ЛиценцаЕмАјТи лиценца,[3] ГПЛ в2[4][5] Опција за прављење фајлова помоћу ГПЛ библиотека.[6]
Веб-сајтjulialang.org

Јулија је динамички и програмски језик високог нивоа дизајниран да одговори на захтеве развијених нумеричких и научних израчунавања, али је такође ефективан за ефективно опште програмирање,[7][8][9][10] веб употребу[11][12], може се користити и за спецификацију програмског језика.[13] Карактеристике Јулија програмског језика обухватују типски систем у пакету са параметарским типским системом у облику целокупног динамичног програмског језика, као и у облику посебних пакета у облику сопственог језгра програмске парадигме. Омогућава истовремено, паралелно и дистрибуирано израчунавање, и директно позивање библиотека програмских језика C и Фортран, без посебног кода.  Јулија је сакупљач смећа,[14] програм који користи жељену процену и у себи садржи ефикасне библиотеке за израчунавања, линеарну алгебру, насумичну генерацију бројева, брзе Фуријерове трансформације и упоређивање регуларних израза.

Карактеристике програмског језика[уреди | уреди извор]

Како нам официјелни сајт каже, главне карактеристике овог програмског језика су:

  • Вишеструко отпремање: пружање могућности да се дефинише понашање функције у више различитих типова аргумената
  • Динамични тип система: типови за документацију, оптимизацију, и обавештење
  • Добре перформансе, сличан статичким типским програмима као што је C.
  • Уграђен менаџер пакета
  • Lisp као макрои и други објекти метапрограмирања
  • Позивање Пајтонових функција: користити ПајКол (PyCall) пакет[а]
  • Директно позивање C функција: није потребан специјални АПИ
  • Веома добар шел уз помоћ којег се управља другим процесима
  • Дизајниран је за паралелно и расподељено израчунавање
  • Корутине: једноставан "зелени" навој
  • Кориснички дефинисани типови представљају уграђене функције и веома су компактни и брзи
  • Аутоматско прорачунавање ефикасности, специјализован је код за различите типске аргументе
  • Елегантне и прошириве конверзије и промоције за бројеве и остале типове
  • Ефикасна подршка за Јуникод, који поседује UTF-8.

Вишеструко отпремање (познато још и као "вишеструке методе" у Lisp-у) представља упрошћавање једног отпремања - најчешће се користи полиморфни механизам у објектно оријентисаним (ОО)  програмима који користе наслеђивање. У Јулији, сви конкретни типови су подтипови апстрактних типова, директно или индиректно подитпови "Ени (any)" типова, који су на врху хијерархије. Конкретни типови не могу бити подтипови, али се њихова композиција користи преко наслеђивања, које користе објектно оријентисани програми (такође видети Наслеђивање против подтипова).


Јулија црпи значајну инспирацију из различитих дијалеката програмског језика Lisp, укључујући Шем и Common Lisp, и има доста заједичких одлика са Диланом (као што је Алгол који има слободну форму инфикс синтаксе док Lisp има префикс синтаксу, док је у Лулији "све"[18] израз) - такође представља динамички програмски језик базиран на вишесложном упрошћавању - и Фотрес, још један нумерички програмски језик са особином вишеструког упрошћавања и софистицираним параметарским типским системом. Док КЛОС даје вишеструко упрошћавање од Common Lisp-а, уз додатак: само  кориснички дефинисане функције експлицитно декларисане да буду генеричке могу бити проширене са неколико нових мултиметода.


Јулија макори - познати као хигијенски макрои, који се користе за имплементацију метапрограмирања, слично макроима коришћеним у Lisp-у - веома су моћни и различити су од нехигијенских макроа коришћених у неким другим програмским језикама као што је нпр. C.

У Јулији, Дилану и Фортресу, са друге стране гледиша, ова моћ проширивања је стандардна, и системи уграђених функција су генерички и прошириви. У Дилану, вишеструко упрошћавање је основна функција као што је случај у Јулији: све кориснички дефинисане функције па чак и основне уграђене операције, као што је +, су генеричке. Диланов типски систем, међутим, не подржава баш све параметарске типове, који су више типични за МЛ програмске језике. Стандардно, КЛОС не подржава упрошћавања Lisp-ових параметарских типова; као што су - упрошћавање  проширених семантика које се једино могу додати као екстензија кроз КЛОС-ов протокол Метаобјекта. Према конвергентном дизајну, Фортрес такође поседује вишеструко упрошћавање параметарских типова; супротно од Јулије, међутим, Фотрес није динамички него статички тип, са одвојеном компилацијом и извршавањем фаза. Карактеристике програмских језика су представљене у следећој табели:

Програм Тип система Генеричке функције Параметарски типови
Јулија динамички стандардне да
Common Lisp динамички управљачке да (али не упрошћавање)
Дилан динамички стандардне парцијални (без упрошћавања)
Фортрес статички стандардне да

Интеракција[уреди | уреди извор]

Јулијина званична дистрибуција обухвата интерактивни шел, који се назива РЕПЛ, који се може користити за експериментисање и брзо тестирање кода.[19] Следећи фрамгент представља једноставан пример РЕПЛ-а:[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!

РЕПЛ омогућава приступ систему шела и има помоћни режим, притискањем ; или ? после линије (претходећи свакој команди), респективно. РЕПЛ такође чува историју команди, чак и између сесија. За додатне примере, видети Јулијину документацију[21] која даје кодове који се могу тестирати унутар Јулијине интерактивне секције или снимањем фајла као .jl екстензија и покренути са командне линије куцањем (на пример):[18]

$ julia <filename>

Јулија је такође подржана од стране Јупитера, онлајн интерактивног "нутбукс (notebooks)" окружења (пројектовани Јупитер је вишејезична екстензија, која је "добијена" из ИПајтонове (IPython) командне линије; која садржи Јулију).


Коришћење Јулије на другим језицима[уреди | уреди извор]

Јулијин ccall (C-позив) кључне речи се користи за позивање C-ове (или Фортранове) заједничке библиотеке функција.

Јулија има Јуникод подршку, уз помоћ UTF-8 који се користи за изворни код који углавном дозвољава уобичајне математичке симобле за различите операције, као што је нпр. ∈ за in оператор. Уз помоћ стрингова UTF-8, UTF-16 и UTF-32 (и ASCII) кодирање је потпуно подржано.

Јулија има пакете који подржавају језике за означавање као што су, HTML (такође за HTTP), XML, JSON, BSONMongoDB) итд.

Имплементација[уреди | уреди извор]

Јулијино језгро је имплементирано у C и C++ (C++ зависи од ВМНР), сопственом парсеру у Шем програмском језику ("фемтолисп"), док се ВМНР оквирни компајлер користи у "тачно на време" (ТНВ) генерацијама 64-битних или 32-битних машинских кодова (нпр. не и за виртуелну машину[22]) у зависности од платформе коју Јулија користи. Уз неколико изузетака (нпр. либув), стандардна библиотека је самостално уграђена у Јулији. Најзначајнији аспект Јулијине имплементације је брзина, која је често фактор две безе у односу на потпуно оптимизован C код (а самим тим често магнитуда расте брже него у Пајтону или Р-у).[23] Развој програмског језика Јулија је започет 2009. године док је верзија отвореног кода објављена у Фебруару 2012. године.[1][24]

Јулија, 0.4 линија, представља распоред који излази једном месечно где су исправљени сви багови и где враћају/додају неке карактеристике.[25]

Тренутне и будуће платформе[уреди | уреди извор]

Док Јулија користи ТНВ[26] (МЦТНВ[27] из ВМНР-а) – Јулија генерише све природне машинске кодове, директно када се функција покрене први пут (небајткод покренут на виртуелној машини, нпр. преко Јаве/Далвика)

Тренутна подршка за новије x86 или старије и386 процесоре и у 0.4.0. 32-битној АРМ архитектури ("Експериментална и рана подршка"[28] уз помоћ "посла у току - за неколико тестова је познато да су неположени, и да се не могу видети"[29] уз помоћ алфа подршке за Распбери Пи 1/2[30][31] али "[на АРМv7] Самсунговој хром-књизи [..] Јулија се покреће сасвим добро"[32]), 64-битном АРМv8[33] и PowerPC.[тражи се извор][34]

Јулија2Ц "извор-до-извора" компајлер[уреди | уреди извор]

Јулија2Ц "извор до извора" компајлер се може набавити из Интелове лабораторије.[35] Овај "извор до извора" компајлер је Јулијин форк, који имплементира исту програмску синтаксу као у Јулији, који емитује C код (због компактибилности са процесором) уместо природног машинског кода за функције или целе програме. Компајлер дозвољава анализирање кода на већем ниво него у програмском језику C.[36]

Белешке[уреди | уреди извор]

  1. ^ Позивање новог Пајтон 3 такође ради [15][16] (као и ПајПај[17]) а позивање у супротном смеру, из Пајтона у Јулију, је такође омогућено преко pyjulia. Чак је могуће и позивање рекурзије између ова два програмска језика, без (или уз) помоћ коришћења Polyglot.jl, који подржава додатне Пајтонове програме.

Референце[уреди | уреди извор]

  1. ^ а б "Why We Created Julia" Архивирано на сајту Wayback Machine (18. јануар 2016).
  2. ^ „Introduction — Julia Language 0.5.0-dev documentation”. Julia.readthedocs.org. Архивирано из оригинала 8. 04. 2016. г. Приступљено 15. 1. 2016. 
  3. ^
  4. ^ The Julia Language
  5. ^ „Non-GPL Julia?”. Groups.google.com. Приступљено 15. 1. 2016. 
  6. ^ „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. 
  7. ^ "The Julia Language" (official website).
  8. ^ Bryant, Avi (15 October 2012).
  9. ^ Krill, Paul (18 April 2012).
  10. ^ Finley, Klint (3 February 2014).
  11. ^ "Escher lets you build beautiful interactive Web UIs in Julia" Архивирано на сајту Wayback Machine (4. март 2016).
  12. ^ "Getting Started with Node Julia". node-julia.
  13. ^ Moss, Robert (26 June 2015).
  14. ^ "Suspending Garbage Collection for Performance...good idea or bad idea?"
  15. ^ „Google Groups”. Groups.google.com. Приступљено 2. 2. 2016. 
  16. ^ stevengj (10. 12. 2015). „PyCall.jl/PyCall.jl at master · stevengj/PyCall.jl · GitHub”. Github.com. Приступљено 2. 2. 2016. 
  17. ^ „wavexx/Polyglot.jl: transparent remote/recu...”. GitHub. Приступљено 2. 2. 2016. 
  18. ^ а б „Learn Julia in Y Minutes”. Learnxinyminutes.com. Приступљено 15. 1. 2016. 
  19. ^ „Julia REPL documentation”. Docs.julialang.org. 16. 6. 2014. Архивирано из оригинала 30. 05. 2014. г. Приступљено 15. 1. 2016. 
  20. ^ See also: http://julia.readthedocs.org/en/latest/manual/strings/ Архивирано на сајту Wayback Machine (3. новембар 2014) for string interpolation and the string(greet, ", ", whom, ".\n") example for preferred ways to concatenate strings.
  21. ^ "Julia Documentation". julialang.org.
  22. ^ "Chris Lattner discusses the name LLVM" Архивирано на сајту Wayback Machine (12. јануар 2012).
  23. ^ "Julia: A Fast Dynamic Language for Technical Computing" Архивирано на сајту Wayback Machine (2. децембар 2012) (PDF). 2012.
  24. ^ Gibbs, Mark (9 January 2013).
  25. ^ 0.3.3. „0.3.3 release planning issue · Issue #9045 · JuliaLang/julia · GitHub”. Github.com. Приступљено 15. 1. 2016. 
  26. ^ "Support MCJIT".
  27. ^ "Using MCJIT with the Kaleidoscope Tutorial". 22 July 2013.
  28. ^ „JuliaLang/julia - Julia”. GitHub. Приступљено 15. 1. 2016. 
  29. ^ JuliaLang (26. 11. 2015). „julia/README.arm.md at master · JuliaLang/julia · GitHub”. Github.com. Архивирано из оригинала 11. 11. 2016. г. Приступљено 15. 1. 2016. 
  30. ^ "Cross-compiling for ARMv6".
  31. ^ "ARM build failing during bootstrap on Raspberry Pi 2".
  32. ^ „Cross-compiling for ARMv6 · Issue #10488 · JuliaLang/julia · GitHub”. Github.com. Приступљено 15. 1. 2016. 
  33. ^ „AArch64 build fails surprisingly close to the end (building sys0.o) · Issue #10791 · JuliaLang/julia · GitHub”. Github.com. Приступљено 15. 1. 2016. 
  34. ^ "Porting Julia to PowerPC".
  35. ^ „julia/j2c at j2c · IntelLabs/julia · GitHub”. Github.com. Приступљено 15. 1. 2016. 
  36. ^ "Julia2C initial release" Архивирано на сајту Wayback Machine (7. децембар 2015).

Спољашње везе[уреди | уреди извор]