Gobo Eiffel sur OpenBSD

Gobo Eiffel sur OpenBSD

eiffel

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 GOBO

Notez 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 libiconv

Vé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 clang

Tout 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_ge

A 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

end

hello.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.ecf
Degree 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