Ana içeriğe geç

Mojo Dili: Yapay Zeka için Yeni Programlama Dili

Python kadar basit, Rust kadar hızlı yeni bir programlama diline genel bakış.
· 9 dk. oku

Yapay Zeka ile Keşfedin

Mojo, Python gibi dinamik dillerin kullanım kolaylığı ve esnekliğini C++ ve Rust gibi sistem dillerinin performansı ve kontrolüyle birleştiren bir programlama dilidir.

Entegre önbellekleme, çok iş parçacığı (multithreading) ve bulut dağıtımı gibi yenilikçi derleyici teknolojileri sayesinde yüksek performansa ulaşırken; otomatik ayarlama (autotuning) ve metaprogramlama da kodun çeşitli donanımlara göre optimize edilmesini sağlar.

Mojo’nun başlıca özellikleri şunlardır:

  • Python benzeri sözdizimi ve dinamik türleme, Mojo’yu Python geliştiricileri için öğrenmesi kolay kılar; zira Python modern AI/ML gelişmelerinin arkasındaki başlıca programlama dilidir.
  • Mojo ile herhangi bir Python kütüphanesini içe aktarabilir ve kullanabilirsiniz; bu da Python ile eksiksiz bir birlikte çalışabilirlik sağlar.
  • Hem anında derleme (JIT) hem de önceden derleme (AOT) desteği sunar. Mojo derleyicisi gelişmiş optimizasyonlar uygular ve hatta GPU/TPU kodu üretebilir.
  • Mojo, bellek yerleşimi, eşzamanlılık ve diğer düşük seviyeli ayrıntılar üzerinde tam kontrol sağlar.
  • Dinamik ve sistem dili yeteneklerini birleştirerek, hızlandırıcılara dayalı çeşitli kullanım durumlarında yeni başlayan dostu ve ölçeklenebilir tekil bir programlama modeli izler.

Mojo şu anda tamamlanmamış bir dildir ve kamuya açık değildir. Belgeler, sistem programlama deneyimi olan geliştiricileri hedeflemektedir.

Bununla birlikte, dil geliştikçe daha kullanıcı dostu ve başlangıç seviyesindeki programcılar için erişilebilir hâle gelmesi amaçlanmaktadır.

Mojo Lang ile Başlarken

Mojo herkese açık değil, ancak Modular Products’a kaydolup Mojo Playground’a erişebilirsiniz. Kayıt olurken, ilgi alanı bölümünde Modular Product Interest olarak Mojo’yu seçtiğinizden emin olun.

Modular’dan görsel: Bugün başlayın

Görsel kaynağı: Modular: Bugün başlayın

Kaydolduktan sonra bir saat içinde Mojo Playground’a erişim sağlayan bir e-posta alacaksınız. Mojo Playground, kullanıcıların aynı Mojo standart kütüphanesine erişebildiği bir JupyterHub ortamıdır. Ancak kullanıcıların Mojo programlarını yazıp kaydedebilecekleri özel bir alanı (private volume) vardır.

Mojo Playground’dan görsel

Görsel kaynağı: Mojo Playground

Mojo açık kaynak ve herkese açık olduğunda, bir terminalden Mojo programı çalıştırabilirsiniz. Yorumlanan ya da derlenen bir dildir.

Dosyayı test.mojo veya test.🔥 olarak kaydedebilirsiniz.

Evet, dosyanızı ateş emojisiyle kaydedebilirsiniz. Gördüğünüz gibi basit bir Mojo dosyası test.🔥 oluşturup terminalde çalıştırdık.

def main():
    print("Hello Mojo!")
$ mojo test.🔥
Hello Mojo!

Mojo Lang ve Python

Mojo, Python’un üstkümelerinden biridir ve sözdizimi Python’a neredeyse aynıdır. Ayrıca daha yüksek performans için değişkenleri, yapıları ve fonksiyonları tanımlamaya yarayan let, var, struct ve fn gibi yeni özellikler sunar.

let ve var bildirimi

Mojo ile kod yazarken let ve var anahtar sözcüklerini kullanarak belirli değişkenler tanımlayabilirsiniz. Bu, Rust’ta değişken tanımlamaya benzer.

let anahtar sözcüğü değişkenin değiştirilemez olduğunu, var ise değiştirilebilir olduğunu belirtir. Bu da derleme zamanında kısıtlamaları zorunlu kılarak performansı artırır.

struct türleri

Mojo, Python’daki class’a benzer struct anahtar sözcüğünü kullanır. Python’daki sınıflar dinamik ve yavaştır; struct türleri ise C/C++ ve Rust’a daha yakındır. Derleme zamanında belirlenen sabit bellek yerleşimlerine sahiptirler ve makineye yakın performans için optimize edilirler.

fn tanımları

Bir fonksiyonu tanımlamak için def kullanmak, Python’a özgü tüm dinamizm ve esneklikle bir Python fonksiyonu oluşturur. Buna karşın fn anahtar sözcüğü daha fazla kısıtlamaya sahip bir Mojo fonksiyonu tanımlar. Örneğin, argümanlar varsayılan olarak değiştirilemezdir ve yerel değişkenlerin açıkça türlenmesi ve bildirilmesi gerekir.

Sözdizimi karşılaştırma örneği

Bu örnekte iki argümanı toplayan bir Mojo fonksiyonu oluşturacağız.

Mojo fonksiyonunu çalıştırmak için:

  • Fonksiyonun argümanlarına tür belirtmelisiniz.
  • Dönüş türünü bir ok işaretiyle belirtmelisiniz.
fn add(x: Int, y: Int) -> Int:
    return x + y

z = add(3, 5)
print(z)
>>> 8

Python ile programlama yaparken, argüman ve çıktı türünü açıkça belirtmeden fonksiyon tanımlama seçeneğimiz vardır. Bu, süreci daha dinamik ve yalın kılar. Ancak karşılaştırıldığında, Mojo’daki fn fonksiyonu def’ten daha hızlıdır.

def add(x, y):
    return x + y

z = add(3, 5)
print(z)
>>> 8

Mojo’da Matplotlib

Mojo yalnızca performansı artırmakla kalmaz, geliştiricilerin herhangi bir Python kütüphanesini içe aktarmasına ve Mojo fonksiyonlarıyla entegre etmesine de olanak tanır. CPython yorumlayıcısından yararlanarak, şu anda mevcut tüm Python modüllerini sorunsuz şekilde destekler.

Aşağıdaki örnekte matplotlib.pyplot kütüphanesini içe aktarıp bir çizgi grafiğini görselleştirdik. İleri seviye örnekler için Mojo’da Mandelbrot’a göz atın.

from PythonInterface import Python

let plt = Python.import_module("matplotlib.pyplot")

x = [1, 2, 3, 4]
y = [30, 20, 50, 60]
plt.plot(x, y)
plt.show()

Mojo çıktı grafiği

Python’un AI/ML için en popüler dil olduğu yaygın biçimde kabul görmektedir. Python ile Makine Öğrenimi Bilimcisi kariyer yoluna katılmak, makine öğrenimi bilimcisi olarak iş bulmak için gerekli Python becerilerini kazandıracaktır.

Mojo Lang ile Programlama

Mojo, tıpkı TypeScript’in JavaScript’in üstkümesi olması gibi Python’un bir üstkümestir. Yeni anahtar sözcükler ve fonksiyonların ötesinde, herhangi bir Python programcısı onu anlayabilir ve onunla programlar geliştirebilir.

Bu bölümde Mojo’yu performanslı ve güvenli kılan programlama özelliklerine bakacağız.

Düşük seviyeli programlama

Mojo, MLIR (Multi-Level Intermediate Representation) adlı genişletilebilir bir ara gösterim biçimi üzerinden düşük seviyeli ilkelere erişim sağlayan yüksek seviyeli bir programlama dilidir. Bu sayede Mojo programcıları, güçlü derleyici optimizasyonlarından yararlanırken sıfır maliyetli soyutlamalar uygulayabilir.

Döşeme (tiling) optimizasyonu ve otomatik ayarlama

Mojo, hesaplamaları hızlı önbelleğe sığan daha küçük parçalara bölerek önbellek yerelliğini ve bellek erişim örüntülerini iyileştiren yerleşik bir döşeme optimizasyon aracına sahiptir.

Mojo’daki Autotune modülü, uyarlamalı derleme için arabirimler sunar. Kodunuzu otomatik ayarlayarak hedef donanımınız için en iyi parametreleri bulmanıza yardımcı olur.

Sahiplik ve ödünç alma

Mojo, bellek yönetimi için sahiplik ve ödünç alma sistemini kullanır; bu da çöp toplayıcıya olan ihtiyacı ortadan kaldırır ve tutarlı çalışma zamanı performansı sağlar. Mojo derleyicisi, değişken ömürlerini statik analizle inceleyerek veriyi kullanılmadığı anda serbest bırakır.

Elle bellek yönetimi

Mojo ayrıca C++ ve Rust’a benzer şekilde işaretçiler kullanarak manuel bir yönetim sistemi de sunar.

Mojo’da Matris Çarpımı

Matris çarpımı örneğinde, Python kodunu Mojo’ya aktarmanın 17,5 kat performans artışı sağladığını gözlemledik.

Python uygulamasına türler ekleyerek performans daha da artırıldı; tam 1866,8 kat.

Ayrıca, Vektörleştirme, Paralelleştirme, Döşeme ve Otomatik Ayarlama gibi teknikler kullanılarak 14050,5 kat hız kazanımı elde edildi. Bu etkileyici. Julia ve Rust bile bu düzeyde optimizasyon sunamıyor.

Mojo Lang Kod Örneği

Bu araba örneğinde, Mojo sözdizimiyle bir CAR sınıfı oluşturacağız.

  1. struct kullanarak bir CAR sınıfı oluşturacağız.
  2. var kullanarak değiştirilebilir değişken başlatacağız.
  3. Değişken türlerini belirleyeceğiz. ‘speed’ Float32 ve ‘model’ String olacak. String yerleşik bir tür değildir, bu yüzden onu içe aktarmamız gerekir.
  4. Python’a benzer iki başlatma (initialization) fonksiyonu oluşturacağız, ancak fn ile. Biri yalnızca araç hızıyla, diğeri araç hızı ve araç modeliyle.
  5. Ardından 300 hızla CAR kullanarak bir nesne oluşturun.
  6. Arabanın modelini yazdırın.
