FAQ

aus SmartEiffelWiki, der freien Wissensdatenbank


Häufig gestellte Fragen

Inhaltsverzeichnis

Allgemeine Fragen zum SmartEiffel-Projekt

Gibt es eine SmartEiffel Mailing-Liste?

Ja! Benutzer und Entwickler von SmartEiffel können ihre Erfahrungen und Ideen auf der offiziellen SmartEiffel Mailing-Liste (http://SmartEiffel.loria.fr/support/mailing-list.html) austauschen.

Bitte beachten Sie, dass diese Liste nicht moderiert wird. Bleiben Sie auf dieser Liste bitte korrekt.

Ist der gesamte Eiffel Quellcode von SmartEiffel verfügbar?

Da es sich um den GNU Eiffel Compiler handelt, befindet sich der gesamte Quellcode von SmartEiffel natürlich in der Distribution. Der Quellcode von zusätzlichen Bibliotheken wird ebenfalls mitgeliefert. Siehe dazu auch diese häufig gestellte Frage, die sich mit Lizenzierung beschäftigt.

Ist SmartEiffel für umfangreiche/kommerzielle Anwendungen geeignet?

SmartEiffel ist in der Tat für umfangreiche Anwendungen geeignet. Ein Eiffel-Compiler ist ein ziemlich großes Projekt, und SmartEiffel selbst ist vollständig in Eiffel geschrieben. SmartEiffel ist vollständig frei, und jedes Privatunternehmen darf SmartEiffel frei verwenden und die damit geschaffenen Produkte frei vertreiben (oder verkaufen). Es müssen keine Lizenzgebühren gezahlt werden.

Außerdem stehen nur die Klassen, die direkt zum Compiler selbst gehören, unter der GPL (d.h. nur die Klassen im Verzeichnis SmartEiffel/tools). Die anderen Klassen stehen nicht unter der GPL, damit sie völlig frei genutzt werden können (z.B. alle Klassen in SmartEiffel/lib).

Bitte denken Sie immer daran, dass SmartEiffel keinerlei Garantien übernimmt (lesen Sie bitte die COPYING-Datei der Distribution). Wie im Kopf der Nicht-GPL-Dateien erwähnt, ist der einzige wichtige Punkt, den Kopf unverändert zu übernehmen, wenn Sie die entsprechende Quelldatei in Ihrem Produkt zur Verfügung stellen. Bezüglich erweitertem Support, Spenden sowie Beratung siehe hier (http://SmartEiffel.loria.fr/support/support.html).

Was ist SmallEiffel im Vergleich zu SmartEiffel?

SmallEiffel ist der alte Name des SmartEiffel-Projekts. Wir haben den Namen geändert, weil wir dachten, der Compiler ist "smart" genug geworden. ;)

Ein Liste mit Änderungen zwischen der letzten Version von SmallEiffel und der ersten von SmartEiffel befindet sich hier (http://SmartEiffel.loria.fr/misc/HISTORY.html#1.0).

Wie kann ich helfen?

Der beste Weg, SmartEiffel und seinen Benutzern zu helfen, ist vermutlich, ein Thema aufzugreifen, das Sie interessiert, und mit SmartEiffel Ihre eigene Bibliothek, Anwendung, Erweiterung, usw. zu entwicklen und für andere Benutzer zu veröffentlichen.

Um doppelte Arbeit zu vermeiden, empfehlen wir nachzusehen, was andere Leute bereits in bezug auf SmartEiffel machen (http://SmartEiffel.loria.fr/general/repository.html), und ihnen zu helfen, falls sie bereits etwas bearbeiten, dass Sie interessiert. Dort sind einige sehr gute Sachen zusammengestellt, von denen wir teilweise noch nicht einmal wussten, als sie entwickelt wurden! :)

Sie können auch einen Blick auf die zukünftige Planung (http://SmartEiffel.loria.fr/papers/future.html) und in die Fehlerdatenbank (Zugriff über die "Bug Report"-Seite) werfen.

Schließlich können Sie auch überlegen, ob Sie die Entwicklung eines bestimmten Features, das sie gerne hätten, finanziell unterstützen wollen.

Ein weitere gute Hilfe für uns ist, die "Bug Report"-Richtlinien zu befolgen, wenn Sie ein Problem mit Smarteiffel gefunden haben.

Warum ändert ihr nicht dieses und ergänzt jenes? Das wäre viel besser/schöner/sonstwas!

Man muss verstehen, dass wir nicht immer alles machen können. Wir können einfach nicht. Weil wir keine Zeit dafür haben. Ob wir mögen oder nicht, wir haben auch noch andere Dinge zu tun, als die Welt mit freiem Zeug zu versorgen und unseren Compiler und/oder die Bibliotheken so anzupassen, dass sie jedem gefallen. Wir tun, was wir können, aber wir können leider keine Wunder bewirken.

Da SmartEiffel kostenlos und quell-offen ist, kann jeder, der Dinge benötigt, die wir nicht bereitstellen, diese jederzeit selbst implementieren und allen zugute kommen lassen. Eine Möglichkeit, dies zu tun, ist, mit der Arbeit anzufangen und andere Leute (d.h. nicht das SmartEiffel-Team ;) ) um Unterstützung und Hilfe zu bitten. Siehe Wie kann ich helfen?

Alternativ können Personen oder Unternehmen, die von uns eine bestimmte Implementierung benötigen, überlegen, ob sie ein Stück Entwicklung von SmartEiffel finanzieren möchten... Immerhin haben wir gehört, dass manche Leute Software verkaufen und ein bisschen Geld damit machen ... ;)))

