La plus grande partie de l'API Arcane est accessible via la technologie .Net
. Il est possible d'écrire des modules et service en C#.
Les pages suivantes sont disponibles :
C#
.En 2019, il existe deux environnments pour .Net
:
.Net Framework
qui est à l'origine développé pour Windows mais pour lequel il existe une implémentation open source appelée mono
.coreclr
et qui utilise un nouveau framework appelé '.Net Core'. Cette implémentation est disponible pour Windows, Linux et MacOS..Net Core
et .Net Framework
partagent une grande parties des API communes et il n'y en général pas de difficultés pour utiliser l'un ou l'autre. Le framework historique .Net Framework
n'évoluera plus (mais continuera à être maintenu) et toutes les nouveautés se feront dans le framework '.Net Core'. Pour simplifier la nomenclature, en 2020 il n'y aura plus qu'un seul nom qui sera .Net
.
Arcane supporte les deux implémentations mono
et coreclr
. Les versions minimales sont 5.16
pour mono
et 3.0
pour coreclr. Pour les deux implémentations, il est possible de lancer du code C# soit avec un main
en C#, soit en mode embarqué avec un main
en C++.
Le mode avec le main en C# permet de lancer le code comme n'importe quelle code C#:
mono
: mono MyExe.dll
dotnet
: dotnet MyExe.dll
Ce mode est surtout utile pour débugger, par exemple avec 'Visual Studio Code' (TODO: faire exemple).
Le mode embarquée lance le code comme un exécutable C++ et c'est l'appel à Arcane::ArcaneLauncher::run() qui va éventuellement charger le runtime '.Net' et charger les assembly nécessaires.
.Net
est une technologie assez similaire à java
dans son principe. Le code source peut être écrit en plusieurs langages (C#, F#, Visual Basic). Le code est compilé en un pseudo assembleur (bytecode) indépendant de la plateforme. Le produit de cette compilation s'appelle une assembly (équivalent aux bibliothèques dynamiques du C++). En '.Net', l'extension est .dll
comme les bibliothèques dynamiques (Dynamic Loaded Library) sous Windows.
Comme java, le bytecode est lors de l'exécution convertit en code spécifique à l'architecture de la machine cible. Le code .Net
nécessite la présence d'un runtime pour gérer cette partie ainsi que pour d'autres fonctionnalités comme le Ramasse Miette (Garbage Collector).
Par convention, les fichiers C# ont pour extension .cs
. Le code en C# est très similaire au code C++:
.Net
utilise un outil appelé msbuild
pour compiler et il faut définir un projet au format XML contenant les informations nécessaires.
msbuild
utilise un fichier projet pour définir les éléments de compilation. Dans le principe, ce fichier projet est comme le Makefile
pour l'outil make
ou le CMakeLists.txt
pour l'outil CMake
. En C#, pour msbuild
, ce fichier a par convention l'extension .csproj
. En général, un projet C# est créé dans un répertoire spécifique. La commande dotnet new
permet de créer un répertoire avec un projet :
Cela va créer un répertoire MyTest
avec à l'intérieur un fichier Program.cs
et un fichier MyTest.csproj
.
Le fichier MyTest.csproj
sera comme suit :
et le fichier Program.cs
comme suit :
Pour compiler ce fichier, il suffit de se placer dans le répertoire du projet et de lancer la commande dotnet build
.
.cs
présent dans le répertoire du projet et les sous-répertoires sont compilés. C'est pour cela qu'il est préférable de placer les projets dans des sous-répertoires. Pour éviter ce comportement, il est possible de mettre la valeur false à la propriété EnableDefaultCompileItems et d'ajouter spécifiquemet les fichiers à compiler. Par exemple :La commande dotnet build
créé par défaut l'assembly dans le répertoire bin/${Config}/${framework}
avec Config ayant pour valeur Debug ou Release et framework la valeur de la propriété msbuild
TargetFramework. Dans notre exemple, le répertoire sera donc bin/Debug/netcoreapp3.1
.
Pour exécuter le programme, il faut lancer la commande :
dotnet run
. Mais avant de lancer l'exécution, cette dernière commande va vérifier s'il est nécessaire de recompiler le programme ce qui peut prendre du temps. Si on est sûr de ne rien avoir modifié, spécifier directement la dll en argument de dotnet
est préférable.Si on ne souhaite pas avoir d'exécutable en C# mais qu'on souhaite utiliser de code C#, alors le fonctionnement est quasi identique mais au lieu de créer un exécutable, il faut créér une bibliothèque. Pour cela, il suffit de créer le projet C# avec l'option dotnet new classlib -n MyLib
.
Main
). Dans les deux cas, l'extension aura pour nom .dll
et un exécutable pourra être utilisé partout où une DLL peut être utilisée.L'ajout des références aux DLL Arcane se fait via l'élément <PackageReference>
dans msbuild
, par exemple:
Les packages nuget
suivants sont fournies par Arcane :
.h
sont dans le répertoire 'arcane').hdf5
.La page Extensions C# avec Swig décrit comment rendre accessible en C# les classes de Arcane et étendre d'autres classes.
Il faut tout d'abord avoir dotnet
dans son chemin. Si Arcane est installé dans le répertoire ${ARCANE_PREFIX}
alors il faut lancer les commandes suivantes :
Pour compiler le code et l'installer dans un répertoire, il faut exécuter la commande suivante :
Cela aura pour effet d'installer les fichiers générés dans le répertoire out
. Si le projet s'appelle 'toto', on aura les fichiers suivants: