- 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ığıffonksiyonunun saflığına bağlıdır
- Örneğin
- 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
paryapısıylaList.map'in paralel bir uygulaması yazılabilir paryapı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
rcadlı yeni bir bölge içinde iki thread oluşturulur - Denetim akışı, iki thread de sona ermeden o bölgeden çıkmaz
- Örnekte
- Ortak işlemleri destekleyen tip soyutlamalarında trait kullanılır
Eqtrait'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
OptionveListher ikisi deFoldableuygular- Standart kütüphane
Monoid,Functor,Foldablegibi 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
Colltrait'i örneğinde ilişkili tipElm, 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
Colltrait'ine ilişkili etkiAefeklendiğinde değiştirilebilir koleksiyon örnekleri de eklenebilir
forM-yield, Scala'dakifor-comprehension ve Haskell'dekidogösterimine benzer monadik bir yapıdırMonadtrait'inin sunduğupointveflatMapiçin sözdizimsel şekerdir
forA,Applicativetrait'i tabanlı applicative bir ifadedirValidation[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
Listmodülü 100'den fazla fonksiyon sağlarFoldabletrait'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 21vejava -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çinutop, build aracı olarakdune, paket yöneticisi olarakopamkullanır - Haskell; LSP için
HLS, REPL içinghci, build aracı ve paket yöneticisi olarakcabal,stack, paket deposu olarakHackagekullanır - Flix ise derleyici, LSP, REPL, build aracı ve paket yöneticisini tek başına
flixolarak sunar; paket deposu GitHub'dır
- OCaml; LSP için
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.