Nasza strona używa cookies. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

Swift System jest teraz open source ze wsparciem dla Linuksa

Kod biblioteki o nazwie Swift System pojawił się właśnie jako open source na GitHubie i posiada wsparcie dla Linuksa.
Swift System jest teraz open source ze wsparciem dla Linuksa

Swift System, czyli biblioteka, która ułatwia wywołania systemowe API ze Swifta, jest teraz open source i zawiera nową implementację dla Linuksa. Swift System pojawiło się w czerwcu tego roku i działało do tej pory jedynie na platformach Apple’a. Jest to też alternatywa dla bezpośredniego importowania interfejsów w C, których użycie wymagało męczenia się ze wskaźnikami i innymi rzeczami. Swift System sprawia, że interfejsy te są dostępne, ale w opakowanej formie, tak, aby zachowywały się, jak natywne funkcje tego języka. Niemniej jednak kod z GitHuba jest małych rozmiarów i dotyczy jedynie kilku API obsługujących pliki.

Michael Ilseman, jeden z inżynierów Apple’a, stwierdził, że celem tego całego przedsięwzięcia jest sprawienie, aby System był „domem” dla niskopoziomowych interfejsów systemowych we wszystkich platformach obsługiwanych przez Swifta. Swift dąży też do tego, aby stać się solidną technologią wieloplatformową, według tego, co mówi Ilseman. Przed nimi jednak jeszcze długa droga... 

Ale o tym później — na razie zobaczmy, co takiego Swift System dokładnie robi.


Nowa biblioteka

Swift System odżegnuje nas od zaimportowanych interfejsów języka C, które istniały przez dekady. Chociaż możliwe jest użycie tych API bezpośrednio z poziomu technologii Apple’a, ale są one mocno nieporęczne i o wiele łatwiej popełnić błąd, niewłaściwie ich używając. Na przykład wywołanie systemowe open (dostępne w uniksowych systemach operacyjnych, takich jak Linux i platformy Apple'a) importuje je jako parę funkcji globalnych:

func open(_ path: UnsafePointer<CChar>, _ oflag: Int32) -> Int32
func open(_ path: UnsafePointer<CChar>, _ oflag: Int32, _ mode: mode_t) -> Int32

Sprawa wygląda inaczej w przypadku modułu System. Zapewnia on idiomatyczne dla Swifta wywołania, które poprawiają ekspresję i zmniejszają ryzyko popełnienia błędów. Definiuje on, na przykład, wywołanie systemowe open jako funkcję statyczną z domyślnymi argumentami w przestrzeni nazw FileDescriptor. Rezultatem jest kod, który czyta się i zachowuje jak idiomatyczny Swift. 

Poniższy przykład tworzy ścieżkę do pliku z literału ciągu znaków i używa go do otwierania i zapisywania w nim informacji:

let message: String = "Hello, world!" + "\n"
let path: FilePath = "/tmp/log"
let fd = try FileDescriptor.open(
  path, .writeOnly, options: [.append, .create], permissions: .ownerReadWrite)
try fd.closeAfter {
  _ = try fd.writeAll(message.utf8)
}

Warto tutaj również zaznaczyć, że System jest multiplatformowy, a nie wieloplatformowy. Zapewnia on oddzielny zestaw API i zachowania dla każdej obsługiwanej platformy, odzwierciedlając podstawowe interfejsy systemu operacyjnego. Pojedynczy import spowoduje pobranie natywnych interfejsów platformy specyficznych dla docelowego systemu operacyjnego.


Swift a wieloplatformowość

Sporym problemem, jeżeli chodzi o wieloplatformowość Swifta, jest Windows, który nie należy do grupy systemów uniksowych. Ilseman starał się jednak wyciągnąć tutaj jak najwięcej dobrego (albo po prostu ukryć łzy i udawać zadowolonego) i po prostu stwierdził, że nadchodzące wsparcie System na Windowsie będzie niesamowitą okazją do pracy nad projektem Swifta. 

Swift dopiero co zaczyna też jako wieloplatformowa technologia (pomimo obsługi Linuksa) i większość przypadków użycia kręci się wokół zastąpienia Objective-C w projektach działających na platformach Apple. Język sam w sobie jest ogólnie uważany za niezły, ale grozi mu poważna konkurencja ze strony Go, czy staruszków pokroju C++ i C. 

Co więcej, wsparcie od IBM dla serwerowego Swifta skończyło się w 2019 i w rezultacie język ten stracił mocno na popularności, którą zdobył tak szybko we wczesnych momentach swojego istnienia. W rankingu RedMonk technologia ta znalazła się dopiero na 11 miejscu, jeżeli chodzi o popularność języków programowania. 

W tym kontekście, starania Apple’a, aby ulepszyć obsługę Swifta na innych platformach (włączając w to Windowsa), mają trochę na celu przywrócenie zainteresowania tą technologią poza światem Apple’a. Powyższe próby mają również na celu pomóc jego programistom w przenoszeniu swoich aplikacji na inne platformy. Problem niestety w tym, że Swift UI, czyli GUI framework, który jest jedną z tych rzeczy, które najbardziej do Swifta przyciągają, istnieje tylko dla platform Apple’a. 

Jak widać, łatwiej powiedzieć, niż zrobić, bo wyzwań jest sporo, a droga do wieloplatformowości długa i wyboista.

Rozpocznij dyskusję

Lubisz dzielić się wiedzą i chcesz zostać autorem?

Podziel się wiedzą z 160 tysiącami naszych czytelników

Dowiedz się więcej