Swift : performant, clair, open-source, et multi plate-forme
Swift est un langage de programmation performant et clair. Étendre le potentiel de Swift à d'autres plate-formes que celles d'Apple est possible. Cette note présente le langage Swift pour un usage 'côté serveur', elle montre comment configurer un environnement de développement sur Linux, et donne quelques projets en exemple.
Au menu:
- À propos de Swift
- Les outils standards
- Des outils complémentaires
- Installer un assistant syntaxique
- Installer un debugger
- Créer un programme executable
- Debugger le programme
- Complément d’infos
- Vérifions quelques possibilités:
- serveur https
- analyseur syntaxique
- transformation markdown en html
- encodage/décodage json
À propos de Swift
Swift est le langage de programmation des appareils Apple, mais il est ouvert, sous licence ‘open source’, à d’autres plate-formes. Celles-ci sont officiellement supportées : MacOS, iOS, Ubuntu, CentOS, Amazon Linux, et Windows 1.
Des performances comparables au C, une gestion de la mémoire pour le compte du programmeur, une syntaxe élaborée et simple, un typage fort, reconnu pour sa robustesse, Swift est un candidat sérieux pour le développement côté serveur 2.
Sur bien des points Swift est comparable à Rust 1. S’agissant de langages compilés en executables natifs, les performances sont loin devant celles de Node.js, Java ou Php par exemple, qui sont interprétés.
Outils standards
Le langage Swift c’est aussi :
- un compilateur
- un gestionnaire de paquet
- une compilation utilisant le standard LLVM
- un debugger utilisant le standard LLDB
- un serveur syntaxique utilisant le standard LSP.
Cet ensemble permet de développer, mais pour développer plus ‘confortablement’ il est bon d’avoir :
- un assistant syntaxique
- un debugger plus visuel
Nous allons configurer ces deux outils complémentaires.
Outils complémentaires
Nous allons :
- installer un assistant syntaxique
- installer un debugger
- créer un programme Swift executable
- créer une configuration pour debugger le programme
Pré-requis:
C’est parti !
Installer un assistant syntaxique
Swift utilise le standard LSP.
Un ‘serveur de langage’ respectant ce standard fait partie de Swift. Il est de ce fait disponible sur le site source du projet. Il est nommé sourcekit-lsp
.
Nous allons par conséquent :
- télécharger,
- compiler et
- installer l’extension LSP de Swift pour VSCode.
Voici les commandes :
git clone https://github.com/apple/sourcekit-lsp.git
cd Editors/vscode
npm run createDevPackage
code --install-extension out/sourcekit-lsp-vscode-dev.vsix
La première ligne télécharge le code source du projet sourcekit-lsp
de Swift.
La deuxième nous positionne dans le répertoire du projet contenant l’extension destinée à l'éditeur qui nous intéresse, VSCode.
La troisième compile l’extension, qui utilise le gestionnaire npm
.
La dernière installe l’extension en lançant VSCode.
L’installation peut aussi se faire en utilisant l’option install from vsix
de l’onglet ‘extension’, dans VSCode.
C’est fini pour l’analyse syntaxique, passons au debugger.
Installer un debugger
Puisque Swift utilise le standard LLDB nous allons installer une extension LLDB
pour VSCode. Il en existe plusieurs, à ce jour la plus populaire est CodeLLDB.
Pour l’installation nous utilisons l’onglet extension
de VSCode, en effectuant une recherche de CodeLLDB
, puis en cliquant sur install
.
Utilisons le tout dans un exemple.
Créer un programme
Voici les commandes pour créer un programme swift executable :
mkdir monProjet && cd $_
swift package init --type executable
La première ligne créé un répertoire monProjet
et nous positionne dedans.
La deuxième créé un projet Swift de type executable contenant ce programme Sources/monProjet/main.swift
:
print("Hello, world!")
On peut voir l’assistant syntaxique en action :
- Si on passe la souris sur un élément de langage on obtient l’aide en ligne
- Si on commence à taper un mot, puis CTRL-ESPACE, on obtient des propositions
- Si on passe la souris sur une erreur on obtient des propositions de correction
Debugger le programme
À la racine du projet créons un fichier .vscode/launch.json
contenant ceci :
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "debug monProjet",
"program": "${workspaceFolder}/.build/x86_64-unknown-linux-gnu/debug/monProjet",
"args": [""],
"cwd": "${workspaceFolder}",
"preLaunchTask": "swift-build"
}
]
}
Cela ajoute une configuration nommée debug monProjet
au debugger VSCode.
Cette ligne indique le nom complet du programme Swift compilé :
"program": "${workspaceFolder}/.build/x86_64-unknown-linux-gnu/debug/monProjet"
Si on met un point d’arrêt dans le programme Sources/monProjet/main.swift
et que l’on lance le debugger avec la configuration debug monProjet
on obtient ceci :
Complément
En complément nous créons la tache VSCode nommée swift-build
permettant de compiler monProjet
.
Elle est appelée au lancement du debugger via la ligne "preLaunchTask": "swift-build"
du fichier launch.json
créé précédemment.
A la racine du projet nous créons un fichier .vscode/tasks.json
contenant ceci :
{
"version": "2.0.0",
"tasks": [
// compile your SPM project
{
"label": "swift-build",
"type": "shell",
"command": "swift build"
},
// compile your SPM tests
{
"label": "swift-build-tests",
"type": "process",
"command": "swift",
"group": "build",
"args": [
"build",
"--build-tests"
]
}
]
}
Exemples : partage de quelques projets Swift sous Linux
Pour terminer cette note j’ai souhaité vérifier certaines possibilités de Swift sur Linux en réalisant ces mini-projets :
Listen
Un serveur HTTP miniature, pour des requêtes en SSL et POST uniquement. 127 lignes de code Swift pour le serveur, 41 lignes pour l’executable en ligne de commande. Compatible Linux, MacOS …
Lex
Un exemple d’analyse syntaxique du format Markdown. Un programme de 30 lignes pour extraire des éléments de langage d’un texte.
Render
Utiliser la syntaxe de Swift pour transformer un document au format Markdown en Html.
Store
Sérialisation JSON d’un objet, son écriture dans un fichier.
-
Annonce du support officiel de Microsoft Windows pour Swift. ↩︎
-
Swift côté serveur, liens d’information : https://github.com/apple/swift-nio , https://swift.org/server/ ↩︎
-
Article wikipedia sur l’interpréteur de commandes. En standard sous Ubuntu appuyer simultanément sur CTRL-ALT-T pour ouvrir un interpréteur. ↩︎