Wie bleibe ich über SmartEiffel informiert?

Am besten, indem Sie gelegentlich einen Blick auf unsere Webseiten werfen, insbesondere auf die "What's New? (http://SmartEiffel.loria.fr/general/whatsnew.html)"-Seite und die "History of Changes (http://SmartEiffel.loria.fr/misc/HISTORY.html)".

Wer detailiertere Informationen wünscht, kann auch die die SmartEiffel-Mailing-Liste (http://SmartEiffel.loria.fr/support/mailing-list.html) verfolgen oder ins "Bug-Tracking"-System (http://SmartEiffel.loria.fr/support/bug_report.html) schauen.

Welche Dokumentation gibt es zu SmartEiffel?

Die Dokumentation, die SmartEiffel beigefügt ist, ist eine Kopie des Materials der SmartEiffel-Webseite auf http://SmartEiffel.loria.fr. Sie bezieht sich nur auf die Benutzung und Interna von SmartEiffel (ja, wir wissen, dass wir das noch verbessern müssen ;) ).

Bezüglich Information und Dokumentation zur Eiffel-Sprache nutzen Sie bitte die Links auf unserer "Internet resources (http://SmartEiffel.loria.fr/general/resources.html)"-Seite. Wir kennen (bisher?) kein vollständiges, frei erhältliches Handbuch zur Eiffel-Sprache im Web.

Warum schreibt ihr nicht häufiger in den Newsgroups und/oder Mailing-Listen?

Erstens, weil wir glauben, dass zu viel Information schaden kann. Weniger ist mehr :)

Zweitens, weil wir nicht die Zeit dafür haben. Es kostet schrecklich viel Zeit, Diskussionen zu verfolgen, egal welcher Qualität. Wir versuchen das. Aber es kostet noch mehr Zeit, sich daran zu beteiligen. Deshalb müssen wir uns oft zwischen Mailen und der eigentlichen Arbeit an SmartEiffel entscheiden. Da unsere Briefkästen zum Überlaufen neigen, entscheiden wir uns meist für letzteres :)

Ist es schwierig, von einem kommerziellen Eiffel-Compiler zu SmartEiffel zu wechseln?

Wenn Ihre Eiffel-Software nur einfache Typen wie INTEGER, STRING, ARRAY, BOOLEAN, CHARACTER und DOUBLE benutzt, ist es normalerweise sehr einfach, den Code an SmartEiffel anzupassen.

Es ist ein bisschen schwieriger für einfache Ein-/Ausgabe (auf Basis des vordefinierten io), weil einige Features andere Namen haben. Falls Ihre Software großen Gebrauch von z.B. der EiffelBase-Bibliothek macht, kann es sehr schwierig sein. Es muss z.B. berücksichtigt werden, dass SmartEiffel.ARRAY von SmartEiffel.COLLECTION erbt und dass die ISE-Bibliothek auch eine COLLECTION-Klasse hat. Unterklassen von ISE.COLLECTION können übrigens nicht genutzt werden. Die ISE.LINKED_LIST-Klasse kann in Verbindung mit SmartEiffel.ARRAY genutzt werden, weil ISE.LINKED_LIST nicht von ISE.COLLECTION erbt (keine Überschneidungen).

Fragen zur Sprache und/oder Objekt-Orientierten Programmierung

Was ist der Unterschied zwischen Statischem und Dynamischem Typ?

Der statische Typ einer Variablen wird zur Übersetzungszeit bestimmt, der dynamische Typ zur Laufzeit. Der dynamische Typ muss zum statischen Typ konform sein (er kann und wird oft mit dem statischen Typ übereinstimmen).

Beispiel: Eine Variable kann als eine Referenz auf eine Instanz der Klasse FRUIT deklariert worden sein (a_fruit: FRUIT), so dass der statische Typ FRUIT ist, aber ihr kann ein Objekt der Klasse APPLE zugewiesen werden (a_fruit := an_apple), so dass ihr dynamischer Typ dann APPLE ist. Selbstverständlich muss APPLE in diesem Beispiel ein Erbe von FRUIT sein.

Was ist Typ-Vorhersage ("type prediction")?

Typ-Vorhersage wird der Versuch des Übersetzers genannt, den dynamischen Typ eines Ausdrucks während des Übersetzens vorherzusagen.

Fragen zur Eiffel-Sprache des SmartEiffel-Projekts

Warum unterscheidet SmartEiffel die Groß-/Kleinschreibung?

Wie die meisten Computersprachen unterscheidet SmartEiffel zwischen Groß- und Kleinschreibung. Bei dieser Entscheidung haben wir uns von den Zielen der Leserlichkeit, Gestaltung und Vereinfachung leiten lassen.

Was die Schlüsselwörter betrifft, so sind diese leichter zu erkennen, wenn sie immer auf dieselbe Weise geschrieben werden. Deshalb schreiben wir immer loop, und nicht Loop oder gar LoOp. Wir sollten uns auch in anderer Hinsicht gute Schreibweisen angewöhnen: diese Regel wird verallgemeinert und dadurch in Zukunft noch strenger werden. Von jetzt an sollten wir uns z.B. alle die Schreibweisen Current, Void oder True angewöhnen.

Großschreibung wird auch benutzt, um Klassennamen von anderen Namen zu unterscheiden. Daher wissen wir, dass FOO ein Klassenname ist, foo jedoch nicht, ohne irgendwo anders im Quelltext nachsehen zu müssen.

Die Unterscheidung von Groß/Kleinschreibung erlaubt letztlich auch präzisere Fehlermeldungen. Was die Arbeit für Menschen einfacher macht, vereinfacht sie auch für den Übersetzer.

Was ist die Semantik (Bedeutung) einer konstanten Zeichenkette ("manifest string")?

Es ist sicherlich wichtig zu wissen, was genau passiert, wenn man ein konstantes STRING-Attribut definiert, z.B. durch:

Message: STRING is "abc"

Diese Definition eines konstanten Attributs ist die Kurzform der folgenden Schreibweise:

Message: STRING is
   once
      create Result.make(3)
      Result.extend('a')
      Result.extend('b')
      Result.extend('c')
   end

Man sieht natürlich, dass diese Funktionsdefinition eine once-Funktion definiert, und folglich wird eine und nur eine Zeichenkette erzeugt, egal, was passiert. Hinsichtlich der Performance muss man auch zwischen

string := "abc"

und

string := once "abc"

unterscheiden. Wie leicht zu erraten ist, erzeugt die Anweisung ohne once z.B. innerhalb einer Schleife jedes Mal eine neue Zeichenkette, wenn diese Zeile erneut ausgeführt wird!

Der obige once-Ausdruck ist nur für konstante STRINGs und UNICODE_STRINGs gültig. Hier ein Beispiel für einen konstanten UNICODE_STRING (man beachte das große U):

unicode_string := once U"abc"

