Јулија (програмски језик)
From Wikipedia, the free encyclopedia
Remove ads
Јулија је динамички и програмски језик високог нивоа дизајниран да одговори на захтеве развијених нумеричких и научних израчунавања, али је такође ефективан за ефективно опште програмирање,[7][8][9][10] веб употребу[11][12], може се користити и за спецификацију програмског језика.[13] Карактеристике Јулија програмског језика обухватују типски систем у пакету са параметарским типским системом у облику целокупног динамичног програмског језика, као и у облику посебних пакета у облику сопственог језгра програмске парадигме. Омогућава истовремено, паралелно и дистрибуирано израчунавање, и директно позивање библиотека програмских језика C и Фортран, без посебног кода. Јулија је сакупљач смећа,[14] програм који користи жељену процену и у себи садржи ефикасне библиотеке за израчунавања, линеарну алгебру, насумичну генерацију бројева, брзе Фуријерове трансформације и упоређивање регуларних израза.
Remove ads
Карактеристике програмског језика
Како нам званични сајт каже, главне карактеристике овог програмског језика су:
- Вишеструко отпремање: пружање могућности да се дефинише понашање функције у више различитих типова аргумената
- Динамични тип система: типови за документацију, оптимизацију, и обавештење
- Добре перформансе, сличан статичким типским програмима као што је C.
- Уграђен менаџер пакета
- Lisp као макрои и други објекти метапрограмирања
- Позивање Пајтонових функција: користити ПајКол (PyCall) пакет[а]
- Директно позивање C функција: није потребан специјални АПИ
- Веома добар шел уз помоћ којег се управља другим процесима
- Дизајниран је за паралелно и расподељено израчунавање
- Корутине: једноставан "зелени" навој
- Кориснички дефинисани типови представљају уграђене функције и веома су компактни и брзи
- Аутоматско прорачунавање ефикасности, специјализован је код за различите типске аргументе
- Елегантне и прошириве конверзије и промоције за бројеве и остале типове
- Ефикасна подршка за Јуникод, који поседује UTF-8.
Вишеструко отпремање (познато још и као "вишеструке методе" у Lisp-у) представља упрошћавање једног отпремања - најчешће се користи полиморфни механизам у објектно оријентисаним (ОО) програмима који користе наслеђивање. У Јулији, сви конкретни типови су подтипови апстрактних типова, директно или индиректно подитпови "Ени (any)" типова, који су на врху хијерархије. Конкретни типови не могу бити подтипови, али се њихова композиција користи преко наслеђивања, које користе објектно оријентисани програми (такође видети Наслеђивање против подтипова).
Јулија црпи значајну инспирацију из различитих дијалеката програмског језика Lisp, укључујући Шем и Common Lisp, и има доста заједичких одлика са Диланом (као што је Алгол који има слободну форму инфикс синтаксе док Lisp има префикс синтаксу, док је у Лулији "све"[18] израз) - такође представља динамички програмски језик базиран на вишесложном упрошћавању - и Фотрес, још један нумерички програмски језик са особином вишеструког упрошћавања и софистицираним параметарским типским системом. Док КЛОС даје вишеструко упрошћавање од Common Lisp-а, уз додатак: само кориснички дефинисане функције експлицитно декларисане да буду генеричке могу бити проширене са неколико нових мултиметода.
Јулија макори - познати као хигијенски макрои, који се користе за имплементацију метапрограмирања, слично макроима коришћеним у Lisp-у - веома су моћни и различити су од нехигијенских макроа коришћених у неким другим програмским језикама као што је нпр. C.
У Јулији, Дилану и Фортресу, са друге стране гледиша, ова моћ проширивања је стандардна, и системи уграђених функција су генерички и прошириви. У Дилану, вишеструко упрошћавање је основна функција као што је случај у Јулији: све кориснички дефинисане функције па чак и основне уграђене операције, као што је +
, су генеричке. Диланов типски систем, међутим, не подржава баш све параметарске типове, који су више типични за МЛ програмске језике. Стандардно, КЛОС не подржава упрошћавања Lisp-ових параметарских типова; као што су - упрошћавање проширених семантика које се једино могу додати као екстензија кроз КЛОС-ов протокол Метаобјекта. Према конвергентном дизајну, Фортрес такође поседује вишеструко упрошћавање параметарских типова; супротно од Јулије, међутим, Фотрес није динамички него статички тип, са одвојеном компилацијом и извршавањем фаза. Карактеристике програмских језика су представљене у следећој табели:
Remove ads
Интеракција
Јулијина званична дистрибуција обухвата интерактивни шел, који се назива РЕПЛ, који се може користити за експериментисање и брзо тестирање кода.[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, BSON (и MongoDB) итд.
Remove ads
Имплементација
Јулијино језгро је имплементирано у 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]
Белешке
- Позивање новог Пајтон 3 такође ради[15][16] (као и ПајПај[17]) а позивање у супротном смеру, из Пајтона у Јулију, је такође омогућено преко pyjulia. Чак је могуће и позивање рекурзије између ова два програмска језика, без (или уз) помоћ коришћења Polyglot.jl, који подржава додатне Пајтонове програме.
Референце
Спољашње везе
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads