2 puan yazan GN⁺ 2025-07-11 | 1 yorum | WhatsApp'ta paylaş
  • Flix, fonksiyonel programlama ile etki odaklı modeli birleştiren yenilikçi bir dildir
  • Mantıksal kuralları ve veri bağımlılıklarını modellemek kolaydır; bildirimsel bilgi ifadesi güçlü yanıdır
  • Karmaşık bağımlılık ilişkileri ve süreç akışları kodla kısa ve öz biçimde yazılabilir
  • Bu yaklaşım, algoritma tasarımı ve çıkarım çalışmalarında verimlilik sağlar
  • Sorgu özellikleri sayesinde bilgi tabanlı veriler kolayca keşfedilebilir

Flix diline genel bakış

  • Flix, etki odaklı programlama paradigmasını benimseyen yeni bir fonksiyonel dildir
  • Programcılar prosedürel kod yerine, mantıksal ilişkiler ve kurallar merkezinde sistemleri tanımlayabilir
  • Mantıksal kurallar (#{} içinde tanımlanır) ile bileşenler, bağımlılıklar, montaj süresi ve teslim tarihleri gibi karmaşık üretim senaryoları kısa ve öz şekilde ifade edilebilir

Bildirimsel kurallar ve veri modelleme

  • Örnek kodda PartDepends, AssemblyTime, DeliveryDate, ReadyDate gibi olgular ve kurallar kullanılır
    • PartDepends("Car", "Chassis") gibi ifadelerle ürünler arasındaki bağımlılık ilişkileri tanımlanır
    • AssemblyTime("Engine", 2) gibi ifadelerle parça bazında montaj süreleri belirlenir
    • DeliveryDate("Piston"; 1) gibi ifadelerle parça teslim tarihleri de belirtilir
  • ReadyDate adlı mantıksal kural sayesinde, teslim tarihi tanımlı parçaların veya montajla oluşan parçaların nihai hazır olma tarihi hesaplanabilir
  • Böylece tek tek parçaların tedarik ve montaj döngüleri basit biçimde çıkarımlanabilir

Etki odaklı çıkarım ve sorgular

  • Flix'in mantıksal kural motoru, etki odaklı yaklaşımı ve referans şeffaflığını birleştirerek sezgisel ve daha az hataya açık program tasarımını teşvik eder
  • Sorgu sözdizimi kullanılarak ReadyDate kapsamındaki tüm parçaların hazır olma tarihleri kolayca elde edilebilir
  • Bu yaklaşım, üretim, tedarik zinciri yönetimi ve çıkarım tabanlı otomasyon gibi çeşitli alanlarda uygulanabilir

Genel değerlendirme ve avantajlar

  • Flix, etkiler (Effects) ile mantıksal kural tabanlı çıkarımı birleştirerek karmaşık sistemlerdeki bileşenler ve süreçler arasındaki ilişkileri kısa ve öz biçimde modeller
  • Mevcut dillere kıyasla mantıksal açıklık ve kod sadeliği açısından ayırt edici avantajlar sunar
  • Bilgi grafikleri, workflow engine'ler ve veri çıkarımı gibi çeşitli modern yazılım problemleri için uygun bir çözüm sağlayabilir

1 yorum

 
GN⁺ 2025-07-11
Hacker News görüşleri
  • Bu dilin derinliği ve kapsamı beni gerçekten çok etkiledi
    cebirsel veri tipleri, mantık programlama, değişkenlik gibi temel özelliklerin hepsi en baştan dahil edilmiş
    karşılaştırma tablosuna bakınca en çok hoşuma giden şey, tek bir çalıştırılabilir dosyanın paket yöneticisi, LSP ve derleyici olarak da görev yapması oldu
    Haskell tarafında ise LSP'nin ghc ve cabal dosyaları arasında epey şeyi yeniden uygulaması gerekiyordu, bir de stack kullanılıyordu; dolayısıyla paket yöneticisinin resmîliği biraz belirsizdi
    amacım Haskell'i eleştirmek değil, gerçekten harika bir dil
    ama en iyi özelliklerinin biraz gizli kalmış olması üzücü
    Flix'in JVM üzerinde Java vb. ile ne kadar rahat entegre olduğunu merak ediyorum
    JVM derleyicileri tip bilgisinin çoğunu sildiği için, Flix'in regions kavramının buyurgan etkileşimi birinci sınıf vatandaş olarak desteklemesi olumlu
    JVM kullanınca milyarlarca dolar değerinde, yüksek kaliteli standart kütüphaneleri kolayca kullanabilmek çok büyük avantaj
    bu yüzden JVM ya da .net core'un projelerin %90'ından fazlası için en mantıklı seçim olduğunu düşünüyorum
    tek gerçek karşılaştırma adayı dil F# gibi görünüyor
    Flix ile JVM arasındaki birlikte çalışabilirlikteki sınırlamaları özetleyen bir belge olsa gerçekten harika olurdu
    bu arada, ilgili bilgi burada var
    temelde Flix/Java değerleri boxing/unboxing sürecinden geçiyor
    ayrıca Record da birinci sınıf vatandaş

    • Paket yöneticisi, LSP ve derleyicinin tek bir çalıştırılabilir dosya olması hoşuna gidiyorsa Unison'ı da muhtemelen çok seversin

    • Mantık programlama ve datalog kısmı biraz sonradan eklenmiş gibi geliyor
      diğer özelliklerin kod tabanının tip güvenliğini gerçekten artırdığı açık, ama mantık programlama oldukça niş bir özellik; bu yüzden belki dilden ayrı olması daha iyi olurdu diye düşünüyorum

    • JVM derleyicilerinin tüm tip bilgisini sildiği tamamen doğru değil (anonim sınıflar tip parametrelerini koruyor)
      çeşitli dolambaçlı yöntemler de var
      ve aslında derleyici açısından bu büyük bir sorun değil
      tip yapıcıları uygulanmış sınıf adlarını rastgeleleştirip normal sınıflar gibi üretmek yeterli

    • F# (henüz) type class desteklemediği için monad tabanlı programlamada birçok kısıt var
      eğer F#, Haskell tarzı monad aşamasını atlayıp doğrudan cebirsel etkilere geçerse, bunun F# felsefesine daha uygun olacağını düşünüyorum

    • StringBuilder kısmı biraz hayal kırıklığı yarattı
      bu açıdan Java tarafına biraz fazla eğilmiş gibi, o yüzden tam emin olamadım
      bunun dışındaki kısımlar ilk bakışta iyi görünüyor

  • Dil anlambilimi açısından bakınca, çok biçimli kayıtların genişletme/kısıtlama anlambiliminin Leijen'in scoped label yaklaşımını izlediği anlaşılıyor (makale bağlantısı)
    örneğin elimizde r1 = { color = "yellow" } şeklinde bir kayıt varsa, bunu r2 = { +color = "red" | r1 } ile genişletebiliriz
    r2#color sonucu "red" olur ve sonra "color" alanını kaldırırsak r3 = { -color | r2 } elde ederiz
    r3#color ise yeniden özgün değer olan "yellow" döndürür
    bence bu yaklaşım, önceki tarzlara kıyasla çok daha makul; önceki yaklaşımlar aynı label alanının iki kez eklenmesini engellemek için aşırı karmaşık tip sistemleri kullanıyordu

  • Aarhus'un (özellikle üniversite/teknoloji merkezi olarak) programlama dili araştırmalarında neden bu kadar güçlü bir etkiye sahip olduğunu merak ediyorum
    C++, C#/Typescript, Dart gibi şeylerin hepsinin Danimarka'daki bu küçük bölgeyle güçlü bağları var
    Delft ya da INRIA gibi yerler gibi klasik bir Ivy League ya da Oxbridge seçkinliği de yok
    onu bu kadar özel yapan ne acaba? sudan mı kaynaklanıyor, yoksa başka bir sebep mi var diye merak ettim

    • Bir noktayı düzeltmek gerekirse, C#'ı Anders Hejlsberg yaptı ve kendisi DTU'da (Kopenhag) okudu
      Turbo Pascal'ı da o yaptı, ayrıca Borland da Danimarkalılar tarafından kurulmuş bir şirketti
      genel olarak Danimarka programlama dili teorisinde güçlü
      örneğin statik program analizi alanındaki standart lisansüstü ders kitabı da (yazarlar Nielson & Nielson) Danimarkalı
      Mads Tofte, Standard ML'ye büyük katkılar yaptı
      Aarhus, Ivy League ya da Oxbridge seviyesinde olmasa da çok iyi bir üniversite
      Avrupa'da bu şekilde adı daha az bilinen ama eğitim ve araştırma kalitesi çok yüksek onlarca üniversite var

    • Aarhus'un mantık, tip teorisi, işlevsel/nesne yönelimli diller konusunda güçlü bir geleneği var
      bu alanlarda etkili olmuş birçok araştırmacı Aarhus çıkışlı
      ayrıca programlama dili araştırmalarında küresel ölçekte ciddi bir ABD merkezlilik hissediliyor
      Aarhus gibi kurumlar pazarlama ya da öz tanıtım konusunda belirgin biçimde isteksiz; daha çok iyi araştırmaya odaklanıyorlar
      bu onları özel olarak daha iyi ya da daha kötü yapmıyor ama küresel ilgi görmelerini zorlaştırıyor

  • Flix, ML ailesi dilleri arasında en özenli tasarlanmış olanlardan biri olarak etkileyiciliğini sürdürüyor
    işlevsel, buyurgan ve mantıksal paradigmaların birleşimiyle birlikte çok biçimli tip ve etki sistemi ile Datalog kısıtlarını da birinci sınıf vatandaş olarak desteklemesi gerçekten benzersiz
    saf/saf olmayan kodu tip seviyesinde katı biçimde ayırması, Monad yerine etkileri çıkarsamak için daha kolay bir alternatif gibi durduğu için tazeleyici
    tek dil, bayrak yok felsefesi ve yalnızca derleme zamanı hatalarını hedeflemesi de basit ve öngörülebilir olduğu için hoş
    JVM'in kendisi yerel olarak tail recursion elimination desteklememesine rağmen Flix'in tam tail-call elimination uygulamış olması dikkat çekici bir teknik başarı
    Flix'i gerçek üretim ortamında ya da araştırmada kullanan kişilerin deneyimlerini merak ediyorum
    özellikle mantık programlama ya da eşzamanlılık alanlarında kullanırken closed-world assumption veya exception desteğinin olmaması gibi konularda yaşanan zorlukları, ayrıca Prolog gibi diğer mantık dilleriyle Datalog entegrasyonunun farklarını duymak isterim

  • Bir zamanlar Flix'e bakmıştım ve çok ilginç bulduğum için hatta Java programcıları için Flix başlıklı bir yazı bile yazmıştım
    şimdi biraz eskidiği için güncellenmesi gerekiyor gerçi...
    ilgilenen olursa buradan bakabilir

    • Blog yazısı gerçekten harika
      izin verirseniz bunu Flix'in resmî blog yazıları listesine (bağlantı) eklemek güzel olurdu
      o yazıdan bu yana Flix dili çok gelişti
      özellikle etki sistemi ciddi biçimde genişletildi, Java ile birlikte çalışabilirlik iyileştirildi ve sözdizimi güncellendi

    • Blog tam bir hazine sandığı gibi görünüyor
      uzun zamandır kafamı kurcalayan düşüncelerin daha rafine bir versiyonunu toparlamış gibi hissettirdi
      hepsini okuyacak olmak heyecan verici

  • HKT desteği de var, bu harika
    ama typeclass hakkında bir açıklama göremedim, o yüzden merak ettim
    eğer typeclass ve Scala tarzı makrolar da desteklense, kendi yazdığım kütüphaneleri (distage, izumi-reflect, BIO) Flix'e taşımayı denemek isterdim; hatta Scala'dan Flix'e geçmeyi ciddi ciddi düşünürdüm
    sonradan typeclass'ların burada trait olarak adlandırıldığını fark ettim
    makro durumu nasıl, onu da merak ediyorum
    ayrıca Flix'in açık isim tabanlı kalıtımı da desteklememesi biraz üzücü
    Scala trait'lerinin en zararsız biçimine bile izin verilmiyor yani
    bence typeclass'lar interface'in yerini tutamaz; o soyutlama olmazsa birçok yararlı şeyi ya hiç yapamazsınız ya da kod çok çirkinleşir

    • Flix, typeclass'ları (burada trait deniyor) HKT, associated type ve associated effect ile birlikte destekliyor
      trait'ler fonksiyonlar için varsayılan uygulamalar da sağlayabiliyor ama instance tarafında override edilebiliyor
      Flix'te inheritance hiç yok
      trait'ler yalnızca derleme zamanında kullanılıyor ve monomorphization sayesinde çalışma zamanı ek yükü oluşturmuyor
      Flix inliner'ı trait içlerini de optimize edip closure'ları agresif şekilde kaldırıyor
      örneğin yüksek mertebeden fonksiyonlar ya da pipeline'lar bytecode seviyesinde sıradan döngülere dönüşüyor ve closure allocation ile dolaylı başvurular tamamen ortadan kalkıyor
      Flix henüz makro desteklemiyor
      sanırım başka dillerdeki (ve kötüye kullanım içeren) deneyimler yüzünden bunu eklemekten çekiniyorlar
      yeni kütüphane yazarları arıyorlar; ilgileniyorsan Gitter kanalına uğramanı isterlerdi
  • Flix resmî belgelerindeki Flix'te desteklenmeyen özellikler bölümünde
    No Code Before Main diye bir madde var
    ama açıklamanın kendisi aslında Flix, main'den önce hiçbir kod çalıştırmaz ve static initializer gibi şeyler hiç yoktur diyor
    bence özellik adı Code Before Main olmalıydı; bu daha doğru olurdu

  • Flix'te fonksiyonun saf olduğunu neden mutlaka açıkça işaretlemek gerektiğini merak ediyorum
    neredeyse her durumda statik analizle yeterince çıkarım yapılabilir gibi görünüyor; neden böyle olduğunu öğrenmek isterim

    • Bildiğim kadarıyla, bir fonksiyonu saf olarak işaretlersen derleyici bunun gerçekten öyle olduğunu garanti ediyor

    • Flix, programdaki tüm ifadelerin saflığını doğru biçimde takip eder cümlesine ve saf/saf olmayan işaretleri olmayan fonksiyon tanımı örneklerine bakınca
      çoğu durumda derleyicinin saflığı otomatik olarak çıkarabildiği anlaşılıyor
      bu yüzden saf/saf olmayan işaretlemenin isteğe bağlı olabileceği izlenimini veriyor

  • Flix FAQ'su (bağlantı) normal başlıyor ama giderek daha eğlenceli hale geliyor
    birkaç komik örnek:

    • S: 0'a bölünce sonuç gerçekten 0 mı oluyor?<br> C: Evet. Ama sadece bu kısma takılmak, uzay gemisindeki koltuk rengini dert etmeye benziyor
    • S: Bu site JavaScript gerektirir<br> C: JavaScript kullanımını eleştiren insanlar: [1],[2],[3],[4],[5], fiilen HTML'e dönüştürmeye yardım etmeyi teklif eden insanlar: 0
    • S: Sevdiğim Y özelliği yerine X özelliği konmuş diye hayal kırıklığı yaşıyorum<br> C: Üzgünüz
    • S: Şimdiye kadar gördüğüm işlevsel diller arasında en kötü sözdizimi. Noktalı virgül, süslü parantez ve sembol karmaşası bir araya gelmiş. Sanki Scala, Java ve Haskell Çernobil'in ortasında tek gecelik ilişki yaşamış gibi<br> C: Aslında bu başlı başına etkileyici bir başarı değil mi?
  • Bu dille uyumlu kod ajanlarının iyi çalışıp çalışmadığını, yoksa gerçekten insanın kendi beynini kullanması gerekip gerekmediğini merak ediyorum
    şaka yollu söylüyorum ama dil gerçekten havalı göründüğü için biraz üzücü
    LLM'lerin yeni dil benimsenmesini aslında zorlaştıracak olmasından endişe ediyorum; bunun nasıl aşılacağını merak ediyorum

    • Benim sezgim tam tersi yönde: LLM'ler yeni dillerin benimsenme eşiğini düşürecek
      standart kütüphane kodu, LLM'nin yeni sözdizimini öğrenmesi için yeterli olur; olmasa bile ajanlar derleyici çıktısını gözlemleyerek öğrenebilir
      kod taşıma işi doğası gereği yüksek yaratıcılık gerektirmeyen, iyi tanımlı bir görev; dolayısıyla LLM otomasyonunun ilk hedeflerinden biri olacaktır
      gelecekte asıl bizim beynimizi kullanmamız gereken konu, neden bunu yaptığımız ve dünyada nasıl bir etki yarattığı olacak

    • Prompt'ta Idris'in indeksli/bağımlı tiplerini mutlaka kullanmasını söylüyorum, o zaman fena olmayan sonuçlar alıyorum
      (böyle bir yönlendirme olmazsa en fazla GADT seviyesine geliyor)