January 20, 2020

960 mots 5 mins

Swift : performant, clair, open-source, et multi plate-forme

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:

  • Savoir utiliser la ligne de commande 3.
  • Swift est installé sur le poste 4.
  • VSCode est installé sur le poste 5.
  • Git est installé sur le poste 6.
  • Npm est installé sur le poste 7.

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 …

code source

Lex

Un exemple d’analyse syntaxique du format Markdown. Un programme de 30 lignes pour extraire des éléments de langage d’un texte.

code source

Render

Utiliser la syntaxe de Swift pour transformer un document au format Markdown en Html.

code source

Store

Sérialisation JSON d’un objet, son écriture dans un fichier.

code source


  1. Annonce du support officiel de Microsoft Windows pour Swift. ↩︎

  2. Swift côté serveur, liens d’information : https://github.com/apple/swift-nio , https://swift.org/server/ ↩︎

  3. Article wikipedia sur l’interpréteur de commandes. En standard sous Ubuntu appuyer simultanément sur CTRL-ALT-T pour ouvrir un interpréteur. ↩︎

  4. Page expliquant comment installer Swift ↩︎

  5. Le site Microsoft VSCode. ↩︎

  6. Le site git ↩︎

  7. Page expliquant comment installer npm ↩︎