2 puan yazan GN⁺ 2025-07-11 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Flix, Aarhus University ve açık kaynak topluluğu tarafından geliştirilen etki odaklı bir dil olup fonksiyonel, emperatif ve mantıksal programlamayı tek bir dilde birleştirir
  • Merkezinde, yan etkileri tür seviyesinde ele alan bir etki sistemi bulunur; saflık takibi, kullanıcı tanımlı etkiler, handler'lar ve çoklu yeniden başlatmalarla modülerliği ve akıl yürütülebilirliği artırır
  • Dilin yüzeyi; cebirsel veri tipleri, desen eşleme, genişletilebilir kayıtlar, trait'ler, higher-kinded type'lar, ilişkili tipler ve etkiler, yapısal eşzamanlılık, Java birlikte çalışabilirliği ve yerleşik Datalog dahil olmak üzere oldukça geniştir
  • Standart kütüphane 3.100'den fazla fonksiyon sunar ve Maven üzerinden Java ekosistemine de erişebildiği için yalnızca araştırma dili olarak kalmayan bir kullanım alanını hedefler
  • Derleyici JVM bytecode'unu hedefler ve paralel, artımlı bir yapıya sahiptir; 24 çekirdekli bir makinede 5x–7x hız artışı ile Apple M2 Pro/OpenJDK 21 temelinde 60,159 lines/sec işleme hızını öne çıkarır

Flix'in dil yönelimi

  • Flix, ilke temelli etki odaklı bir dil olarak fonksiyonel, emperatif ve mantıksal programlamayı birleştirir
  • Geliştiricileri Aarhus University ve açık kaynak katkıcılar topluluğudur
  • Etki sistemi, yan etkileri açıkça modelleyerek modülerlik ve program üzerinde akıl yürütmeye yardımcı olan statik tipli dilin temel eksenlerinden biridir
  • Kullanıcı tanımlı etkiler ve handler'lar sayesinde programcılar denetim yapılarını doğrudan kendileri uygulayabilir
  • Flix, etki odaklı diller arasında olgun bir uygulama, geniş bir standart kütüphane, ayrıntılı dokümantasyon ve araç desteğini güçlü yönleri olarak öne çıkarır

Tipler, saflık ve etki sistemi

  • Flix, fonksiyonel programlamanın temel öğeleri olan cebirsel veri tipleri ve desen eşlemeyi destekler
  • Tuple ve kayıtları yerleşik olarak destekler; kayıtlar yapısal tipleme kullanır ve genişletilebilir yapıdadır
  • Derleyici, programdaki tüm ifadelerin saflığını hassas biçimde takip eder
    • Bir ifade safsa, yan etkisi olmadığı ve referans şeffaflığı sağladığı garanti edilir
  • Higher-order function'larda da etki çok biçimliliği sayesinde saflık izlenir
    • Örneğin List.map'in saflığı, argüman olarak aldığı f fonksiyonunun saflığına bağlıdır
  • Cebirsel etkiler, kullanıcı tanımlı etkileri ve handler'ları mümkün kılar
    • Flix özellikle multi-shot resumptions desteği sunar
    • Etki handler'ları, program üzerinde akıl yürütmeyi, modülerliği ve test edilebilirliği artırmak için kullanılır

Bölge tabanlı değişim ve saflığın yansıtılması

  • Flix, bölge tabanlı yerel değişimi destekler; böylece içeride değiştirilebilir durum ve yıkıcı işlemler kullanılırken dışarıdan saf fonksiyon gibi görünen yapılar kurulabilir
  • Bu, değiştirilebilir veriyle yazılması daha doğal olan fonksiyonlar ya da sıralama algoritmaları gibi değiştirilebilir veri yapılarının daha verimli olduğu durumlar için uygundur
  • Saflığın yansıtılması, higher-order function'ların fonksiyon argümanının saflığını inceleyip buna göre davranışını değiştirdiği bir metaprogramlama yapısıdır
    • DelayList.map, argüman fonksiyonun saflığına göre anında değerlendirme ile tembel değerlendirme arasında geçiş yapar
    • Kütüphane içinde tembel değerlendirme ya da paralel değerlendirme seçmeli olarak kullanılsa bile istemci açısından anlam değişmeyebilir

