Swift 5.9 programlama dili makroları ve özellikler kavramını tanıtıyor

Saberie

Active member


  1. Swift 5.9 programlama dili makroları ve özellikler kavramını tanıtıyor

Swift 5.8’den yaklaşık altı ay sonra Apple’ın açık kaynak programlama dilinin 5.9 sürümü yayınlandı. Geçerli sürüm makroları tanıtıyor ve C++ ile iki yönlü bir bağlantıya sahip. Swift 6’nın olmazsa olmazı olması gereken sahiplik kavramına da ilk yaklaşımları getiriyor.

Duyuru



Kısa ve öz


Makrolar, derlemeden önce önceden tanımlanmış içeriği kaynak kodun bölümlerine ekler. Swift’in uygulaması, C veya C++’daki basit makrolardan ziyade Rust’ın makro sistemine dayanır; burada makrolar, derlemeden önce değiştirilen metin modülleri için basit yer tutuculardır.

Swift 5.9’da iki tür Markos vardır: bağımsız ve bağlantılı. İlki onunla # mükemmel ve Swift, derleme sırasında makro uygulamasını çağırıyor. Aşağıdaki kod bunu kullanıyor function()-Standart Swift kütüphanesinden makrolar:


func myFunction(){
print ("Das Programm befindet sich in der Funktion (#function)")
}


Makro yerini alır #function yukarıdaki kodun “Program myFunction() işlevindedir” değerini döndürdüğü işlev adından.

Swift belgelerindeki aşağıdaki kod parçacığının gösterdiği gibi, ekteki makrolar, diğer şeylerin yanı sıra, Swift protokolleriyle çalışırken yardımcı olur OptionSet-Protokol otomatik olarak bir dizi sabitle doldurulur:


// Makro-Variante
@OptionSet<Int>
struct SundaeToppings {
private enum Options: Int {
case nuts
case cherry
case fudge
}
}

// Manuelle Umsetzung ohne Makros
struct SundaeToppings: OptionSet {
let rawValue: Int
static let nuts = SundaeToppings(rawValue: 1 << 0)
static let cherry = SundaeToppings(rawValue: 1 << 1)
static let fudge = SundaeToppings(rawValue: 1 << 2)
}







Swift derleyicisi, C veya C++’da olduğu gibi yalnızca makro metnini değiştirmekle kalmaz, ilgili uygulamayı çağırır.


(Resim: Swift belgeleri)



C++ ile etkileşim


Bir diğer önemli yenilik, C++ ile çift yönlü birlikte çalışabilirliktir; bu, C++ işlevini kullanan Swift blogundaki bir örnekte gösterildiği gibi, harici işlevleri doğrudan Swift’den kullanmanıza olanak tanır.


// Clang module 'PromptResponder'
#pragma once
#include <vector>

std::vector<std::string> generatePromptResponse(std::string prompt);


Swift çağrılarından:


import PromptResponder

let codeLines =
generatePromptResponse("Write Swift code that prints hello world")
.map(String.init)
.filter { !$0.isEmpty }

for line in codeLines {
print(line)
}


Ödünç alınan değerler


Swift 5.9 ayrıca değişkenler için Rust’taki kadar katı ve basit olmayan ancak bellek yönetimini optimize etmeye yardımcı olacak bir özellik konseptinin ilk ipuçlarını da sunuyor. Bu, diğer şeylerin yanı sıra, bireysel değer referanslarını sayma ihtiyacını ortadan kaldırır. Yeni operatör consume Bir değişkenin ömrünün dolduğunu, dolayısıyla atandığında eski değişkenin geçerliliğini kaybettiğini bildirir. Talimatlara göre


let b = consume a


içerir b değeri ave sonraki girişimler a oturum açmak bir hata tetikler. Operatör ayrıca bir değişken oluşturmak için de kullanılabilir


_ = consume a


değeri bir başkasına atamadan açıkça yayınlayın. Parametreler artık şu şekilde kullanılabilir: borrowing VEYA consuming beyan edilmelidir. Ek olarak Swift 5.9, kopyalanamayan yapılar ve numaralandırmalar sunar.

Swift 5.9’daki esnek sayıda parametreyi iletmek için parametre paketleri ve if ve switch ifadelerindeki doğrudan değişken atamaları gibi diğer yenilikler Swift blogunda bulunabilir.

Blog yazısında, Swift 5.8’e gölge düşüren bir sonraki ana sürümün ilerideki yol haritası hakkında hiçbir bilgi bulunmuyor.


(kendim)



Haberin Sonu
 
Üst