Die Option -manifest_string_trace des [compile_to_c (http://SmartEiffel.loria.fr/man/compile_to_c.html)]-Kommandos ermöglicht das Auffinden von unerwünschten konstanten Zeichenketten ohne once.

Was ist ein CATCALL?

CATCALL ist in der Eiffel-Welt eine Kurzform für Changing Availability or Type of CALLs.

Was ist SCOOP ?

SCOOP bezeichnet eine Sprachunterstützung für verteilte Programmierung. Es ist ein Akronym für Simple Concurrent Object-Oriented Programming. SCOOP ist noch nicht in SmartEiffel enthalten und ist sicherlich der wichtigste fehlende Teil.

Fragen zu den Bibliotheken von SmartEiffel

Wie soll ich eine Datei einlesen?

Um eine Datei einzulesen, wird zunächst ein Zeichen gelesen und anschließend last_character NUR DANN benutzt, wenn end_of_input während des Lesens des Zeichens nicht erreicht wurde.
Vor jedem Lesen (außer dem allerersten) muss end_of_input getestet werden, weil alle read_*-Prozeduren ein nicht gesetztes end_of_input voraussetzen. Warum? Diese Voraussetzung bedeutet, dass nach einem Lesezugriff, der am Ende der Datei gescheitert ist, jeder weitere Lesezugriff ungültig ist. Beispiel:

file: TEXT_FILE_READ; file_name: STRING
...
-- Assumming here that `file' and `file_name' are not Void:
file.connect_to(file_name)
if file.is_connected then
   from
      file.read_character
   until
      file.end_of_input
   loop
      io.put_character(file.last_character)
      file.read_character
   end
   file.disconnect
end

Fragen zu den SmartEiffel-Tools

Ist inkrementelles Compilieren mit SmartEiffel möglich?

Wegen des SmartEiffel-Typsystems erzeugt SmartEiffel alle benötigten C-Dateien immer völlig neu. Da aber alte C-Dateien automatisch gespeichert werden, müssen nur die geänderten C-Dateien neu übersetzt werden. Zu Einzelheiten siehe man/compile (http://SmartEiffel.loria.fr/man/compile.html).

Gibt es einen Mechanismus für vorübersetzte Bibliotheken?

Nein, so einen Mechanismus bietet SmartEiffel nicht. Aber falls Sie sich um die Übersetzungsgeschwindigkeit sorgen, keine Angst, nicht nur vorübersetzte Bibliotheken ermöglichen eine schnelle Übersetzung. Probieren Sie SmartEiffel aus, und Sie werden sehen :)

Ist es möglich, den Boehm-Demers-Weiser-Garbage-Collector mit SmartEiffel zu benutzten?

Ja.
Man muss nur die Erzeugung des Garbage-Collectors von SmartEiffel ausschalten (option -no_gc) und ihn durch die BDW-Bibliothek ersetzen. Der BDW-Garbage-Collector kann leicht eingefügt werden, weil SmartEiffel nur malloc/realloc/calloc benutzt.
Die BDW-Bibliothek ist zu finden unter:

http://www.hpl.hp.com/personal/Hans_Boehm/gc/
Integration des Boehm-Demers-Weiser-Garbage-Collectors in SmartEiffel (aus einer Beschreibung von Dietmar Wolz):

  1. Datei gc.a aus dem BDW-Paket erzeugen. Dann diese Datei gc.a unter /usr/lib/libgc.a ablegen.
  2. Datei gc.h ins Arbeitsverzeichnis ablegen und folgende Zeilen ergänzen:
    #define malloc(n) GC_malloc(n)
    #define calloc(m,n) GC_malloc((m)*(n))
    #define realloc(p,n) GC_realloc((p),(n))
    #define free(p) GC_free(p)
  3. Statt des Aufrufs
        "compile -o executable -boost -O root"
    folgenden Aufruf verwenden:
        "compile -o executable -boost -O root -no_gc -lgc -include gc.h"

Wie kann der Garbage-Collector an eine neue Architektur angepasst werden?

Wenn Ihre Architektur für das GC eine spezielle Handhabung erfordert (z.B. weil der Stack nicht zusammenhängend ist, weil einige Register bei 'setjmp' nicht auf den Stack geschrieben werden ...), dann müssen Sie für Ihr System die Funktion `mark_stack_and_registers' in der Datei SmartEiffel/sys/runtime/c/gc_lib.c implementieren.

Falls Sie eine Meldung bekommen, dass die Stackrichtung falsch ist, sollten Sie die Macro-Definition ändern, so dass der anderen generische Code genutzt wird (es gibt einen generischen Code für jede Stackrichtung).

Als Test des GCs sollten Sie alle Dateien aus dem Verzeichnis SmartEiffel/misc/benchmarks/gc ausführen können.

Wie wird SmartEiffel übersetzt?

SmartEiffel wird mit den Optimierungsoptionen -boost und -no_gc übersetzt. Der Garbage-Collector ist für die SmartEiffel-Kommandos nutzlos: da die erste Version von SmartEiffel keinen GC enthielt, waren wir bei der Entwicklung sehr sorgfältig mit der Speicherverwaltung.

SmartEiffel wird außerdem mit C-Optimierungen übersetzt (hängt ab vom verwendeten C-Compiler; wir benutzten normalerweise gcc).

Questions about the SmartEiffelWiki

Warum gibt es ein Inhaltsverzeichnis im Wiki?

Der Grund dafür ist, dass wir eine gedruckte Version von allen im Wiki verfügbaren Informationen erstellen können wollen. Das Inhaltsverzeichnis gibt die Reihenfolge der Seiten für den Druck an. Ein Kommando zum Generieren des Großen Buchs gibt es jedoch noch nicht.

Warum sind alle Seitennamen englisch?

Wie Ihnen vielleicht aufgefallen ist, haben alle Seiten englische Namen. Zum Beispiel trägt auch das deutsche Inhaltsverzeichnis den Namen Table of Contents. Nun, dies dient lediglich der Vereinfachung des Wikis selbst. Es wird dadurch leichter, zum Beispiel eine englische Verknüpfung in eine entsprechende deutsche Verknüpfung zu ändern, und umgekehrt.

Wie fügt man mit tgif erstellte Grafiken ein?

Alle Grafiken im Großen Buch wurden mit dem Programm tgif erstellt, weil sich so .png-Dateien für die Online-Version (das Wiki) und .eps-Dateien für LaTeX-Dokumente (für die gedruckte Version) aus denselben Quellen erzeugen lassen.

Da die Grafiken für jedermann zu bearbeiten sein sollten, werden diese Quelldateien (mit der Endung .obj) auch auf dem Server abgelegt. Es gilt die Regel, dass für jede Datei Foo.png auf dem Server auch eine zugehörige tgif-Quelldatei mit dem Name Foo.obj vorhanden sein muss.

Um eine Datei auf dem Server abzulegen, benutzen Sie den Punkt "Hochladen" im Menü links, der die gleichnamige Seite aufruft.

Um umgekehrt die tgif-Quelldatei einer Grafik herunterzuladen, gehen Sie auf die Spezialseite "Bilderliste". Klicken Sie dann mit der rechten Maustaste auf die Beschreibung der gewünschten .obj-Datei, und wählen Sie "Speichern unter", um die Datei lokal zu speichern.

Ist es notwendig, für Grafiken tgif zu verwenden?

Momentan sind alle Grafiken mit tgif erstellt worden, hauptsächlich aus historischen Gründen, aber auch, weil dieses Programm gut arbeitet, unter Linux läuft und die Schemata sowohl ins .png-Format als auch, was zwingend notwendig ist, ins .eps-Format umwandeln kann. Außerdem ist das tgif-Quellformat, das .obj-Format, ein leicht verständliches und portierbares Textformat.

Wir haben nichts gegen irgendein anderes Programm, solange dieses Programm ebenfalls das .png-Format für das Wiki sowie ein LaTeX-kompatibles Format erzeugen kann. Das Format für die Quelldateien muss ebenfalls verständlich und portierbar sein. Und schließlich muss das Programm auch unter Linux laufen und freie Software sein.

Wie Sie bemerkt haben werden, wollen wir uns das Leben nicht schwer machen, und deshalb bevorzugen wir es, die Zahl der für Grafikerzeugung genutzten Programme zu begrenzen. Wenn Sie wirklich wollen, dass wir ein anderes Programm akzeptieren, nehmen Sie bitte Kontakt mit uns auf.

'Persönliche Werkzeuge
Andere Sprachen