3 puan yazan GN⁺ 2025-10-20 | 1 yorum | WhatsApp'ta paylaş
  • Flowistry, Rust dili için bir IDE eklentisidir ve odaklanmak istediğiniz ilgili kod parçalarıyla bağlantılı kısımları yalnızca göstermeyi sağlar
  • Bu eklenti, Rust kodundaki bilgi akışını analiz ederek, şu anda baktığınız değişken veya ifadeyle doğrudan ilişkili kodu görsel olarak vurgular
  • VSCode eklentisi olarak kolayca kurulabilir ve seçilen değişkene etki eden veya ondan etki gören kodu yalnızca parlak biçimde gösterir
  • "Focus mode", "mark ayarı" gibi çeşitli özelliklerle büyük fonksiyonların veya karmaşık kodların anlaşılmasını artırır
  • İç değiştirilebilirliğin (Interior Mutability) tam desteklenmemesi, analiz kapsamının sınırlı olması gibi kısıtlar olsa da gelişmeye devam ediyor ve Rust Analyzer'dan bağımsız bir araçtır

Flowistry Genel Bakış ve Önemi

Flowistry, Rust geliştiricileri için bir IDE eklentisidir; kod içinde odaklanmak istediğiniz kısım ve ona ilişkin parçaları ön plana çıkarır. Büyük fonksiyonlarda ve karmaşık kod akışlarında ihtiyaç duyulan bölümü hızlı ve net bir biçimde görmenizi sağlayarak, diğer statik analiz araçlarından farklı bir pratik değer sunar. Temel teknolojisi bilgi akışı analizidir; bu yaklaşım, bir programda bir kod parçasının diğerine nasıl etki edebileceğini takip eden bir veri akışı analizidir. Flowistry bu analizini Rust'ın sahiplik ve ömür sistemine ve Rust MIR (Mid-level Intermediate Representation) temeline dayalı olarak sağlar.

Ana Özellikler ve Çalışma Şekli

  • Rust kodunda belirli bir değişkeni veya ifadeyi tıkladığınızda, o noktaya etki eden veya ondan etki gören kod dışındaki kısımlar flu hale gelir
  • İlgili kodlar sezgisel olarak yalnızca ilgili kod olarak öne çıkarılır; gereksiz kod okumaya ihtiyaç azalır ve kodun temel akışı hızlıca anlaşılır
  • Büyük fonksiyonlarda veya Rust derleyicisinin gerçek fonksiyonlarına benzer karmaşık kodlarda, belirli bir argümanın oynadığı rol tek bakışta görülebilir
  • Analizin temelini oluşturan algoritma, PLDI 2022'de yayımlanan "Modular Information Flow through Ownership" makalesine dayanır

Kurulum ve Ortam Desteği

IDE Eklenti Kurulumu

  • Flowistry, Visual Studio Marketplace veya Open VSX Registry'den bir VSCode eklentisi olarak kurulabilir
  • Rust çalışma alanı açıldıktan sonra otomatik kurulum ve başlatma gerçekleşir
  • NixOS desteklenmez; ARM (M1 Mac vb.) platformlarda doğrudan kaynak koddaki koddan derlenmelidir

Rustc Eklentisi

  • Bilgi akışı analiz fonksiyonu bağımsız bir crate olarak yayımlanır; ayrıntılı belge ve API burada doğrudan sunulur

Kullanım ve Özellik Ayrıntıları

İlk Çalıştırma

  • VSCode'da eklenti çalıştırıldığında kod tabanı genelinde tip denetimi önceden yapılır
  • Bu sonuç target/flowistry klasörüne önbelleğe alınır

Focus Mode'e Girme

  • Eklentinin "Toggle focus mode" komutu (Ctrl+R Ctrl+A vb.) kullanılarak odak moduna geçilir
  • İmleç bir fonksiyonun içine yerleştirildiğinde, o fonksiyon içinde otomatik olarak bilgi akışı analizi başlatılır
  • Eklenti analizi tamamladığında yalnızca ilgili kodlar vurgulanır (analiz bazen yaklaşık 15 saniye sürebilir)

