Julia Programing Language, Using by Jupyter NoteBook

Julia Programlama Dili

Yazılım Dünyasında Bir Küçük Kız: Julia…

Naciye Kuru
Academy Team

--

İnsan iyi bir zaman tüketicisidir. Kendinin bu tüketimiyle yüzleştiğinde “Geçen gün ömürdendir.” kavramını daha çok anlamış ve dar vakitlerde çok işler yapmak için zaman içinde bir zamansızlığa tutunma telaşına kapılmış durumdadır.
Bu durum yazılım dünyasına da yansımış ve daha hızlı, daha esnek, daha uyumlu ve anlaşılır, kullanımı kolay ve dinamik programlama dilleri ile keşif serüvenine devam etmek için yeni diller geliştirilmiştir. Bunlardan nispeten yeni diyebileceğimiz Julia’dan bahsetmek istiyorum.

Julia oldukça modern bir dildir ve 2009 yılında Jeff Bezanson, Stefan Karpinski , Viral B. Shah ve Alan Edelman tarafından geliştirilmiştir Özgür, üst düzey ve hızlı bir dil tasarlama fikrine sahip olan ekip, dilin misyonunu açıklayan bir blog yazısı içeren bir web sitesi başlattığında, dil resmi olarak 2012 yılında dünyaya tanıtılmış oldu.

