1 puan yazan GN⁺ 2024-11-11 | 1 yorum | WhatsApp'ta paylaş
  • F# 9 neden önemli: F# 9, programları daha güvenli, daha dayanıklı ve daha yüksek performanslı hale getiren kapsamlı iyileştirmeler sunuyor

Nullable referans türleri

  • F# null'dan kaçınacak şekilde tasarlanmıştır, ancak C# ile yazılmış .NET kütüphaneleriyle etkileşim kurarken null değerler araya girebilir
  • Artık F#, null'u geçerli bir değer olarak taşıyan referans türlerini tür güvenli bir şekilde ele alabiliyor
  • Örnek:
    • let notAValue: string | null = null
    • let len (str: string | null) = match str with | null -> -1 | NonNull s -> s.Length

Discriminated Union için .Is* özellikleri

  • Discriminated Union artık her case için otomatik oluşturulan özelliklere sahip
  • Bu sayede bir değerin belirli bir case olup olmadığı kontrol edilebiliyor
  • Örneğin person.contact.IsEmail şeklinde yazılabiliyor

Kısmi aktif desenler artık unit option yerine bool döndürebiliyor

  • Önceden kısmi aktif desenler eşleştiğinde Some (), aksi halde None döndürüyordu
  • Artık bool da döndürebiliyorlar

Argüman verildiğinde yerleşik özellikler yerine genişletme metotlarını tercih etme

  • F# artık bir türün yerleşik özelliğiyle aynı adla tanımlanan genişletme metotlarını çözümleyebiliyor
  • Bu, bazı .NET kütüphanelerinde görülen desenle uyumlu

Boş gövdeli Computation Expression desteği

  • F# artık boş Computation Expression'ları destekliyor
  • Örnek: let xs = seq { }
  • Bu durumda builder'ın Zero metodu çağrılıyor

Hash yönergeleri artık string olmayan argümanları kabul ediyor

  • Derleyici için hash yönergeleri daha önce yalnızca tırnak içinde verilen string argümanları kabul ediyordu
  • Artık her türden argüman alabiliyorlar
  • Örnek: #nowarn 0070

fsi içinde genişletilmiş #help yönergesi

  • F# Interactive'teki #help yönergesi artık verilen nesne veya fonksiyonun belgelerini gösteriyor
  • Tırnak olmadan verilebiliyor
  • Örnek: #help List.map;;

Uyarıları devre dışı bırakmak için #nowarn içinde FS öneki desteği

  • Önceden #nowarn "FS0057" yazıldığında geçersiz uyarı numarası mesajı alınıyordu
  • Artık önek olsa da uyarı numarası kabul ediliyor

TailCall özniteliğinin özyinelemeli olmayan fonksiyonlarda veya let ile bağlanan değerlerde kullanılması durumunda uyarı

  • Artık F#, [<TailCall>] özniteliği yanlış yerde kullanıldığında uyarı veriyor
  • Bu kodu etkilemiyor, ancak okuyan kişi için kafa karıştırıcı olabilir

Öznitelik hedeflerinin uygulanması

  • Derleyici artık let değerleri, fonksiyonlar, union case bildirimleri, örtük yapıcılar, struct'lar ve sınıflar için AttributeTargets hedeflerini doğru şekilde uyguluyor
  • Bu, Xunit testlerine unit argümanı eklemeyi unutmak gibi hataları önleyebilir

Standart kütüphane güncellemeleri

Koleksiyonlar için Random fonksiyonları

  • List, Array ve Seq modüllerine rastgele örnekleme ve karıştırma için yeni fonksiyonlar eklendi
  • Örtük, thread-safe paylaşımlı bir Random örneği kullanan sürümler
  • Argüman olarak Random örneği alan sürümler
  • Özelleştirilmiş randomizer fonksiyonu alan sürümler
  • Shuffle, Choice, Choices ve Sample fonksiyonları mevcut

CustomOperationAttribute için parametresiz yapıcı

  • Computation Expression builder'ları için özel işlemler oluşturmayı kolaylaştırıyor
  • Adı açıkça belirtmeye gerek kalmıyor (çoğu durumda ad, metot adıyla eşleşiyor)

C# koleksiyon ifadelerinde F# List ve Set desteği

  • F# List ve Set türleri C# içinde kullanılırken koleksiyon ifadesiyle başlatılabiliyor
  • Örnek: FSharpSet<int> mySet = [ 1, 2, 3 ];

Geliştirici üretkenliği iyileştirmeleri

Parser recovery

  • Parser recovery üzerinde sürekli iyileştirmeler yapıldı
  • Kod düzenlenirken her zaman sözdizimsel olarak doğru olmasa bile araçlar çalışmaya devam ediyor

Tanılamalar

  • F# 9'da çok sayıda yeni veya iyileştirilmiş tanılama mesajı bulunuyor
  • Belirsiz override metotları, soyut üyelerin kullanımı, yinelenen alanlara sahip union'lar gibi durumlar için

Gerçek görünürlük

  • F#'ta assembly üretim biçiminde, private üyelerin IL'e internal olarak yazılması gibi bir sorun var
  • Artık bu davranış --realsig+ derleyici bayrağıyla düzeltilebiliyor

Performans iyileştirmeleri

