Table des matières
Gobo Eiffel sur OpenBSD

Le langage Eiffel fait partie des meilleurs langages de programmation orientés objets dont la plupart des concepts ont été repris par des langages comme Java, C# et d’autres.
Malheureusement, Eiffel a maintenant une popularité très faible, ce qui n’encourage guère les développeurs à l’apprendre ou à l’utiliser.
Historiquement, le langage Eiffel a été conçu par Bertrand Meyer en 1985. Il existe plusieurs compilateurs pour ce langage :
- Eiffel de B. Meyer
- Gobo Eiffel
- LibertyEiffel
Ces langages sont tous distribués en source libre, mais Gobo Eiffel a l’avantage d’avoir une licence très permissive et de s’installer facilement sur OpenBSD.
Installation sur OpenBSD
Commençons par télé-charger le paquet logiciel de Gobo Eiffel sur GitHub : gobo-master.zip
Décompressons ce fichier dans notre répertoire utilisateur.
Nous pouvons aussi utiliser la commande git avec le lien
https://github.com/gobo-eiffel/gobo.git
Dans le fichier .profile de notre session utilisateur, insérons les lignes :
ISE_PLATFORM=openbsd
export ISE_PLATFORM
GOBO=/home/<user>/<path-to>/gobo-master
export GOBONotez qu’il est important que le mot « bsd » figure dans le nom assigné à ISE_PLATFORM.
Installons en mode « root » le paquet libiconv qui s’avère indispensable à la compilation de Gobo Eiffel.
pkg_add libiconvVérifions que les fichiers installés sont présents:
ls -l /usr/local/include/iconv.h
ls -l /usr/local/lib/libiconv.*Installons maintenant Gobo Eiffel, pour cela nous devons exécuter le fichier de commandes de shell install.sh situé dans le répertoire $GOBO/bin ce qui va lancer la compilation de la version bootstrap en C du compilateur puis de l’ensemble des fichiers en langage Eiffel. Les fichiers exécutables seront installés dans le répertoire $GOBO/bin. Nous devons vérifier qu’un compilateur C est disponible et nous utiliserons clang qui est normalement pré-installé sur OpenBSD.
Plaçons-nous dans le répertoire /home/<user>/<path-to>/gobo-master/bin
et lançons la commande :
sh install.sh -v clangTout se compile et s’installe normalement sans erreur.
Pour tester l’installation exécutons dans le répertoire /home/<user>/<path-to>/gobo-master, la commande
geant test_geA la fin de cette suite de tests d’installation, vous devriez ne voir s’afficher que des avertissements et éventuellement des messages d’erreurs vides
Premier programme
Exemple
Essayons tout de même un exemple simple. Pour cela créons les fichiers suivants dans un même répertoire :
hello.e
class HELLO
create
make
feature
i: INTEGER
make
do
print ("Hello, World%N")
from
i := 0
until
i >= 10
loop
print (i)
i := i + 1
end
print ("%N")
end
endhello.ecf
<?xml version="1.0" encoding="ISO-8859-1"?>
<system
xmlns="http://www.eiffel.com/developers/xml/configuration-1-22-0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.eiffel.com/developers/xml/configuration-1-22-0 http://www.eiffel.com/developers/xml/configuration-1-22-0.xsd"
name="hello"
uuid="8C35A383-9927-4EF8-8784-D6F287B296E7"
>
<target name="hello">
<root class="HELLO" feature="make"/>
<file_rule>
<exclude>.git</exclude>
</file_rule>
<option warning="true">
<assertions precondition="true" postcondition="true" check="true" invariant="true" loop="true" supplier_precondition="true"/>
</option>
<!-- Assumes you set the GOBO environment variable to the path to your gobo repo folder, as per gobo's install instructions. -->
<library name="free_elks" location="${GOBO}/library/free_elks/library_ge.ecf" readonly="true"/>
<cluster name="root_cluster" location="./" recursive="false">
<file_rule>
<exclude>.git</exclude>
</file_rule>
</cluster>
</target>
</system>Puis compilons le programme en lançant la commande :
gec hello.ecfDegree 6: 0/0/0 0:0:0.058 Degree 5: 0/0/0 0:0:0.522 Degree 4: 0/0/0 0:0:0.182 Degree 3: 0/0/0 0:0:0.244 Degree -2: 0/0/0 0:0:0.221 Degree -3: 0/0/0 0:0:0.210 hello1.c(hello1.o:(eif_file_creatable)): warning: strcpy() is almost always misused, please use strlcpy() hello1.c(hello1.o:(eif_file_owner)): warning: sprintf() is often misused, please use snprintf() Degree -4: 0/0/0 0:0:7.088 Total Time: 0/0/0 0:0:8.704
À part quelques messages d’avertissement, ça marche!
À l’exécution, il affiche :
Hello, World 0123456789