Julia 1.8 programlama dilinin piyasaya sürülmesi

Yüksek performans, dinamik yazma desteği ve paralel programlama için yerleşik araçlar gibi nitelikleri birleştiren Julia 1.8 programlama dilinin sürümü mevcuttur. 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.8'deki büyük değişiklikler:

  • Yeni dil özellikleri
    • Değişken bir yapının alanlarına artık değiştirilmelerini önlemek ve optimizasyona izin vermek için sabitler olarak açıklama eklenebilir.
    • Genel değişkenlere tür açıklamaları eklenebilir.
    • Boş n boyutlu diziler, köşeli parantez içindeki birden çok noktalı virgül kullanılarak oluşturulabilir; örneğin "[;;;]", 0x0x0 boyutunda bir dizi oluşturur.
    • Try blokları artık isteğe bağlı olarak, herhangi bir hata atılmadığı takdirde ana gövdeden hemen sonra yürütülen bir else bloğuna sahip olabilir.
    • @inline и @noinline можно размещать внутри тела функции, что позволяет аннотировать анонимную функцию.
    • @inline ve @noinline artık bir çağrı sitesindeki veya bloktaki bir işleve, karşılık gelen işlev çağrılarının dahil edilmesini (veya dahil edilmemesini) zorlamak için uygulanabilir.
    • ∀, ∃ ve ∄'ya tanımlayıcı karakterler olarak izin verilir.
    • Unicode 14.0.0 spesifikasyonu için destek eklendi.
    • Module(:name, false, false) yöntemi ad içermeyen, Base veya Core'u içe aktarmayan ve kendisine referans içermeyen bir modül oluşturmak için kullanılabilir.
  • Dildeki değişiklikler
    • Yeni oluşturulan Görev nesneleri (@spawn, @async, vb.) artık oluşturulduklarında üst Görevdeki yöntemler için world_age'a sahiptir ve bu da optimize edilmiş yürütmeye olanak tanır. Önceki etkinleştirme seçeneği Base.invokelatest yöntemi kullanılarak kullanılabilir.
    • Директивы несбалансированного двунаправленного форматирования Unicode теперь запрещены в строках и комментариях во избежании инъекций.
    • Base.ifelse теперь определяется как общая функция, а не как встроенная, что позволяет пакетам расширять её определение.
    • Каждое присвоение глобальной переменной теперь сначала проходит через вызов convert(Any, x) или convert(T, x), если для глобальной переменной был объявлен тип T. Перед использованием глобальных переменных, убедитесь, что инвариант convert(Any, x) === x всегда истинен, иначе это может привести к неожиданному поведению.
    • Yerleşik işlevler artık genel işlevlere benzer ve yöntemler kullanılarak programlı olarak numaralandırılabilir.
  • Derleyici/çalışma zamanı iyileştirmeleri
    • Время начальной загрузки сокращено примерно на 25%.
    • LLVM tabanlı derleyici, çalışma zamanı kitaplığından yeni bir kitaplığa, libjulia-codegen'e ayrıldı. Varsayılan olarak yüklendiğinden normal kullanım sırasında herhangi bir değişiklik yapılmamalıdır. Derleyici gerektirmeyen dağıtımlarda (örneğin, gerekli tüm kodun önceden derlendiği sistem görüntüleri), bu kitaplık (ve onun LLVM bağımlılığı) kolayca çıkarılabilir.
    • Koşullu tür çıkarımı artık bir yönteme bir argüman iletilerek mümkün. Örneğin, Base.ifelse(isa(x, Int), x, 0), x'in türü bilinmese bile ::Int değerini döndürür.
    • SROA (Toplamların Skaler Değişimi) geliştirildi: kalıcı global alanlarla getfield çağrılarını ortadan kaldırır, başlatılmamış alanlarla değiştirilebilir yapıları ortadan kaldırır, iç içe geçmiş getfield çağrılarının performansını ve işlenmesini geliştirir.
    • Tür çıkarımı, yan etkiler ve düşmeyen çeşitli efektleri izler. Derleme zamanı performansını önemli ölçüde artıran sürekli yayılma dikkate alınır. Örneğin bazı durumlarda, satır içi yapılamayan ancak sonucu etkilemeyen işlevlere yapılan çağrılar çalışma zamanında atılacaktır. Base.@assume_fects makrosu kullanılarak efekt kurallarının üzerine manuel olarak yazılabilir.
    • Ön derleme (açık ön derleme direktifleri veya belirtilen iş yükleriyle) artık daha fazla tür tanımlı kod tasarrufu sağlayarak ilk seferde daha hızlı yürütme sağlar. Paketinizin ihtiyaç duyduğu herhangi bir yeni yöntem/tür birleşimi, bu yöntemlerin nerede tanımlandığına bakılmaksızın, paketinize ait bir yöntem tarafından çağrıldıkları takdirde artık ön derleme dosyasında önbelleğe alınabilir.
  • Komut Satırı Seçeneklerindeki Değişiklikler
    • @inbounds bildirimlerini izlemeye yönelik varsayılan davranış artık "--check-bounds=yes|no|auto" içindeki otomatik seçenektir.
    • Новая опция «—strip-metadata» для удаления строк документации, информации об исходном местоположении и имён локальных переменных при создании образа системы.
    • Derleyicinin sistem görüntüsünü oluştururken ara kaynak kodu gösterimini kaldırmasına olanak tanıyan yeni "--strip-ir" seçeneği. Ortaya çıkan görüntü yalnızca "--compile=all" kullanıldığında veya gerekli kodun tamamı önceden derlendiğinde çalışır.
    • Если вместо имени файла указан символ «-«, то исполняемый код читается из стандартного потока ввода.
  • Çoklu iş parçacığı desteği değişiklikleri
    • Threads.@threads varsayılan olarak yeni planlama seçeneğini kullanır :dinamik; bu, yinelemelerin her iş parçacığına atanmak yerine mevcut çalışan iş parçacıklarında dinamik olarak planlanması açısından önceki moddan farklıdır. Bu mod, iç içe geçmiş döngülerin @spawn ve @threads ile daha iyi dağıtılmasına olanak tanır.
  • Yeni kütüphane fonksiyonları
    • split(str)'i birden çok kez çalıştırmak için her bir split(str)'i kullanın.
    • Bir yineleyicideki tüm öğelerin eşit olup olmadığını test etmek için allequal(itr).
    • hardlink(src, dst) можно использовать для создания жёстких ссылок.
    • setcpuaffinity(cmd, cpus) для установки соответствия ядра процессора запускаемым процессам.
    • diskstat(path=pwd()) disk istatistiklerini almak için.
    • Hem değerlendirilen satırı hem de @time raporunu görüntülemek için yeni @showtime makrosu.
    • LazyString и макрос lazy»str» добавлены для поддержки отложенного построения сообщений об ошибках в путях ошибок.
    • Dict'te ve anahtarlar(::Dict), değerler(::Dict) ve Set gibi diğer türetilmiş nesnelerdeki eşzamanlılık sorunu düzeltildi. Sözlüğü veya kümeyi değiştiren hiçbir çağrı olmadığı sürece artık yineleme yöntemleri bir sözlük veya küme üzerinde çağrılabilir.
    • @time ve @timev artık isteğe bağlı bir açıklamaya sahip; örneğin zaman raporlarının kaynağına açıklama eklemenize olanak tanıyor. @time "Foo değerlendiriliyor" foo().
    • range tek anahtar kelime bağımsız değişkeni olarak durmayı veya uzunluğu alır.
    • Precision ve setprecision artık base'i anahtar kelime olarak kabul ediyor
    • Объекты сокетов TCP теперь предоставляют closewrite метод и поддерживают использование полуоткрытого режима.
    • extrema artık bir başlangıç ​​argümanını kabul ediyor.
    • Iterators.countfrom теперь принимает любой тип, определяющий метод +.
    • @time artık yöntemleri değiştirilen türlerle yeniden derlemek için harcanan zamanın yüzdesini ayırıyor.
  • Standart Kitaplık Değişiklikleri
    • Ключи со значением Nothing теперь удаляются из среды в addenv.
    • Iterators.reverse (ve dolayısıyla last) her satırı destekler.
    • Belirli türlerdeki aralıklar için uzunluk işlevi artık tamsayı taşmasını denetlemez. Yeni bir işlev olan Check_length mevcuttur; bit aktarım kontrol mantığını içerir. Gerekirse aralık türünü oluşturmak için SaferIntegers.jl'yi kullanın.
    • Iterators.Reverse yineleyicisi mümkünse her indeksin tersine çevrilmesini uygular.
  • Paketleme yöneticisi
    • Новые индикаторы ⌃ и ⌅ рядом с пакетами в статусе «pkg>», для которых доступны новые версии. ⌅ указывает, что новые версии не могут быть установлены.
    • Новый аргумент outdated::Bool для Pkg.status (—outdated или -o в режиме REPL), чтобы показать информацию о пакетах предыдущих версии.
    • Project.toml'deki tüm [compat] girişlerini göstermek için Pkg.status'a yönelik yeni compat::Bool argümanı (REPL modunda --compat veya -c).
    • Proje uyumluluk girişlerini ayarlamak için yeni "pkg>compat" (ve Pkg.compat) modu. "pkg>compat" aracılığıyla etkileşimli bir düzenleyici veya "pkg>Foo 0.4,0.5" yoluyla doğrudan kayıt kontrolü sağlar; bu, sekme tamamlama yoluyla mevcut kayıtları yükleyebilmektedir. Yani, "pkg> uyumlu Fo " mevcut bir girişin düzenlenmesine izin vermek için otomatik olarak "pkg>Foo 0.4,0.5" olarak güncellenir.
    • Теперь Pkg пытается загрузить пакеты с сервера пакетов только в том случае, если сервер отслеживает реестр, содержащий пакет.
    • Pkg.instantiate artık Project.toml'ın Manifest.toml ile senkronizasyonu bozulduğunda bir uyarı verecek. Bunu, projeyi çözerken manifestteki projenin deps ve compat kayıtlarının (diğer alanlar göz ardı edilir) bir karmasına dayalı olarak yapar, böylece Project.toml deps veya compat kayıtlarındaki herhangi bir değişiklik, yeniden çözümlemeden tespit edilebilir.
    • Eğer "pkg>add" belirtilen adda bir paket bulamazsa, artık eklenebilecek benzer adlara sahip paketler önerecektir.
    • Manifest'te saklanan Julia sürümü artık yapı numarasını içermiyor, bu da ana programın artık 1.9.0-DEV olarak yazılacağı anlamına geliyor.
    • Test iptali "pkg>" artık daha tutarlı bir şekilde algılanacak ve REPL'e doğru şekilde döndürülecek.
  • Etkileşimli Araçlar
    • Новый макрос @time_imports для отчета о времени, потраченном на импорт пакетов и их зависимостей, с выделением времени компиляции и перекомпиляции в процентах на импорт.
  • Lineer Cebir
    • Подмодуль BLAS теперь поддерживает level-2 BLAS функции spr!.
    • LinearAlgebra.jl standart kütüphanesi artık hem kaynak kodu hem de birim testi açısından SparseArrays.jl'den tamamen bağımsızdır. Sonuç olarak, seyrek diziler artık Base veya LinearAlgebra nesnelerine uygulanan LinearAlgebra yöntemleri tarafından (örtük olarak) döndürülmemektedir. Bu özellikle aşağıdaki önemli değişikliklere yol açar:
      • Конкатенации с использованием специальных «разреженных» матриц (например, диагональная) теперь возвращают плотные матрицы; Как следствие, поля D1 и D2 объектов SVD, созданные при вызовах getproperty, теперь являются плотными матрицами.
      • Метод similar(::SpecialSparseMatrix, ::Type, ::Dims) возвращает плотную нулевую матрицу. Как следствие, произведения двух-, трех- и симметричных трехдиагональных матриц друг на друга приводят к порождению плотной матрицы. Кроме того, построение подобных матриц с тремя аргументами из специальных «разреженных» матриц из (нестатических) матриц теперь не удается из-за «zero(::Type{Matrix{T}})».
  • printf
    • %s ve %c artık genişliği biçimlendirmek için textwidth argümanını kullanıyor.
  • Profil
    • CPU yük profili artık iş parçacıkları ve görevler de dahil olmak üzere meta verileri kaydediyor. Profile.print(), filtreleme sağlamak için iş parçacıklarını, görevleri veya alt iş parçacıklarını/görevleri, görevleri/iş parçacıklarını ve iş parçacıklarını ve görev bağımsız değişkenlerini gruplandırmanıza olanak tanıyan yeni bir gruplandırma bağımsız değişkenine sahiptir. Ek olarak, kullanım yüzdesi artık her örnekte iş parçacığının boşta olup olmadığına bağlı olarak genel olarak veya iş parçacığı başına raporlanıyor. Profile.fetch() varsayılan olarak yeni meta verileri içerir. Profil oluşturma verilerinin harici tüketicileriyle geriye dönük uyumluluk için, include_meta=false iletilerek hariç tutulabilir.
    • Yeni Profile.Allocs modülü, bellek tahsislerinin profilini oluşturmanıza olanak tanır. Her bellek tahsisinin türüne ve boyutuna ilişkin bir yığın izlemesi kaydedilir ve sample_rate bağımsız değişkeni, yapılandırılabilir sayıda tahsisin atlanmasına izin vererek performans ek yükünü azaltır.
    • Sabit süreli CPU profili oluşturma artık kullanıcı tarafından görevler çalışırken, önce profil yüklenmeden çalıştırılabilir ve çalışma sırasında rapor görüntülenecektir. MacOS ve FreeBSD'de ctrl-t tuşlarına basın veya SIGINFO'yu arayın. Diğer platformlar için SIGUSR1'i etkinleştirin; % kill -USR1 $julia_pid. Bu, Windows'ta mevcut değildir.
  • TEKRAR
    • RadioMenu теперь поддерживает дополнительные сочетания клавиш для прямого выбора параметров.
    • Последовательность «?(x, y», за которой следует нажатие TAB, отображает все методы, которые можно вызвать с аргументами x, y, …. (Пробел в начале не позволяет войти в режим справки). «MyModule.?(x, y» ограничивает поиск «MyModule». Нажатие TAB требует, чтобы по крайней мере один аргумент имел тип, более конкретный, чем Any. Или используйте SHIFT-TAB вместо TAB, чтобы разрешить любые совместимые методы.
    • Новая глобальная переменная err позволяет получить последнее исключение, похожее на поведение ans с последним ответом. Ввод err повторно печатает информацию об исключении.
  • Seyrek Diziler
    • Код SparseArrays перемещен из репозитория Julia во внешний репозиторий SparseArrays.jl.
    • Yeni birleştirme işlevleri sparse_hcat, sparse_vcat ve sparse_hvcat, giriş bağımsız değişkenlerinin türlerine bakılmaksızın bir SparseMatrixCSC türü döndürür. LinearAlgebra.jl ve SparseArrays.jl kodunu ayırdıktan sonra matrisleri yapıştırma mekanizmasını birleştirmek için bu gerekli hale geldi.
  • Günlüğü
    • Стандартные уровни журналов BelowMinLevel, Debug, Info, Warn, Error и AboveMaxLevel теперь экспортируются из стандартной библиотеки Logging.
  • Unicode
    • Добавлена функция isequal_normalized для проверки эквивалентности Unicode без явного построения нормализованных строк.
    • Функция Unicode.normalize теперь принимает ключевое слово chartransform, которое можно использовать для предоставления пользовательских сопоставлений символов, а также предоставляется функция Unicode.julia_chartransform для воспроизведения сопоставления, используемого при нормализации идентификаторов синтаксическим анализатором Julia.
  • test
    • ‘@test_throws «some message» triggers_error()’ теперь можно использовать для проверки того, содержит ли отображаемый текст ошибки «some message», независимо от конкретного типа исключения. Также поддерживаются регулярные выражения, списки строк и функции сопоставления.
    • @testset foo() теперь можно использовать для создания набора тестов из заданной функции. Имя тестового набора — это имя вызываемой функции. Вызываемая функция может содержать @test и другие определения @testset, в том числе для вызовов других функций, при этом записывая все промежуточные результаты тестирования.
    • TestLogger ve LogRecord artık standart Test kitaplığından dışa aktarılıyor.
  • Dağıtılmış
    • SSHManager artık addprocs() yöntemi ve Shell=:csh parametresi aracılığıyla csh/tcsh sarıcılı çalışan iş parçacıklarını destekliyor.
  • Diğer değişiklikler
    • GC.enable_logging(true), her çöp toplama işlemini, toplanan bellek miktarı ve zamanı ile günlüğe kaydetmek için kullanılabilir.

Kaynak: opennet.ru

Yorum ekle