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.dlldotnet: dotnet MyExe.dllCe 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:
.Net utilisant Arcane