from String import String

struct CAR:
    var speed: Float32
    var model: String

    fn __init__(inout self, x: Float32):
        """Car with only speed"""
        self.speed = x
        self.model = 'Base'

    fn __init__(inout self, r: Float32, i: String):
        """Car with Speed and model"""
        self.speed = r
        self.model = i

my_car=CAR(300)
print(my_car.model)
Base

Görüldüğü gibi, Mojo’nun programlama tarzı ve işlevselliği Python’a benzerdir. Python’a bir uzantı olarak hizmet ederek performansını ve bellek yönetimini güçlendirir. Mojo ile modelinizi hızla eğitebilir, CPU’larla bile daha hızlı çıkarım elde edebilir, devasa veri kümelerini saniyeler içinde analiz edebilir ve gerçek zamanlı simülasyon yapabilirsiniz.

Tüm kod örneklerine Modular Docs’tan bakabilir ve oyun alanındaki Jupyter defterinde çalıştırabilirsiniz.

Mojo Python’un Yerini Alacak mı?

Şu anda Mojo’nun genel amaçlı bir programlama dili olarak potansiyelini belirlemek zor; çünkü erken geliştirme aşamasında ve gerekli özelliklerin bir kısmı eksik. Ancak, yüksek performansın kritik olduğu makine öğrenimi ve yapay zeka uygulamalarında Python’u geride bırakma ihtimali olabilir.

Yine de, yakın zamanda Mojo’nun veri biliminde ve diğer yazılım geliştirme alanlarında Python’un lider rolünün yerini tamamen alması pek olası değildir.

Mojo özellikle makine öğrenimi uygulamaları için tasarlanmıştır; web arka uçları, süreç otomasyonu veya web tasarımı gibi diğer alanlar için tasarlanmamıştır. Geliştirici gelecekte yeteneklerini genişletebilir, ancak Mojo’nun mevcut odağı makine öğrenimi uygulamaları için optimizasyondur.

Ayrıca, Mojo’nun Python’a kıyasla sınırlı sayıda modül ve kütüphaneye sahip olduğunu belirtmek gerekir; Python ise yapay zeka ve veri bilimi için sürekli yeni ve gelişmiş araçlar üreten büyük bir geliştirici topluluğunun avantajına sahiptir. Mojo’nun Python’un olgunluk düzeyine ulaşması yıllar alabilir.

Üretken yapay zeka modellerinin nasıl geliştirildiğini ve gelecekte toplumu nasıl etkileyeceğini öğrenmek için DataCamp’in Generative AI Concepts kursunu alın.

Sonuç

Özetle, Mojo AI/ML için uyarlanmış, hızlı ve Python ile uyumlu bir dil olarak umut vaat etse de yakın gelecekte Python’un yerini tamamen alması muhtemel görünmüyor. Python, devasa bir ekosistem, topluluk ve veri bilimi ile ML’de köklü bir konumdan yararlanıyor. En iyi ihtimalle Mojo, hızın kritik olduğu yerlerde kullanılan, Python’a tamamlayıcı bir dil hâline gelebilir.

Bu eğitimde, kod örnekleriyle Mojo programlama dilinin özelliklerini ve sözdizimini inceledik. Ayrıca performans, sözdizimi, işlevsellik ve uyumluluk gibi unsurları dikkate alarak Python ile karşılaştırma yaptık. Yapay Zeka ve Makine Öğreniminin temellerinde uzmanlaşmak isteyenler için Python ile Makine Öğrenimi Temelleri yoluna kaydolmanızı öneririz.

Abid Ali Awan

Yazar

Abid Ali Awan

Sertifikalı bir veri bilimcisi olarak, yenilikçi makine öğrenimi uygulamaları oluşturmak için en son teknolojileri kullanmaya büyük ilgi duyuyorum. Konuşma tanıma, veri analizi ve raporlama, MLOps, konuşma yapay zekası ve NLP alanlarında güçlü bir geçmişe sahip olarak, gerçek bir etki yaratabilecek akıllı sistemler geliştirme becerilerimi geliştirdim. Teknik uzmanlığımın yanı sıra, karmaşık kavramları açık ve özlü bir dille ifade etme yeteneğine sahip, becerikli bir iletişimciyim. Sonuç olarak, veri bilimi konusunda aranan bir blog yazarı oldum ve giderek büyüyen veri profesyonelleri topluluğuyla görüşlerimi ve deneyimlerimi paylaşıyorum. Şu anda, içerik oluşturma ve düzenlemeye odaklanıyorum. Büyük dil modelleriyle çalışarak, hem işletmelerin hem de bireylerin verilerinden en iyi şekilde yararlanmalarına yardımcı olabilecek güçlü ve ilgi çekici içerikler geliştiriyorum.

Konular

İlgili