Swift unter Ubuntu 15.10/16.04 ausprobieren

Im Dez. 2015 hat Apple die neue Programmiersprache Swift zum Open-Source-Projekt gemacht (siehe auch meinen diesbezüglichen Blog-Beitrag auf https://kofler.info). Damit ist es nun einfach, Swift unter Ubuntu auszuprobieren. Für diesen Beitrag habe ich ursprünglich mit Ubuntu 15.10 gearbeitet. Im März 2016 habe ich eine Entwicklerversion von Swift 3.0 nochmals unter Ubuntu 16.04 Beta ausprobiert und den Text aktualisiert.

Swift steht für Ubuntu als tar-Archiv unter https://swift.org/download/ zum Download zur Verfügung. Die Installation ist einfach:

sudo apt-get install clang libicu-dev
wget https://swift.org/builds/development/ubuntu1510/swift-DEVELOPMENT-SNAPSHOT-2016-03-01-a/swift-DEVELOPMENT-SNAPSHOT-2016-03-01-a-ubuntu15.10.tar.gz
tar xzf swift-DEV*.tar.gz
export PATH=$(pwd)/swift-DEVELOPMENT-SNAPSHOT-2016-03-01-a/usr/bin/:"${PATH}"
swift -version
  Swift version 3.0-dev (LLVM b361b0fc05, Clang 11493b0f62, Swift 24a0c3de75)
  Target: x86_64-unknown-linux-gnu

Der exakte Name des Download-Links und der Verzeichnisse ändert sich natürlich mit jedem neuen Swift-Snapshot!

Hello World!

Um den Compiler zu testen, speichern Sie den folgenden Hello-World-Einzeiler in der Datei hello-world.swift:

print("Hello World!")

Dieses Programm kompilieren Sie nun mit swiftc und führen es aus:

swiftc hello-world.swift -o hello-world
ls -l hello-world
  -rwxrwxr-x 1 kofler kofler 10112 Dez 12 16:11 hello-world
./hello-world
  Hello World!

Core Libraries nutzen

Grundsätzlich stehen die von OS X oder iOS bekannten Bibliotheken unter Linux nicht zur Verfügung. Apple arbeitet aber an einer Sammlung von Basisklassen, die in den Core Libraries) gebündelt werden. Diese Bibliotheken sollen Klassen aus der Foundation, sowie aus libdispatch und XCTest enthalten. Diese Bibliothek wird selbst in Swift entwickelt und steht bereits in einer ersten, sehr frühen und unvollständigen Version bereits als Open-Source-Code zur Verfügung. Wie weit die Arbeiten vorangeschritten sind, geht aus dieser Status-Seite hervor.

Wenn Sie Swift wie oben beschrieben installiert haben, stehen Ihnen die Core Libraries bereits zur Verfügung. Einen ersten Test können Sie mit diesem Mini-Programm durchführen. Es erzeugt ein NSDate-Objekt mit dem aktuellen Datum, extrahiert daraus Jahr, Monat und Tag und zeigt diese Daten an.

// Datei hello-core.swift
import Foundation
let now = NSDate()
let cal = NSCalendar.currentCalendar()
let comps = cal.components(
  [.Day, .Month, .Year], fromDate: now)
print("Jahr: \(comps!.year)  Monat: \(comps!.month)  Tag: \(comps!.day)")

Hinweis: Die Klassennamen der Core Libraries sollen in naher Zukunft den Prefix NS verlieren. Das obige Beispiel muss dann entsprechend angepasst werden.

So kompilieren Sie das Programm und führen es aus:

swiftc hello-core.swift -o hello-core && ./hello-core
  Jahr: 2015  Monat: 12  Tag: 12

Das Kompilat ist klein, greift aber auf diverse Bibliotheken zurück:

ls -l hello-core
  -rwxrwxr-x 1 kofler kofler 15896 Mär  2 13:18 hello-core
ldd hello-core
  linux-vdso.so.1 =>  (0x00007ffd20bb4000)
  libswiftCore.so => [swift-path]/usr/lib/swift/linux/libswiftCore.so (0x00...)
  libFoundation.so => [swift-path]/usr/lib/swift/linux/libFoundation.so (0x00...)
  libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00...)
  libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00...)
  libswiftGlibc.so => [swift-path]/usr/lib/swift/linux/libswiftGlibc.so (0x00...)
  libswiftSwiftOnoneSupport.so => [swift-path]/usr/lib/swift/linux/libswiftSwiftOnoneSupport.so (0x00...)
  libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00...)
  libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00...)
  libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00...)
  libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00...)
  libicuuc.so.55 => /usr/lib/x86_64-linux-gnu/libicuuc.so.55 (0x00...)
  libicui18n.so.55 => /usr/lib/x86_64-linux-gnu/libicui18n.so.55 (0x00...)
  libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00...)
  /lib64/ld-linux-x86-64.so.2 (0x00...)
  libicudata.so.55 => /usr/lib/x86_64-linux-gnu/libicudata.so.55 (0x00...)
  libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00...)
  libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00...)
  liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00...)

REPL-Modus

Swift kann auch interativ ausgeführt werden, um Kommandos auszuprobieren (REPL = Read Eval Print Loop, siehe auch meinen schon älteren Blogbeitrag Swift-Scripts, Compiler und REPL). Dazu führen Sie einfach das Kommando swift in einem Terminal aus. Besonders praktisch: Mit der Tabultator-Taste können Sie Klassen- und Methodennamen vervollständigen, wobei die zur Auswahl stehenden Schlüsselwörter angezeigt werden.

Swift interaktiv ausprobieren
Swift interaktiv ausprobieren

Swift ohne Installation ausprobieren

Wer keine Lust hat, Swift herunterzuladen und zu installieren, kann Swift auch im Webbrowser ausprobieren. IBM stellt eine Sandbox zur Verfügung, in der Sie Swift-Code samt Vervollständigung von Schlüsselwörtern und Syntax-Highlighting eingeben und ausprobieren können:

http://swiftlang.ng.bluemix.net/#/repl

Ich muss nicht extra erwähnen, dass diese Sandbox unter Linux löuft, oder?

Swift im Webbrowser ausprobieren
Swift im Webbrowser ausprobieren

Leseempfehlungen

Sobald Sie Bibliotheken von Linux verwenden möchten, wird die Programmierung deutlich komplizierter: Sie müssen sich mit dem Package Manager anfreunden und ein Package definieren, das gewissermaßen die Schnittstelle zur externen Bibliothek herstellt. (Für die glibc ist ein derartiges Package bereits vorinstalliert.) Die Vorgehensweise ist beispielsweise auf den folgenden Seiten beschrieben:

Praktischer Nutzen

Der praktische Nutzen von Swift ist für Linux-Anwender zum gegenwärtigen Zeitpunkt praktisch Null. Das wird sich vermutlich erst mit der für Herbst 2016 erwarteten Freigabe von Swift 3.0 ändern. Bis dahin wird es vermutlich auch eine Sammlung von Bibliotheken und Modulen zur Nutzung von Swift unter Linux geben. Praktisch wäre natürlich auch eine IDE …