Paralellik, eşzamanlılık ve soyutlama

  • Flix, saf kodun paralel değerlendirilmesini kolaylaştırır ve par yapısıyla List.map'in paralel bir uygulaması yazılabilir
  • par yapısı içeride hafif VirtualThread kullanır
  • Yapısal eşzamanlılığı destekler; belirli bir bölge içinde oluşturulan thread'ler o bölgenin yaşam döngüsünün dışına çıkıp yaşamaya devam edemez
    • Örnekte rc adlı yeni bir bölge içinde iki thread oluşturulur
    • Denetim akışı, iki thread de sona ermeden o bölgeden çıkmaz
  • Ortak işlemleri destekleyen tip soyutlamalarında trait kullanılır
    • Eq trait'i eşitlik kavramını ifade eder ve standart kütüphanenin genelinde kullanılır
  • Higher-kinded type'lar ile type constructor'lar soyutlanabilir
    • Option ve List her ikisi de Foldable uygular
    • Standart kütüphane Monoid, Functor, Foldable gibi ortak trait'ler içerir

İlişkili tipler, ilişkili etkiler ve for-yield

  • Flix, örnek imzasındaki tiplerin örnek tipine bağlı olabilmesini sağlayan ilişkili tipleri destekler
    • Coll trait'i örneğinde ilişkili tip Elm, her koleksiyon örneğinin eleman tipini tanımlayabilmesini sağlar
  • İlişkili etkiler, trait üyelerinin etkisinin örnek tipine bağlı olmasını sağlar
    • Saf işlemler ile etkili işlemleri, değiştirilebilir veri yapıları ile değiştirilemez veri yapılarını birlikte soyutlamayı kolaylaştırır
    • Coll trait'ine ilişkili etki Aef eklendiğinde değiştirilebilir koleksiyon örnekleri de eklenebilir
  • forM-yield, Scala'daki for-comprehension ve Haskell'deki do gösterimine benzer monadik bir yapıdır
    • Monad trait'inin sunduğu point ve flatMap için sözdizimsel şekerdir
  • forA, Applicative trait'i tabanlı applicative bir ifadedir
    • Validation[e, t] veri tipini kullanan hata işleme kodlarını daha kolay yazmayı sağlayan bir yapıdır

Java birlikte çalışabilirliği ve Datalog

  • Flix, Java Standard Library ve Java ekosistemindeki kodları yeniden kullanmayı sağlayan Java birlikte çalışabilirliği sunar
    • Buna Maven üzerinden ekosisteme erişim de dahildir
    • Nesne oluşturma, metot çağırma, istisnalar ve sınıf/arayüz genişletme desteklenir
  • Yerleşik Datalog desteği, Flix'in ayırt edici özelliklerinden biridir
    • Datalog, grafik erişilebilirliği problemleri dahil çeşitli fixed-point problemlerini kısa ve öz biçimde ifade edebilir
  • Datalog kısıtları birinci sınıf değerlerdir
    • Fonksiyonlara geçirilebilir veya fonksiyonlardan döndürülebilir
    • Veri yapılarında saklanabilir
    • Diğer Datalog kısıtlarıyla birleştirilip çözülebilir
    • Bu sayede Datalog program aileleri ifade edilebilir
  • Flix, lattice anlambilimiyle zenginleştirilmiş Datalog kısıtlarını da destekler
    • Bunun için parça ve alt bileşenlerin teslim tarihlerini hesaplayan bir örnek verilir
    • Bir otomobil şasi ve motora bağlıdır; her bileşenin montajı beklendikten sonra otomobil monte edilebilir
    • Alt bileşenler de başka alt bileşenlere bağlı olabildiğinden problem özyinelemelidir
  • Lattice anlambilimi içeren Datalog kısıtları Flix'in ileri düzey özelliklerinden biridir ve lattice teorisi ile fixed-point konusunda arka plan bilgisi gerektirir

Standart kütüphane ve özellik listesi

  • Flix, 3.100'den fazla fonksiyon sunan bir standart kütüphane içerir
    • List modülü 100'den fazla fonksiyon sağlar
    • Foldable trait'i 47'den fazla fonksiyon sağlar
    • Tüm kütüphane api.flix.dev üzerinden incelenebilir
  • Özellik listesi şunları içerir
    • Cebirsel veri tipleri, desen eşleme, birinci sınıf fonksiyonlar
    • Genişletilebilir kayıtlar, parametreli çok biçimlilik
    • Trait'ler, higher-kinded type'lar, ilişkili tipler ve etkiler
    • Etki çok biçimliliği ve alt etkiler, saflığın yansıtılması
    • CSP tarzı eşzamanlılık, tamponlu ve tamponsuz kanallar
    • Birinci sınıf Datalog kısıtları, Java birlikte çalışabilirliği
    • Unboxed ilkel tipler, anahtar sözcük tabanlı sözdizimi
    • forM, forA, ifade hole'ları
    • JVM bytecode derleme, tam tail-call elimination
    • Esnek ve paralel derleyici mimarisi, insan tarafından kolay okunabilen hatalar

