Gobo Eiffel auf OpenBSD

Gobo Eiffel on OpenBSD

eiffel

Die Eiffelsprache ist eine der besten objektorientierten Programmiersprachen, deren Konzepte die meisten von Sprachen wie Java, C# und anderen übernommen wurden.
Leider ist Eiffel inzwischen sehr gering beliebt, was Entwickler kaum dazu ermutigt, es zu lernen oder zu nutzen.

Historisch wurde die Eiffelsprache 1985 von Bertrand Meyer konzipiert. Für diese Sprache gibt es mehrere Kompilatoren:

  • Eiffel aus B. Meyer
  • Gobo Eiffel
  • LibertyEiffel

Diese Sprachen werden alle als Open Source bereitgestellt, aber Gobo Eiffel hat den Vorteil, eine sehr permissive Lizenz zu haben und sich problemlos auf OpenBSD installieren zu lassen.

Installation auf OpenBSD

Beginnen wir damit, das Gobo Eiffel-Softwarepaket auf GitHub herunterzuladen: 'gobo-master.zip'

Lass uns diese Datei in unser Benutzerverzeichnis entpacken.

Wir können auch den Befehl 'git' mit dem
Link verwenden 'https://github.com/gobo-eiffel/gobo.git'

In der .profile-Datei unserer Benutzersitzung fügen wir die folgenden Zeilen ein:

ISE_PLATFORM=openbsd
export ISE_PLATFORM
GOBO=/home/<user>/<path-to>/gobo-master
export GOBO

Beachten Sie, dass es wichtig ist, dass das Wort "bsd" in den ISE_PLATFORM zugewiesenen Namen aufgenommen wird.

Installieren wir das libiconv-Paket im "root"-Modus, der für die Kompilierung von Gobo Eiffel unerlässlich ist.

pkg_add libiconv

Lassen Sie uns überprüfen, ob die installierten Dateien vorhanden sind:

ls -l /usr/local/include/iconv.h
ls -l /usr/local/lib/libiconv.*

Jetzt installieren wir Gobo Eiffel: Dafür müssen wir die Shell install.sh Befehlsdatei im Verzeichnis $GOBO/bin ausführen, die mit dem Kompilieren der Bootstrap C-Version des Compilers beginnt und dann alle Eiffel-Sprachdateien enthält. Die ausführbaren Dateien werden im Verzeichnis $GOBO/bin installiert. Wir müssen überprüfen, ob ein C-Compiler verfügbar ist, und verwenden Clang, das normalerweise auf OpenBSD vorinstalliert ist.

Gehen wir zum Verzeichnis '/home/<user>/gobo-master/bin' und führe den Befehl aus:

sh install.sh -v clang

Alles kompiliert und installiert sich normal und ohne Fehler.

Um die Installation zu testen, führen wir im Verzeichnis /home/<user>/<path-to>/gobo-master den Befehl aus

geant test_ge

Am Ende dieser Installationstestsuite sollten Sie nur Warnungen und möglicherweise leere Fehlermeldungen sehen.

Erstes Programm

Beispiel

Versuchen wir trotzdem ein einfaches Beispiel. Dazu erstellen wir die folgenden Dateien im selben Verzeichnis:

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>

Dann kompilieren wir das Programm, indem wir den Befehl ausführen:

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

Abgesehen von ein paar Warnhinweisen funktioniert es.

Zur Laufzeit wird angezeigt:

Hello, World
0123456789