Mark Ayarı

  • Belirli bir odak bölgesini sabitleyip başka kodları incelerken, "Mark" kavramını kullanarak mevcut bölge korunur
  • "Set mark"(Ctrl+R Ctrl+S), "Unset mark"(Ctrl+R Ctrl+D) ile sabitleme ve geri alma yapılabilir

Odak Bölgesi Seçimi

  • "Select focused region" komutu kullanılarak, vurgulanan kod bloğu bir seferde seçilip kopyalanabilir, yorumlanabilir veya düzenlenebilir

Sınırlamalar ve Dikkat Edilmesi Gerekenler

  • İç değiştirilebilirlik (Interior Mutability) tam olarak desteklenmez
    • Örneğin Arc, Mutex gibi yapılarda referanslar arasındaki ömür farkı nedeniyle tam izleme mümkün olmayabilir
  • Odak alanı bazen beklendiğinden genişleyebilir
    • Çağrılan fonksiyonun içine kadar gerçek analiz yapılamadığı için
  • Seçilemeyen kod olabilir
    • MIR seviyesinde kaynak kod ile eşleme sınırlamaları nedeniyle tüm kod seçilemez
  • Fonksiyon iç içe geçme, closure'lar ve async birlikte analiz edilemez
    • Her zaman yalnızca imlecin içinde bulunduğu en küçük fonksiyon birimiyle analiz yapılır

SSS ve Diğer

  • rustup kurulumu başarısız olursa: rustup'ı komut satırından manuel olarak kurup VSCode'da devam etmeniz gerekir
  • Rust Analyzer ile entegre edilmediği durumun nedeni: Rust Analyzer, MIR analizi ve borrow checker desteği sunmadığı için ayrı bir eklenti şeklindedir
  • Kod vurgulama ile ilgili sorunlarda: Sınırlamalar dokümanına bakın, ek sorular için GitHub issue, Discord ve Twitter kullanılabilir

Lisans ve Açık Kaynak Bilgisi

  • MIT lisansı ile açık kaynak olarak yayınlanmıştır
  • Başlıca programlama dilleri Rust, TypeScript; ayrıca Python, HTML, JavaScript
  • Eylül 2025 itibarıyla 2.6k yıldız, 61 fork ile aktif şekilde geliştirilip korunuyor

Sonuç

Flowistry, Rust geliştirme ortamında karmaşık kodun bağlamını anlamayı ve odaklanmayı pratik şekilde artıran bir açık kaynak aracıdır. Özellikle bilgi akışı analizini gerçek zamanlı olarak IDE'ye entegre edip görsel biçimde sunmasıyla, mevcut statik analiz araçlarından ve Rust Analyzer'dan farklı bir deneyim sunar. Rust dili öğrenimi, yeniden düzenleme, kod inceleme gibi farklı senaryolarda yüksek kullanılabilirlik ve verimlilik sağlar.

