Yüksek performans, dinamik yazma desteği ve paralel programlama için yerleşik araçlar gibi nitelikleri birleştiren Julia 1.10 programlama dilinin sürümü yayınlandı. Julia'nın sözdizimi MATLAB'a yakındır ve Ruby ve Lisp'ten bazı öğeler ödünç almıştır. Dize işleme yöntemi Perl'ü anımsatıyor. Proje kodu MIT lisansı altında dağıtılmaktadır.
Dilin temel özellikleri:
- Yüksek performans: Projenin temel hedeflerinden biri C programlarına yakın performans elde etmektir. Julia derleyicisi, LLVM projesinin çalışmasını temel alır ve birçok hedef platform için verimli yerel makine kodu üretir;
- Nesne yönelimli ve işlevsel programlamanın öğeleri de dahil olmak üzere çeşitli programlama paradigmalarını destekler. Standart kitaplık, diğer şeylerin yanı sıra, eşzamansız G/Ç, süreç kontrolü, günlük kaydı, profil oluşturma ve paket yönetimi için işlevler sağlar;
- Dinamik yazma: dil, komut dosyası programlama dillerine benzer şekilde değişkenler için türlerin açık bir şekilde tanımlanmasını gerektirmez. Etkileşimli mod desteklenir;
- Türleri açıkça belirtmeye yönelik isteğe bağlı yetenek;
- Sayısal hesaplama, bilimsel hesaplama, makine öğrenimi ve veri görselleştirme için ideal bir sözdizimi. Hesaplamaların paralelleştirilmesi için birçok sayısal veri türü ve araç desteği.
- Ek katmanlara gerek kalmadan C kitaplıklarından işlevleri doğrudan çağırma yeteneği.
Julia 1.10'daki büyük değişiklikler:
- Yeni dil özellikleri
- Varsayılan olarak yeni ve geliştirilmiş JuliaSyntax.jl ayrıştırıcısı etkindir. Eskisine dönmeniz gerekiyorsa JULIA_USE_FLISP_PARSER ortam değişkenini 1 olarak ayarlamalısınız.
- ⥺ (U+297A, \leftarrowsubset) ve ⥷ (U+2977, \leftarrowless) sembolleri artık ok önceliğine sahip ikili operatörler olarak kullanılabilir.
- Dildeki değişiklikler
- Alt görevler oluşturulurken ana görevin yerel RNG'si (rastgele sayı üreteci) artık etkilenmez. Yeni rastgele sayı üreteci başlatma şeması, SplitMix ve DotMix uygulamalarına benzer.
- "Birlik{}" türündeki belirsizliği ortadan kaldıran ve "Birlik{}" türündeki bir bağımsız değişkeni işlemek için açıkça tanımlanan bir yöntem lehine yeni bir yöntem seçim kuralı önerildi.
- "h bar" ℏ (\hslash U+210F) karakteri artık ħ (\hbar U+0127) karakterine eşdeğer kabul ediliyor.
- "@simd" makrosu artık belirli anlamlara sahiptir: tüm "@fastmath" optimizasyonlarını etkinleştirmek yerine yalnızca kayan nokta yeniden sıralamasına ve budamaya izin verir. Çalışan programlarda bu değişiklik nedeniyle performans düşüşü yaşanırsa, "@fastmath @simd" kullanılarak önceki davranış geri yüklenebilir.
- Anahtar kelimeler içeren bir yöntemin yığın izlemesinde görüntülendiğinde, anahtar kelimelerin metinsel gösterimi artık yeni makro sözdizimi "@Kwargs{key1::Type1, ...}" kullanılarak basitleştirilmiştir.
- Derleyici/çalışma zamanı iyileştirmeleri
- Çöp toplayıcı artık imha edilecek nesnelerin çok iş parçacıklı seçimini gerçekleştiriyor.
- JITLink varsayılan olarak etkinleştirilmiştir. Linux- Julia'yı LLVM 15 veya daha yeni bir sürümle derlerken aarch64 mimarisine dayalı sistemler.
- Ön derleme işlemi pid dosyalarının kilitlenmesini içerir. Aynı anda yalnızca bir Julia işlemi ön derleme gerçekleştirir. Daha önce tüm işlemler paralel olarak çalışıyordu ve yarış koşulları nedeniyle derleme önbellek dosyalarının bozulma tehlikesi vardı.
- Komut Satırı Seçeneklerindeki Değişiklikler
- Çöp toplayıcının kaç tane paralel iş parçacığı kullanacağını belirtmenize olanak tanıyan "--gcthreads" seçeneği eklendi. Varsayılan değer "N/2"dir; burada N, Julia tarafından kullanılan çalışan iş parçacıklarının ("-iş parçacıkları") sayısıdır.
- Sistem değişiklikleri oluşturun
- "SparseArrays" ve "SuiteSparse" düğümleri varsayılan olarak sistem görüntüsünden hariç tutulur. Julia temel paketi artık GPL lisanslı kitaplıklar içermiyor. Ancak bu kütüphaneler hala standart ikili dağıtımda dile dahil edilmektedir.
- Yeni kütüphane fonksiyonları
- "tanpi", "tan(π*x)" değerini "tan(pi*x)" değerine göre daha doğru hesaplar.
- "fourroot(x)" Base.Math'te tanımlanmıştır ve "x"in dördüncü kökünü hesaplamak için kullanılabilir. Bu yöntemin kısa adı, \fourthroot komutu kullanılarak girilebilen Unicode karakteri ∜'dir.
- İşlevselliği karşılık gelen C çağrılarının işlevselliğine karşılık gelen "Libc.memmove", "Libc.memset" ve "Libc.memcpy" işlevleri eklendi.
- Paket önceden derlenmişse "true" değerini döndüren "Base.isprecompiled(pkg::PkgId)" yöntemi eklendi.
- Kütüphane İşlevi Seçenekleri
- "binom(x, k)" artık tamsayı olmayan "x"i destekliyor.
- "CartesianIndex" artık yayın için "skaler" olarak değerlendiriliyor.
- "Baskı stili" yöntemi artık italik çıktıyı desteklemektedir.
- "Parent" ve "parentindices" yöntemleri artık "SubStrings" türünü desteklemektedir.
- "replace(string,pattern...)" yöntemi artık bir dize döndürmek yerine bir akışa çıktı vermek için isteğe bağlı bir "IO" bağımsız değişkenini desteklemektedir.
- "Starswith" yöntemi artık G/Ç iş parçacıklarını destekliyor.
- Temel kitaplık değişiklikleri
- “Sortperm!” yöntemlerinden ve "kısmi sıralama!" güvenli olmayan davranışlara yol açabilecek "initialized=true" anahtar kelimesini kaldırdı.
- "Rasyonel" tipi tamsayılar yazdırılırken, artık "Rasyonel" tipindeki akışlar (diziler gibi) bağlamında paydaları atlanıyor.
- Paketleme yöneticisi
- "Pkg.precompile" yöntemi artık "zamanlamayı" anahtar argüman olarak alıyor ve her paket için ön derleme zamanlama bilgilerini görüntülüyor - "Pkg.precompile(timing=true)".
- Lineer Cebir
- "AbstractQ" türü artık "AbstractMatrix"in bir alt türü değildir. Üstelik, "adjoint(Q::AbstractQ)" yöntemi artık "Q"yu "Adjoint" türünde sarmalıyor ve onun yerine "AbstractQ"nun bir alt türü olan "AdjointQ"yu koyuyor. Bu değişiklik, tipik olarak "AbstractQ" örneklerinin, işlevlere ve matrislere dayalı doğrusal operatörler gibi davranması ve dizin tarafından erişilememesi nedeniyledir. Ek olarak birçok "AbstractQ" türü, farklı boyutlardaki vektörler/matrisler üzerinde çalışabilir ve bağlama bağlı boyuttaki bir matris gibi davranabilir. Bu değişiklikle birlikte "AbstractQ" türü artık Julia belgelerinde ayrıntılı olarak açıklanan iyi tanımlanmış bir arayüze sahip oldu.
- Çarpanlara ayırma sonuçları artık "Adjoint" ve "Transpose" sarmalayıcı türlerine sarılmamaktadır. Bunun yerine, kendileri de “Faktörleştirme”nin alt türleri olan “AdjointFactorization” ve “TranposeFactorization” türleri eklendi.
- Yeni işlevler "hermitianpart" ve "hermitianpart!" matrisin Hermityen (gerçekten simetrik) kısmını bulmak için.
- "AbstractMatrix" türündeki aktarılmış bir alt matrisin "norm" yöntemi artık varsayılan olarak ana matrisin normunu döndürmektedir; bu, "AbstractVectors" için geçerli davranışla eşleşir.
- A veya B'den birinin simetrik veya Hermitian olması durumunda "öz(A, B)" ve "özdeğerler(A, B)" özvektörlerinin hesaplanmasına yönelik yöntemler eklendi.
- "Eigvals/eigen(A, cholesky(B))" yöntemleri artık pozitif tanımlı B için Cholesky genişletmesi yoluyla A ve B'nin genelleştirilmiş özdeğerlerini (öz: ve özvektörleri) hesaplamaktadır.
- printf
- Biçim belirticileri artık "%*s" ve "%*.*g" gibi dinamik genişliği ve duyarlılığı destekliyor.
- TEKRAR
- Bir yığın izi yazdırırken, aşırı ayrıntılı çıktıyı önlemek için işlev imzalarında yazdırılan türlerin derinliği sınırlanır.
- test
- "@test_broken" makrosu (veya "broken=true" ile "@test"), test ifadesi yanlış/doğru değerini döndürmezse artık bir hata veriyor.
- "@test" çağrılırken bir hata veya bir işlev içinde bir hata varsa, artık testin "@testset" içindeki konumunun anlaşılmasına yardımcı olmak için ayrıntılı bir yığın izleme sağlanmaktadır.
- Etkileşimli Araçlar
- "code_native" ve "@code_native" artık AT&T yerine Intel sözdizimini kullanıyor.
- "@time_imports" artık içe aktarılan modüller için "__init__()" yürütme süresini gösteriyor.
- Güncelliğini yitirmiş ve kaldırılacak yapılar
- "@pure" makrosu kullanımdan kaldırıldı. Bunun yerine "Base.@assume_fects :foldable" kullanılmalıdır.
Kaynak: opennet.ru