Derleyici mimarisi ve performans

  • Flix derleyicisi esnek, artımlı ve paralel bir mimariye sahiptir
  • Tüm derleyici aşamaları paraleldir ve 24 çekirdekli makinelerde her aşamanın hız artışından yararlanılabilir
  • Çok çekirdekli makinelerde 5x–7x hız artışı mümkündür
  • Aynı derleyici örneğinde daha önce derlenmiş kod yeniden derlendiğinde, artımlı derleme ile kayda değer hız kazanımları elde edilebilir
  • Apple M2 Pro 10 çekirdekli CPU ve OpenJDK 21 temel alınarak verilen performans değerleri şöyledir
    • Toplam derleyici verimi: 60,159 lines/sec
    • Yalnızca frontend verimi: 140,382 lines/sec
    • Yeniden üretim komutları: java -jar flix.jar Xperf --n 21 ve java -jar flix.jar Xperf --frontend --n 21
  • Bu performans, tip ve etki çıkarımı, monomorfizasyon ve tüm program optimizasyonu gibi maliyetli dil özellikleri desteklenirken elde edilmiştir
  • Derleyici performansı esas olarak CPU performansı ve bellek bant genişliği tarafından belirlenir

Visual Studio Code desteği ve araç entegrasyonu

  • Flix derleyicisi, geliştirme ortamı sağlamak için Visual Studio Code ile entegre çalışır
  • VSCode eklentisi doğrudan gerçek Flix derleyicisini kullandığı için eklenti ile derleyici arasında 1:1 eşleşme vardır
    • VSCode hata bildirmiyorsa hata yoktur
    • Hata yokken VSCode sahte hata bildirmez
  • VSCode eklentisi şu özellikleri destekler
    • Anlamsal sözdizimi vurgulama
    • Satır içi derleyici hata tanıları
    • Yazarken otomatik tamamlama, bağlama duyarlı otomatik tamamlama, trait örneği otomatik tamamlama, tipe dayalı hole tamamlama
    • Snippet'ler ve inlay hint'ler
    • İfadelerin tipini ve etkisini gösteren hover
    • Fonksiyonlara, yerel değişkenlere ve enum tanımlarına gitme
    • Fonksiyon, yerel değişken ve enum başvurularını bulma ile trait implementasyonlarını bulma
    • Belge ve çalışma alanı sembol listeleri
    • Yerel değişken ve fonksiyon adlarını yeniden adlandırma
    • Editörden main çalıştırma ve test çalıştırma
  • Flix, birçok aracı doğrudan derleyicinin içine yerleşik olarak sunar
    • OCaml; LSP için ocaml-lsp, REPL için utop, build aracı olarak dune, paket yöneticisi olarak opam kullanır
    • Haskell; LSP için HLS, REPL için ghci, build aracı ve paket yöneticisi olarak cabal, stack, paket deposu olarak Hackage kullanır
    • Flix ise derleyici, LSP, REPL, build aracı ve paket yöneticisini tek başına flix olarak sunar; paket deposu GitHub'dır

Geliştirme durumu, JVM hedefi ve proje ölçeği

  • Flix, Danimarka'daki Aarhus University'de programlama dilleri araştırmacıları tarafından geliştirilip sürdürülmektedir
  • İş birliği yapılan kurumlar Kanada'dan University of Waterloo, Almanya'dan University of Tubingen ve Danimarka'dan Copenhagen University olarak belirtilir
  • Dünya çapındaki açık kaynak katkıcı topluluğunun geliştirmeye katılımı artmaktadır ve katkılar teşvik edilmektedir
  • Proje istatistikleri şöyledir
    • Birleştirilen Pull Request sayısı: 4.900'den fazla
    • Çözülen issue sayısı: 3.100'den fazla
    • Katkıcı sayısı: 70'ten fazla
    • Derleyici kod tabanı: 272.000'den fazla satır
  • Flix, JVM'i hedefler
    • JVM için OpenJDK, J9, Azul, Graal gibi doğrulanmış açık kaynak ve ticari uygulamalar vardır
    • Mac, Linux ve Windows'ta kullanılabilir
    • Modern JVM'ler çeşitli güncel garbage collector'lar sunar
    • Java 21'deki hafif thread'ler dahil, eşzamanlılık ve paralellik desteği güçlüdür
    • Hata ayıklayıcı ve profiler dahil araç desteği vardır
    • Maven entegrasyonu sayesinde Java platformunun zengin paket ekosistemine erişilebilir
  • Toplam fonlama 1,1 milyon avro düzeyindedir ve bu, projenin sürekliliğini ve bağımsızlığını güvence altına almaya yardımcı olur

Henüz yorum yok.

Henüz yorum yok.