Optimize edilmiş eşitlik denetimi

  • Eşitlik denetimi artık daha hızlı ve daha az bellek tahsisi gerektiriyor

Struct Discriminated Union'larda alan paylaşımı

  • Bir struct DU içindeki birden fazla case aynı ad ve türde alanlara sahipse, aynı bellek konumunu paylaşabiliyor
  • Bu da struct'ın bellek ayak izini azaltıyor

Tamsayı aralığı optimizasyonu

  • Derleyici artık start..finish ve start..step..finish ifadelerinin daha fazla örneği için optimize edilmiş kod üretiyor
  • Önceden yalnızca tür int/int32 olduğunda ve step sabit 1 veya -1 olduğunda optimize ediliyordu
  • Artık tüm tamsayı türleri ve farklı step değerleri de optimize ediliyor

List/Array comprehension içinde for x in xs -> ... optimizasyonu

  • List ve Array comprehension'larında for x in xs -> ... optimize edildi
  • Özellikle Array tarafında 10 kata kadar hızlanma ve tahsis boyutunda 1/3 ila 1/4 seviyesine düşüş sağlanıyor

Araç iyileştirmeleri

Visual Studio'da Live Buffer

  • Önceden isteğe bağlı bir özellikti, artık varsayılan olarak etkin
  • IDE'nin arka plandaki derleyicisi artık canlı dosya tamponuyla çalışıyor
  • Değişiklikleri uygulamak için dosyayı diske kaydetmek gerekmiyor

Gereksiz parantezleri kaldırmak için analyzer ve kod düzeltmesi

  • Bazen ek parantezler açıklık için kullanılır, ancak kimi zaman sadece gürültü oluşturur
  • Artık Visual Studio, parantezleri kaldırmak için kod düzeltmesi sunuyor

Visual Studio'da F# için özel görselleştirici desteği

  • Visual Studio debugger visualizer artık F# projelerinde de çalışıyor

Pipeline ortasında imza araç ipucu gösterimi

  • Önceden pipeline'ın ortasındaki bir fonksiyona zaten karmaşık curried parametreler (ör. lambda'lar) uygulanmışsa imza yardımı verilmiyordu
  • Artık bir sonraki parametre için imza araç ipucu gösteriliyor

1 yorum

 
GN⁺ 2024-11-11
Hacker News yorumu
  • F# ile ilk kez üniversite yıllarında tanıştığımdan beri en sevdiğim dil oldu. C#'tan daha önce gelen özelliklere sahip ve C# da bu özellikleri benimsiyor, ancak uyumluluk sorunları nedeniyle zorlanıyor. F# hâlâ harika bir dil; .NET ekosistemiyle uyumlu ve az miktarda boilerplate ile C# ile eşdeğer performans sunabiliyor

  • F#, Microsoft'un Excel'den sonra çıkardığı en iyi ürünlerden biri; .NET'i makul bir platforma dönüştürüyor

  • F# tabanlı Phosphor projesine büyük yatırım yaptık, ancak sonunda her şeyi Typescript ve Rust ile baştan yazdık. Fable kütüphanesi üzerinden farklı teknolojiler arasında type safety'yi korumaya çalıştık, fakat kütüphaneler arası birlikte çalışabilirlik sorunları ve bağımlılık yönetimi zordu. Bence F# yalnızca geleneksel frontend/backend ayrımının olduğu durumlarda uygun

    • Şu anda içeride kullandığımız teknolojiler arasında en ilginç olanlar Effect kütüphanesi ve Moonbit. Moonbit, MS/.NET bağımlılığı olmayan modern bir F# sürümü gibi ve yapay zeka merkezli bir dünyaya uygun bir dil olmasını umuyorum
  • .NET kullanan bir dili seçebildiğimiz kriptografi dersinde F# ile yazdığım ödevler diğerlerininkinden daha okunaklıydı. Veri bilimi işlerinin neredeyse %100'ü Python ile yapıldığı için F#'ı daha fazla kullanamıyorum

  • F# ile çalışmayı özlüyorum ama güncellemeleri takip etmeye devam ediyorum. Topluluğun küçüklüğüne ve Microsoft'un ilgisizliğine rağmen araçlar oldukça iyiydi. En büyük sorun, kod test kapsamı doğruluğuydu

  • Yakın zamanda F# denedim; Python'dan gelen biri olarak REPL kullanabilmek hoşuma gitti. Kışın küçük bir web backend projesi yapıp dili ve ekosistemi daha iyi tanımak istiyorum. http kısmı için Oxpecker hakkında iyi şeyler duydum

  • F#'ın sürümleme yaklaşımını merak ediyorum. Çok sayıda kalite iyileştirmesi var ama büyük bir sürüm değişikliği gerektiriyor gibi görünmüyor. Bunun .NET9 ile sürüm numarasını eşleştirmek için olup olmadığını merak ediyorum

  • F#'ın Windows'ta GUI uygulamaları yapmak için C#'a alternatif olarak durumu nasıl, ve bunun için F# kullanan şirketler var mı merak ediyorum

  • F# hiç denemedim ama iyi bir kaynak gibi görünen şu siteyi buldum: fsharpforfunandprofit.com

  • Linux/MacOS üzerinde F#'ın durumunu merak ediyorum. Sadece Windows'a mı özel, yoksa tam desteklenen bir dil gibi mi hissettiriyor bilmek istiyorum