Akla ilk gelen sorulardan biri (biraz magazinsel ama gerçekten de merak uyandırıcı 🙂 : “Neden bu programlama dilinin adı “Julia” ?

Julia programlama dilinin adı, Amerikalı matematikçi “Julia Bowman Robinson”’a atıfta bulunuyor. Julia, 20. yüzyılın önemli matematikçilerinden biridir ve özellikle hesaplanabilirlik teorisi ve matematiksel mantık alanlarında çalışmalarıyla tanınmıştır.

Julia programlama dilinin oluşturulması sırasında, en kritik görülen hedeflerden biri dilin yüksek performanslı ve hesaplama yoğun uygulamalar için kullanılabilir olmasıydı. Bu nedenle, bir matematikçi olan Julia Bowman Robinson’un ismi, dilin matematiksel hesaplamalar ve bilimsel hesaplamalar için kullanışlı olacağının bir işareti olarak seçildi.

Ayrıca, “Julia” isminin kendisi, Latin kökenli bir isim olmasına rağmen tüm dünyada biliniyor ve telaffuz ediliyor. Ayrıca ismin uluslararası kullanılabilirliği ve telaffuzunun kolay olması gibi faktörlerden diğer nedenler. Bu sayede, dilin dünya çapında kullanılan ve anlaşılan bir isminin olmasına önem verildi. Geliştiriciler Julia’yı evrensel bir dil yapmayı amaçladıkları için de bu kültürlerarası ismi kullanmanın uygun olacağını düşünmüşler.

Aynı zamanda, Julia kelime anlamı olarak “genç, tatlı, zarif” gibi anlamlara gelir. Julia dilinin söz diziminin de benzer şekilde zarif ve akıcı olduğunu vurgulamak için de seçilmiş bu isim.

Yukarıdaki sebeplerden dolayı, Julia ismi yazarlar tarafından programlama dilinin doğasını, felsefesini ve vizyonunu en iyi şekilde yansıtan isim olarak görülmüş ve yazılım dünyasına bu ismi kazandırmışlardır.

Julia nın oluşturucularına neden yeni bir dil oluşturdukları sorulduğunda dilin oluşturucuları tarafından verilen cevap aşağıdaki gibidir:

Liberal bir lisansa sahip açık kaynaklı bir dil istiyoruz. Ruby’nin dinamizmi ile C’nin hızını istiyoruz. Lisp gibi gerçek makrolara sahip, ancak Matlab gibi açık, tanıdık matematiksel notasyona sahip homoikonik bir dil istiyoruz. Genel programlama için Python kadar kullanılabilir, istatistik için R kadar kolay, dizi işleme için Perl kadar doğal, doğrusal cebir için Matlab kadar güçlü, programları birbirine yapıştırmada kabuk kadar iyi bir şey istiyoruz. Öğrenmesi çok basit ama en ciddi bilgisayar korsanlarını bile mutlu eden bir şey. İnteraktif olmasını ve derlenmesini istiyoruz.”

Julia programlama dili, amaçlandığı üzere yüksek performanslı hesaplamalar, veri analizi, bilimsel hesaplamalar ve büyük veri işleme gibi alanlarda etkili bir şekilde kullanılan modern bir programlama dilidir. Bu özelliklerinden dolayı da kullanım alanları giderek artmakta ve daha fazla ilgi görmektedir. Özellikle bazı alanlarda büyük avantajlar sağlamaktadır:

Bilimsel Hesaplama: Julia, özellikle sayısal ve bilimsel hesaplamalar için geliştirilmiş bir dildir. Matlab, R ve Python’a alternatif olarak bu alanda yaygın kullanılmaktadır.

Makine Öğrenmesi ve Derin Öğrenme: Julia, makine öğrenmesi ve derin öğrenme uygulamaları için hızlı, esnek ve verimli bir dil olması sebebiyle bu alanda giderek yaygınlaşmaktadır. TensorFlow, PyTorch ve Flux.jl gibi derin öğrenme kütüphaneleri Julia ile kullanılabilir.

Optimizasyon ve Simülasyon: Karmaşık simülasyon, modelleme ve optimizasyon işlemleri için Julia oldukça performanslı bir dildir.

Finans ve Ekonometri: Finansal analiz, risk modellemesi, ekonometri ve matematiksel modelleme için uygundur.

Oyun ve Grafikler: 2D/3D Oyun geliştirme, grafik işleme ve görselleştirme için OpenGL kütüphanesi desteği vardır.

Dağıtık ve Paralel Hesaplama: Julia, dağıtık ve paralel hesaplama için çok çekirdekli CPU lardan GPU lara kadar hemen hemen her ortamda kullanılabilir.

  • Web Geliştirme: Julia ile web servisleri, web uygulamaları ve web sayfaları geliştirilebilir. Web çerçeveleri Julia ile entegre şekilde çalışır.

Julia programlama dili son yıllarda oldukça yaygınlaşmış olduğunu bir de istatistiki olarak değerlendirirsek bazı istatistikler ve sayılar Julia’nın popülaritesini göstermektedir:

• GitHub’da 12 Haziran 2023 itibariyle Julia repo’su 48.5K ve 5.2k forks a sahiptir. Bu Julia’nın oldukça aktif bir geliştirici topluluğa sahip olduğunu gösterir.

• Julia’nın resmi paket yöneticisi olan Julia Observer’da 24 Mart 2020 itibariyle 4,526 Julia paketi bulunmaktadır. Bu Julia ekosisteminin genişliğini gösterir.

• Anaconda’ nın 2019 Ocak ayı verilerine göre, Jupyter Laboratuvarı’nı açmak için kullanılan en popüler dillerin arasında Julia 6. sırada yer almaktadır. İlgi hızla yükselmektedir.

• Julia kullanıcı yüksek öğrenim düzeylerinde PhD diplomasına sahip olanlarda en yüksek penetrasyon oranına (%16) sahiptir. Teknoloji/bilimsel alanlarını kullananların yaklaşık %10'u Julia’yı kullanmaktadır (kullanıcı profillerine ilişkin veriler Stack Overflow 2019 Yazılım Mühendisliği Araştırması’ndan)

• Julia, Google Trends’te ilginin arttığı ve yukarıda belirtilen alanlarda giderek daha yaygın olarak aratıldığını göstermektedir.

• Hackerrank blog sayfasından elde edilen 2023 bilgileri ışığında Julia nın makine öğreniminde sıklıkla kullanılmaya başlandığı bilgisine ulaşılmıştır

Bu istatistikler Julia programlama dilinin giderek daha yaygınlaştığını ve popülerliğinin hızla arttığını göstermektedir. Özellikle teknoloji ve bilimsel alanlarda yükselişi dikkat çekicidir.

Neden Julia Tercih Edilebilir?

Julia programlama dilinin kullanımının artışında rol oynayan etkenler, aşağıdaki özellikleriyle sıralanabilir:

Yüksek Performans: Julia, Fortran ve C ile yakın performansa sahiptir. Dinamik yapısına rağmen JIT (Just-in-time) derleyici sayesinde hızlı çalışır.

Dinamik Yapı: Değişkenlerin tipleri çalışma zamanında belirlenir. Bu esneklik ve kolaylık sağlar.

Açık Kaynak ve Ücretsiz: Julia MIT lisansı altında ücretsiz ve açık kaynaklıdır.

Kolay Okunabilir: Julia söz dizimi Python ve Matlab gibi diller kadar okunabilir ve öğrenilmesi kolaydır.

Bilimsel Hesaplamaya Yönelik: Sayısal ve bilimsel hesaplamalar için geliştirilmiş çok çeşitli kütüphanelere sahiptir.

Derinlemesine Paket Ekosistemi: 4.500'den fazla Julia paketi mevcuttur. Bu, Julia’nın gücünü artırır.

Makine Öğrenmesi ve Derin Öğrenme için Uygun: Makine öğrenmesi ve derin öğrenme kütüphaneleri Julia ile tam olarak entegre çalışabilir.

Çoklu Paradigma: Çoklu paradigma destekler; fonksiyonel programlama, nesne yönelimli programlama, generic programlama gibi. Bu esneklik sağlar.

Zengin Metaprogramlama Desteği: Kuvvetli bir metaprogramlama sistemine sahiptir. Kompleks kod üretiminde kullanışlıdır.

• Diğer Dillerle Birlikte Çalışır: C, Fortran, Python, R gibi dillerle verimli bir şekilde birlikte çalışabilir.

Büyüyen Bir Topluluk: Gittikçe büyüyen ve gelişen, yardımsever bir geliştirici topluluğa sahiptir.

Julia, yukarıdaki sıralanan özellikleriyle modern yüksek performanslı bir programlama dili olarak dikkat çekmektedir.

Julia’nın Kapsamı

Julia’nın çekirdek tasarımcıları ve geliştiricileri Jeff Bezanson, Stefan Karpinski, Viral B. Shah ve Alan Edelman, Julia’nın açıkça mevcut teknik hesaplama disiplinindeki mevcut yazılım araç takımlarında mevcut olan aşağıdaki boşlukları kapatmak için tasarlandığını açıklamışlardır:

Prototipleme — Prototipleme, teknik hesaplama disiplininde yüksek seviyeli ve esnek bir programlama diline ihtiyaç duyan bir sorundur, böylece geliştirici hesaplama ve programlama dilinin düşük seviyeli ayrıntıları hakkında endişelenmemelidir.

Performans — Gerçel sayılarda hesaplama maksimum performansa ihtiyaç duyar. Bir programlama dilinin üretim sürümü genellikle “Fortran” veya “C” programlama diliyle yazılır.

Hız — Teknik alanda başka bir önemli sorun hızdır. Julia öncesinde, programcılar hem yüksek seviyeli programlama (Matlab, R veya Python ile prototipleme için kod yazmak) hem de düşük seviyeli programlama (programların performans duyarlı bölümlerini, gerçek hesaplamayı hızlandırmak için istatistiksel olarak derlenmiş diller olan C veya Fortran’da yazmak) konusunda uzman olmalıydı.

Julia programlama dili, C veya Fortran kadar etkili olarak bilgisayar kaynaklarını kullanan yüksek performanslı programlar yazma olanağı verir. Bu anlamda Julia, düşük seviyeli bir programlama diline duyulan ihtiyacı azaltır. Julia’daki son gelişmeler, LLVM JIT (Low Level Virtual Machine Just in Time) derleyici teknolojisi, ifade kabiliyetlerine ve saf hıza sahip tek bir ortamda çalışmanın mümkün olduğunu kanıtlamaktadır.

Julia ve Diğerleri

Julia’nın en çok kullanılan diğer programlama dilleriyle olan detaylı karşılaştırması ise şöyledir:

MATLAB : Julia’nın söz dizimi MATLAB’a benzer, ancak MATLAB’a kıyasla çok daha genel amaçlı bir dildir. Julia’daki çoğu işlev adı OCTAVE’yi (MATLAB’ın açık kaynak sürümü) andırsa da hesaplamalar son derece farklıdır. Doğrusal cebir alanında Julia, MATLAB kadar güçlü yeteneklere sahiptir, ancak kullanıcılarına aynı lisans ücreti sorunlarını yaşatmaz, çünkü açık kaynak kodludur. OCTAVE ye kıyasla Julia çok daha hızlıdır. MATLAB.Jl paketi ile Julia, MATLAB’a bir arabirim sağlar.

Python: Julia, Python benzeri kodu makine koduna derler, programcıya C programlama diliyle aynı performansı sağlar. Julia ve Python’ın performansını karşılaştırırsak, Julia 10 ila 30 kat daha öndedir. PyCall paketi ile Julia’da Python işlevlerini çağırabiliriz.

R : Bildiğimiz gibi, istatistik alanında R en iyi geliştirme dillerinden biridir, ancak Julia, R’ye göre 10 ile 1000 kat daha yüksek performans artışıyla istatistik alanında R kadar kullanışlıdır. MATLAB istatistik yapmak için uygun değildir ve R doğrusal cebir yapmak için uygun değildir, ancak Julia hem istatistik hem de doğrusal cebir yapmak için mükemmeldir. Öte yandan, Julia’nın tür sistemini R ile karşılaştırırsak, ilki çok daha zengin bir tür sistemine sahiptir.

Julia programlama dili, popüler dillerle karşılaştırıldığında aşağıdaki özellikleriyle öne çıkmaktadır:

  • Performans: Julia, C/C++, Fortran gibi diller kadar hızlıdır. Python, R ve Matlab gibi dillere kıyasla çok daha hızlıdır.

Esneklik: Değişkenlerin dinamik veri türleri vardır. Bu Python ve Matlab gibi dillere benzer ancak C/C++ ve Java gibi statik veri tipli dillere kıyasla daha esnektir.

Bilimsel Hesaplama Odaklı: Matlab, R ve Python gibi bilimsel diller kadar güçlüdür. C/C++ gibi dillere kıyasla bilimsel kütüphane desteği daha zengindir.

Kolay Okunurluk: Python ve Matlab kadar okunabilir ve öğrenilmesi kolaydır. C/C++ ve Java gibi dillere kıyasla daha az karmaşıktır.

  • Çok Paradigmalı: Tek bir paradigmaya bağlı değildir. Hem nesne yönelimli hem de fonksiyonel programlama desteği vardır. Bu, C/C++, Java, Python ve R gibi dillere kıyasla daha esnektir.
  • Topluluk: Gittikçe büyüyen bir geliştirici topluluğuna sahiptir. C/C++, Python, Java ve R kadar büyük olmasa da aktif ve yardımsever bir topluluktur.
  • Geniş Kütüphane Desteği: 4.500'den fazla kütüphanesi vardır. Bu, Python ve C/C++ ile kıyaslanabilir. R ve Matlab’a kıyasla daha az kütüphaneye sahip olsa da hızla büyümektedir.

Örneğin Makie, Julia programlama dili için yüksek performans ve genişletilebilirliğe sahip bir veri görselleştirme ekosistemidir. Windows, Mac ve Linux için kullanılabilir.

Aşağıda Makie kullanılarak mp4 formatında oluşturulan bir görselleştirme örneği ve kodlarını görüyorsunuz:

using GLMakie

Base.@kwdef mutable struct Lorenz
dt::Float64 = 0.01
σ::Float64 = 10
ρ::Float64 = 28
β::Float64 = 8/3
x::Float64 = 1
y::Float64 = 1
z::Float64 = 1
end

function step!(l::Lorenz)
dx = l.σ * (l.y - l.x)
dy = l.x * (l.ρ - l.z) - l.y
dz = l.x * l.y - l.β * l.z
l.x += l.dt * dx
l.y += l.dt * dy
l.z += l.dt * dz
Point3f(l.x, l.y, l.z)
end

attractor = Lorenz()

points = Observable(Point3f[])
colors = Observable(Int[])

set_theme!(theme_black())

fig, ax, l = lines(points, color = colors,
colormap = :inferno, transparency = true,
axis = (; type = Axis3, protrusions = (0, 0, 0, 0),
viewmode = :fit, limits = (-30, 30, -30, 30, 0, 50)))

record(fig, "lorenz.mp4", 1:120) do frame
for i in 1:50
push!(points[], step!(attractor))
push!(colors[], frame)
end
ax.azimuth[] = 1.7pi + 0.3 * sin(2pi * frame / 120)
notify.((points, colors))
l.colorrange = (0, frame)
end

Görüldüğü üzere, Julia pek çok açıdan C/C++, Java, Python ve R gibi popüler dillerle kıyaslanabilir bir programlama dilidir. Üstün hız, dinamik yapı, çok paradigmalı olması ve bilimsel hesaplamaya yönelmesi gibi avantajları bulunmaktadır.

Julia, makine öğrenmesi ve derin öğrenme alanlarında oldukça popülerdir. Bunun başlıca nedenleri:

Julia, Python ve R gibi dillere kıyasla makine öğrenmesi algoritmalarını çok daha hızlı çalıştırabilir. Derin sinir ağlarını bile C++ kadar hızlı eğitebilir.

Dinamik veri yapısı sayesinde farklı veri türlerini kolayca kullanabilir.

Zengin kütüphane desteği, lineer cebir, istatistik ve optimizasyon gibi makine öğrenimine dayalı konularda güçlüdür.

Makine öğrenmesi ekosistemi hızla büyümektedir. Yeni teknikler sürekli eklenmektedir. Açık kaynak olması bu gelişmeleri takip etmeyi kolaylaştırır.

GPU desteği sayesinde büyük veri kümelerinde dahi hızlı eğitim yapılabilir.

Julia dili için kullanılabilecek birkaç popüler IDE (Entegre Geliştirme Ortamı) bulunmaktadır. İşte bazı örnekler:

JuliaPro: Julia’nın resmi dağıtımı olan Julia Computing tarafından geliştirilen ve Julia için özel olarak tasarlanmış bir IDE’dir. Julia’nın yanı sıra Jupyter Notebook, JupyterLab ve Pluto.jl gibi önemli araçları içerir.

Juno: Julia diline odaklanan bir IDE olan Juno, Atom tabanlı bir platformdur. Julia’nın yanı sıra, otomatik tamamlama, hata ayıklama ve interaktif çalışma gibi özellikleri destekler.

VS Code (Visual Studio Code): Julia eklentileri sayesinde popüler bir kod düzenleyici olan VS Code, Julia dilini destekler. Julia için zengin bir özellik seti sunar ve kullanıcı dostu bir arayüze sahiptir.

Jupyter Notebook/JupyterLab: Jupyter Notebook, interaktif hesaplama ve veri analizi için popüler bir ortamdır. Julia kernel’ı sayesinde Julia dilini kullanmanızı sağlar. JupyterLab ise Jupyter Notebook’un gelişmiş bir sürümüdür ve daha fazla özellik sunar.

Sublime Text: Sublime Text, hafif ve esnek bir kod düzenleyicidir. Julia dilini destekleyen eklentileri sayesinde Julia kodunu yazmanıza imkan tanır.

Bunlar sadece bazı örneklerdir ve Julia dilini destekleyen diğer IDE’ler de bulunmaktadır. İhtiyaçlarınıza ve tercihlerinize bağlı olarak, farklı IDE’leri deneyerek size en uygun olanı seçebilirsiniz.

Makine Öğreniminde Julia : Review Makale

Julia nın makine öğrenmesinde kullanımı ve performansı üzerine Elsevier dergisinde 2020 yılında yayınlanan Review bir makale yazılmıştır :

“Julia language in machine learning: Algorithms, applications, and open issues “

Makale Julia dilinin makine öğrenimindeki uygulamalarıyla ilgili araştırma çalışmalarını ve gelişmeleri özetlemektedir. İlk olarak, Julia dili ile geliştirilen popüler makine öğrenimi algoritmalarını incelemiş. Ardından da Julia diliyle uygulanan makine öğrenimi algoritmalarının uygulama alanlarına değinmiş ve son olarak, Julia dilinin makine öğreniminde kullanımında ortaya çıkan açık sorunları ve potansiyel gelecek yönelimleri tartışmıştır.

Makelede supervised ve unsupervised makine öğrenmeleri arasından aşağıda grafiklerde verilen öğrenme modellerinin uygulanması değerlendirilmiş ve elde edilen sonuçlar incelenmiştir

Makalede Julia ile ilgili yapılan uygulamalardan Signal processing, IoT Data Analysis, Computer Vision, NLP, Pattern Recognition, Graph Analytics, Autonomous Driving alanları ele alınmıştır

Review Makalenin sonuç kısmında belirtildiği üzere Julia dilinde yazılmış makine öğrenimi algoritmaları genellikle denetimli öğrenme algoritmaları ve denetimsiz öğrenme için daha az algoritma bulundurduğu tespit edilmiştir. Julia dilinin, model tanıma, NLP, IoT veri analizi, bilgisayar görüsü, otonom sürüş, graf analitiği ve sinyal işleme gibi yedi popüler makine öğrenimi araştırma konusunda yaygın olarak kullanıldığı ortaya çıkmıştır. Diğer yüksek seviye dillerle karşılaştırıldığında, örneğin Python, Julia dilinin kullanılabilir uygulama paketlerinin çok daha az olduğu ve bunun da Julia’nın en büyük zorluğu olduğu ifade edilmiştir. Son olarak da Julia dilinin giderek olgunlaşması ve ilgili üçüncü taraf paketlerin geliştirilmesiyle birlikte, Julia dilinin makine öğrenimi için son derece rekabetçi bir programlama dili olacağına inanıldığı belirtilmiştir.

Makalenin linki ne buradan ulaşabilirsiniz.

Julia ile makine öğrenmesi ve derin öğrenme için kullanılan başlıca kütüphaneler:

MLJ — Makine öğrenmesi için kapsamlı kütüphane (Sklearn benzeri)

Flux — Derin öğrenme kütüphanesi. Keras benzeri yapıdadır. GPU desteği var.

Knet — Derin öğrenme kütüphanesi (Caffe benzeri)

TensorFlow.jl — TensorFlow un Julia uyarlaması.

ScikitLearn.jl — Scikit-learn uyarlaması.

XGBoost.jl — XGBoost için Julia bağlantısı.

LightGBM.jl — LightGBM için Julia bağlantısı.

Yukarıdaki kütüphanelerin yanı sıra LDA, Naive Bayes, Karar Ağaçları gibi klasik ML algoritmalarını uygulayan pek çok kütüphane de vardır. Julia, Machine Learning / Deep Learning için ciddi bir alternatiftir.

Veri bilimcilerinin amaçlarından biri, ‘C’ programlama diline gerek duymadan ifade kabiliyetlerine ve saf hıza ulaşmaktır. Julia, programlayıcılara yüksek seviyeli bir programlama dilinde kütüphaneler geliştirebilecekleri yeni bir teknik hesaplama çağı sunar.

Jupyter Notebok da Julia kullanımı

Öncelikle Julia nın kendi sayfasından bilgisayarınızın özelliklerine uygun olan julia.exe dosyasını indirelim. Dosya indikten sonra çalıştıralım ve Julianın kurulumunu gerçekleştirelim. Açılınca karşınıza aşağıdaki Julia REPL (Read-Eval-Print Loop) ortamı açılacak.

Burada Julia REPL (Read-Eval-Print Loop) ortamında aşağıdaki komutu girin:

using Pkg
Pkg.add("IJulia")

Bu komutlar, IJulia paketini indirilir ve kurulum gerçekleşir biraz zaman alacaktır. Daha sonrasında Julia REPL ortamından çıkın ve Jupiter Notebook’u başlatın ve yeni bir Python çalışma sayfası açın. Açılan yeni sayfada Julia Kernel i seçilmelidir. Aşağıdaki görsele bakabilirsiniz.

Yukarıdak verilen yükleme kodları burada da çalıştırılmalıdır.

Hadi Julia ile birlikte “dünyaya merhaba” diyelim.

Artık Julia ile birlikte bilindik bir IDE de çalışabilirsiniz :)

Julia ile ilgili sayfaların linkleri aşağıda verilmiştir.

Julia nın Anaconda üzerinden kullanımı için aşağıdaki linke tıklayabilirsiniz

Julia Github hesabı sonraki likte:

Julia nın kullanım bilgilerinin içeriği ile ilgili bilgilere ulaşmak için :

Julia ile ilgili örneklere aşağıdaki linkten ulaşabilirsiniz.

Julianın Plots kütüphanesine aşağıdaki linkten ulaşabilirsiniz.

--

--