1 yorum

 
GN⁺ 2025-10-20
Hacker News görüşü
  • Asıl makale burada, Rust'ta statik olarak denetlenen back-reference konusu üzerinde uzun zamandır düşünüyorum; C/C++ kullanıcılarının Rust'tan şikayet etmesinin büyük nedenlerinden biri, A B'ye referans verirken B'den tekrar A'ya bir pointer tutmanın zor olması; bu yüzden çoğu zaman güvensiz dolaylı çözümler kullanılıyor
    Rust'ta Rc, RefCell, Weak, borrow(), borrow_mut(), upgrade(), downgrade() vb. kullanılarak bu güvenli şekilde yapılabiliyor ama kod uzuyor, çalışma zamanında ek yük oluşuyor ve çift borrow durumlarında panic de görülebiliyor; yine de ifade gücü yeterli. Hâlen sürmekte olan çalışmamla ilgili notları derledim
    Statik denetimin zor kısmı, borrowed kapsamların çakışmadığını doğrulamak; lifetime scope'ları çakışmıyorsa sorun yok. Fonksiyon çağrıları veya generic fonksiyon çağrılarında scope denetimi daha zorlaşıyor, burada Flowistry'nin yaklaşımı yardımcı olabilir
    Flowistry'nin interior mutability'yi (RefCell vb. ile iç değiştirilebilirlik) tamamen ele almaması aklıma takılıyor
    Pratikte asıl mesele, 1) sound olması, 2) compile time'da düşük maliyetle denetlenebilmesi, 3) ağaçta üst düğüme referans gibi insanların çoğunun ihtiyaç duyduğu back pointer kullanımını mümkün kılması, 4) sorun çıktığında faydalı tanı mesajları vermesi gibi koşulları sağlayan kısıtları bulmak

  • Diğer dillerde, fonksiyon gövdesi içindeki daha büyük ya da daha gayriresmî bağımlılık ilişkilerini denetleyen bir özellik olup olmadığını merak ediyorum
    Örneğin parametre ya da değişken foo vurgulandığında, yalnızca foo kullanımını değil foo'dan türetilen tüm değişkenlerin kullanımını da tek seferde görebiliyor muyuz, bunu merak ediyorum
    Rust'taki borrow kullanımı bu tür takibi kusursuz yapıyor ama böyle bir görselleştirme diğer dillerin kodlarında da çok faydalı olurdu
    Flowistry'nin, servo'nun flexbox layout kodu gibi bakımı zor modern kod tabanı dosyalarında çok gerekli olduğunu düşünüyorum; bu fonksiyon 400 satırı aşan, gördüğüm en sıkıntılı kod dosyalarından biri

    • (Yanılıyor olabilirim ama) buna genel olarak "flow analysis" deniyor ve TypeScript bunu arka planda çalıştırarak tipleri daraltıyor
      Ama görselleştirme özelliği yok

    • Bu tür özellikler genellikle "program slicing" diye adlandırılır

  • İnsanların kolay okuması için optimize edilmiş bir tarzda kod yazılmadığında, bunu telafi eden çok faydalı bir araç gibi görünüyor
    Temel kod her zaman okunabilir yazılmadığı için, bu tür araçların çok yardımcı olduğunu düşünüyorum

  • Yazar, Rust East Coast'ta eklenti ve rutin araştırmasını derinlemesine ele aldığı bir sunum videosu paylaştı

  • Bence gerçekten harika bir özellik; Rust'ın buna uygun olmasının sebebi, ownership sistemi sayesinde yan etkilerin sınırlı olması
    Bunu Python gibi dillere ekleseniz bile, çalışma zamanında her an call stack boyunca yukarı çıkıp belleği manipüle etmek mümkün olduğu için %100 güvenilir olmaz
    Yine de çoğu durumda doğru olur, bu yüzden böyle bir özelliğin eklenmesini umuyorum

    • (Yazar burada) Bu yüzden Rust'ı seçip bunu yaptım; diğer dillerde bunu uygulamanın zor olmasının sebebi de bu
  • TypeScript veya JavaScript'te buna benzer bir araç olup olmadığını merak ediyorum

  • Güzel görünüyor ama buna özellikle "IDE" demek yerine sadece bir VSCode eklentisi dense daha iyi olurmuş gibi geliyor

    • Muhtemelen "Visual Studio Code" Microsoft'un ticari markası olduğu için; eklenti VSCodium, Cursor ve benzeri açık kaynak tabanlı IDE'lerin genelinde çalışıyor

    • Belgelerde de bunun bir IDE eklentisi olduğu açıkça yazıyor

  • Kodun önemli kısımlarına odaklanma fikri gerçekten çok iyi görünüyor
    JS/TS için de buna benzer bir şey olup olmadığını merak ediyorum

  • rust-analyzer'ın documentHighlight LSP metoduna katkı sunma sürecinin nasıl olduğunu merak ediyorum
    GIF'te gösterilen şeyle oldukça benzer çalışıyor
    Eklenti olarak yapmak için fazla spesifik bir özellik gibi duruyor
    İlgili LSP spesifikasyonu bağlantısı

    • README'de açıklanıyor; ayrıntılar burada görülebilir

    • MIR (Mid-level Intermediate Representation) gerekiyor

  • Hep böyle bir özelliğin hayalini kurdum; verinin fonksiyon dışından nasıl aktığını, yani bu fonksiyonu kimin çağırdığı tarafı da gösterebilmesini isterdim
    Compiler verilerini yeniden kullanarak buna yardımcı olunamaz mı diye düşünüyorum

    • İlgili sunumda duyduğuma göre, zaten compiler verilerini kullanıyor gibi görünüyor