 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
kawe
Anmeldungsdatum: 25.03.2012 Beiträge: 41
|
Verfasst am: 06.08.2013, 13:10 Titel: Interne Organisation von UDTs garantiert? |
|
|
Da ich leider feststellen musste, dass FB 0.9x gar nicht (mehr?) unter älteren Windowsversionen startbar
und FB 0.24 zwar startbar aber unter älteren Windowsversionen heftige Bugs bereit hat (z. B. Screen[Res]),
gehe ich notgedrungen (erstmal?) auf Version <= 0.23 zurück,
d. h. Vererbung ade.
Da kommt man ja auf alte C Ideen:
Nimmt man das Beispiel von:
http://www.freebasic-portal.de/befehlsreferenz/extends-634.html
und modifiziert es zu ...
Code: |
Type Haustier
As Integer beine = 4
As Integer schwanz = 1
End Type
Type Hund
As Haustier haustier = Haustier()
As Integer anhaenglich = 1
Declare Sub gibLaut
End Type
Sub Hund.gibLaut
Print "Wuff!"
End Sub
Type Chihuahua
As Hund hund = Hund()
Declare Sub gibLaut
End Type
Sub Chihuahua.gibLaut
Print "Klaeffklaeff!"
End Sub
Type Bernhardiner
As Hund hund = Hund()
As Integer gutmuetig = 1
End Type
'#####################################################
Dim benno As Bernhardiner Ptr, husky As Chihuahua Ptr
benno = new Bernhardiner()
husky = new Chihuahua()
Print "Benno hat " & Cast (Haustier Ptr, benno)->beine & " Beine und " & Cast (Haustier Ptr, benno)->schwanz & " Schwanz."
Print "Benno ist gutmuetig (Wert " & benno->gutmuetig & ")."
Cast (Hund Ptr, benno)->gibLaut
Print
Print "Husky hat " & Cast (Haustier Ptr, husky)->beine & " Beine und " & Cast (Haustier Ptr, husky)->schwanz & " Schwanz."
husky->gibLaut
Cast (Hund Ptr, husky)->gibLaut
Print
delete benno
delete husky
Sleep
|
... läuft das auch unter FB 0.23, wie man sich aus C Zeiten ja denken kann, wunderbar.
Nicht mal Compiler-Warnungen gibt es bei mir.
Aber:
Ist das auch gültig? D.h. darf ich mich auf dieses Verhalten (d. h. auf die interne Struktur der UDTs, wie ich sie hier intuitiv annehme) in FB auch *verlassen*?
Grüße
Zuletzt bearbeitet von kawe am 06.08.2013, 14:23, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 06.08.2013, 13:47 Titel: |
|
|
Mit den internen Abläufen beim Compiler kenne ich mich nicht aus, aber hier wird etwas ähnliches gemacht:
http://www.freebasic.net/wiki/wikka.php?wakka=KeyPgOpIs
edit: hmm, geht vermutlich schon in ene andere Richtung als deine Frage. Was den inneren Aufbau der UDTs angeht, werden die Records jedenfalls in der Reihenfolge in den Speicher gelegt, wie sie in der Deklaration vorkommen. Das wird auch in einigen Referenzbeispielen für den Speicherzugriff genutzt (vgl. z. b. http://www.freebasic-portal.de/befehlsreferenz/let-329.html). Siehe auch http://www.freebasic-portal.de/befehlsreferenz/offsetof-227.html die Definition von OFFSETOF. Eventuell muss man mit dem Padding aufpassen, wenn das bei den Klassen unterschiedlich sein sollte. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
kawe
Anmeldungsdatum: 25.03.2012 Beiträge: 41
|
Verfasst am: 06.08.2013, 14:15 Titel: |
|
|
Ja, das mit dem Operator 'IS' ist ja dann bereits die OO-Umsetzung.
Die Hinweise auf 'LET' und 'OFFSETOF' beantworten zwar nicht die Frage,
sind aber hilfreich:
Es liegt ja nahe, dass 'LET' genau die gleiche Annahme macht!?
Und mit dem zweiten Hinweis kann man die Frage vielleicht auch so formulieren:
1) Liefert OFFSETOF für den ersten Record garantiert '0'?
2) Ist die(se) Zeigerarithmetik für 'CAST' auch verbindlich (ebenfalls sehr naheliegend aber ja ebenfalls nicht zwingend, oder?)? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 06.08.2013, 14:53 Titel: |
|
|
kawe hat Folgendes geschrieben: | 1) Liefert OFFSETOF für den ersten Record garantiert '0'? |
So wie ich den englischen Referenzeintrag verstehe (und auch entsprechend meiner bisherigen Erfahrungen) ja.
Zitat: | Memory layout
Types lay out their fields consecutively in memory, following the native alignment and padding rules (described on the Field page). Special care must be taken when using Types for file I/O or interacting with other programs or programming languages, in case the alignment and padding rules are different. The optional Field = number specifier can be used to change the behavior on the FreeBASIC side.
|
http://www.freebasic.net/wiki/wikka.php?wakka=KeyPgType
"consecutively" heißt ja jetzt zwar nicht "beginnend bei 0", ist aber zumindest sehr naheliegend.
edit: ach ja, UNION macht ebenfalls Gebrauch von der festliegenden Speicher-Reihenfolge. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 07.08.2013, 08:36 Titel: 0.90 und Windows Versionen |
|
|
Unter welcher Windows Version läuft denn 0.90.1 nicht? Gib mal ein paar Infos vielleicht kann man die fbc Bugs auch beseitigen, statt mit einer älteren Version zu arbeiten.
Zuletzt bearbeitet von RockTheSchock am 07.08.2013, 10:41, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 07.08.2013, 08:50 Titel: |
|
|
Siehe hier:
http://forum.qbasic.at/viewtopic.php?t=8236 _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
kawe
Anmeldungsdatum: 25.03.2012 Beiträge: 41
|
Verfasst am: 07.08.2013, 09:57 Titel: |
|
|
Danke, hatte gerade selber eine längere Antwort geschrieben und dann die falsche Taste gedrückt . Jetzt habe ich kaum mehr Zeit.
Nur soviel:
Ich erwarte natürlich *nicht*, dass FB bis in alle Ewigkeit alle alten Versionen von den Betriebssystemen unterstützt, unter denen es mal lief.
Wenn das so lange wie möglich geht - prima !
(Built-)Prozesse werden umgestellt, um sie zu vereinfachen. Das führt dann im Gegenzug zu neuen Abhängigkeiten von der Außenwelt ...
Was ich bei FB (seit der V0.2x-Linie) etwas vermisse, sind:
1) Maintenance-Builts
2) Klare(re) Aussagen, was man unterstützen will und was nicht
3) Eine Minimal-Version, die keine Biblitheken enthält, die FB selbst nicht benötigt.
Zu 1):
Die letzte Version mit Maintainance-Builts war wohl 01.8x!?
Seither werden Fehler mehr oder weniger in neuen Versionen gefixt, die aber natürlich wieder neue Funktionalität und damit Fehler enthalten.
Vielleicht startet die 0.9x-Reihe diesen Versuch wieder? Darüber bin ich mir noch nicht ganz klar...
Daily Builts und "private" Patches sind jedenfalls nur bedingt eine Lösung, finde ich.
Zu 2):
...jedenfalls hat dich hier ja auch so einiges unter der Haube verändert, oder täusche ich mich da? Jedenfalls genug, dass nun doch recht oft Probleme mit alten Windows-Versionen auftauchen.
Ist halt so! Schön wäre nur, dann eine Version in der Hand zu haben, mit der man auch auf/für die "Alten" was machen kann, .
Alle mir bekannten Versionen haben da aber ärgerliche, bekannte Bugs, die zwar dann gefixt sind, deren Changelist aber erst in die *kommende* Version aufgenommen wurde -> wieder bei 1)
Zu 3):
Bei der Wahl zu einer älteren Version spielt auch der Faktor "Größe" eine Rolle, zumindest bei mir.
Alle tollen Dinge verlieren zwangsläufig irgendwann ihre Eleganz, wenn sie zu "fett" werden.
Ich bin im echten Leben "Java" und bin dieser Sprache seit Version 1.1.x "verbunden".
Ja, sprachlich hat sie so einiges an Charme gewonnen und auch enige (wenige!) neue Bibliotheken sind seither in den Alltagsgebrauch gekommen.
Der Umfang des Gesamtsystems schreckt mich aber als Privatmann inzwischen völlig ab. 60MB-Soeicher erstmal für die Runtime um "Hallo Welt!" an der Konsole ausgeben zu können?
Ein paar 100 MByte bis einige GByte um als Entwickler was machen zu können?
Astronomisch schnell wachsende Hardware-Anforderungen um das Ganze dann auf einem Zielsystem zum Laufen zu bringen?
Auch wenn das Allermeiste (ohne Blinke-GUI) im Prinzip so auch schon vor 15 Jahren gegangen wäre?
Na ja. Ist mir als Privatmann jedenfalls zu anstrengend.
Deshalb ja die Sehnsucht nach so etwas wie FreeBasic - bei mir jedenfalls.
Die MiniGW-Builts sind da ja schon (fast) das, an was ich denke. Nur:
Die setzen ja eine laufende MiniGW-Umgebung voraus.
Das ist ja auch nicht gerade das, womit sich jeder erstmal rumschlagen will.
Ein Compiler-Paket, mit dem die Sprache wie spezifiziert, funktioniert - und (fast) alles andere optional wenn man's denn braucht.
Davon träume ich nicht nur auf meiner Insel, .
Wegen den Problemen melde ich mich gerne, wenn ich mehr weiß.
Meine Tests mit 0.23/0.24/0.901 unter Win98SE mit KernelEx waren jedenfalls erstmal alle erfolgreich. Jetzt nehme ich mal die Kompilate und lasse sie unter meinem NT 3.51 laufen. Mal sehen ....
Grüße
Zuletzt bearbeitet von kawe am 07.08.2013, 12:59, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
kawe
Anmeldungsdatum: 25.03.2012 Beiträge: 41
|
Verfasst am: 07.08.2013, 11:13 Titel: |
|
|
kawe hat Folgendes geschrieben: | Wegen den Problemen melde ich mich gerne, wenn ich mehr weiß.
Meine Tests mit 0.23/0.24/0.901 unter Win98SE mit KernelEx waren jedenfalls erstmal alle erfolgreich. Jetzt nehme ich mal die Kompilate und lasse sie unter meinem NT 3.51 laufen. Mal sehen .... |
Jepp, wie bereits an anderer Stelle zum Kompiler gesagt, gilt auch für die Exes:
0.901-Kompilat führt zur schönen Box:
Code: | test.exe - Einstiegspunkt nicht gefunden
Der Prozedureinstiegspunkt "InterlockedCompareExchange" konnte in der Dynamic
Link Library "KERNEL32.dll" nicht gefunden werden.
OK |
0.24-Kompilat führt zur stillen Verabschiedung im Grafikmodus, teilweise ohne Patch fixbar, teilweise nicht:
http://www.freebasic.net/forum/viewtopic.php?f=6&t=20782
http://www.freebasic.net/forum/viewtopic.php?f=6&t=20482
Letzteres ist natürlich gefixt in 0.9x, was ja aber aus anderen Gründen wieder nicht geht ... Schönes Beispiel.
Mit dem im ersten Link von dkl zur Verfügung gestellen Debug-Patch geht's prinzipiell, ja.
Aber dieser und andere Patches kommen eben offiziell erst mit der nächsten Version zum Zuge,
in der dann wieder vieles andere erweitert, umgestellt und damit potentiell "funktional gefährdet" ist...
Ach ja, zu guter Letzt:
0.23-Kompilat läuft einwandfrei und macht das gleiche, wie unter Win98, WinXP und Win 7,
Welche Version >=0.17 findet ihr denn am "plattformübergreifend" stabilsten?
Grüße
Zuletzt bearbeitet von kawe am 07.08.2013, 11:59, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
kawe
Anmeldungsdatum: 25.03.2012 Beiträge: 41
|
Verfasst am: 07.08.2013, 11:56 Titel: |
|
|
nemored hat Folgendes geschrieben: | edit: ach ja, UNION macht ebenfalls Gebrauch von der festliegenden Speicher-Reihenfolge. |
Ja. Da ist das Ganze wirklich klar definiert. Aber es ging mir hier ja darum, gewisse Elemente der Vererbung abzubilden, also von einem bestehenden Typ an einen späteren, neuen weiterzureichen;
und zwar, so, dass ich den *neuen* Typ auch als "alten" interpretieren kann.
Der "Trick", ein Element der "Oberklasse" als erstes Element der "Unterklasse" zu deklarieren, ist ja dabei uralt und gerade im C-Code oft weit verbreitet.
Nur meines Wissens eigentlich auch dort nie niet- und nagelfest verifiziert/spezifiziert worden!?
Ich denke, von dort kommen sogar die zitierten FB-Aussagen, nahezu 1:1.
Die UNION macht Aussagen über die Referenzierbarkeit *gemeinsam* deklarierter Elemente durch die eindeutig gemeinsame Besetzung gleicher Zellen.
Hier geht es aber um unabhängig deklarierte (und später dahingehend uminterpretierte) Zellen, und in wieweit das eigentlich zulässig ist...
Danke und liebe Grüße  |
|
Nach oben |
|
 |
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 07.08.2013, 11:59 Titel: fbc für nt3.51 |
|
|
ich habe kein nt3.51, ansonsten würde ich versuchen es neu zu kompilieren und zu testen. Allerdings kann man laut Aussage dkl im englischen Forum die InterlockedCompareExchange Deklarationen entfernen und fbc neu kompilieren.
http://www.freebasic.net/forum/viewtopic.php?f=3&t=21470 |
|
Nach oben |
|
 |
kawe
Anmeldungsdatum: 25.03.2012 Beiträge: 41
|
Verfasst am: 07.08.2013, 12:09 Titel: Re: fbc für nt3.51 |
|
|
RockTheSchock hat Folgendes geschrieben: | ich habe kein nt3.51, ansonsten würde ich versuchen es neu zu kompilieren und zu testen. Allerdings kann man laut Aussage dkl im englischen Forum die InterlockedCompareExchange Deklarationen entfernen und fbc neu kompilieren.
http://www.freebasic.net/forum/viewtopic.php?f=3&t=21470 |
Super! Danke für Deine Mühen.
Ich werde allerdings selber nicht wieder anfangen, FB (oder andere große C(++)-Projekte) selbst zu kompilieren.
Ich weiß, was das bedeutet und ich habe einfach nicht die Zeit dafür.
Und ich befürchte auch, wie meistens, ist das erste Symptom der Beginn einer langen, verwickelten Kette von nötigen und unnötigen Abhängigkeiten ...
Muss dringendst wieder Java, wegen der Kröten .
Für mein Hobby-Programmieren komme ich da viel schneller davon, wenn ich mich mit dem begnüge, was ich habe .
Falls aber wirklich jemand Interesse daran hat:
Als Oldtimer-Freak bin ich gerne bereit, ab und zu unter NT 3.51, Win95, Win98, NT4, Win2k, ... (sogar Win32s ) zu testen ...
Danke nochmals! Vielleicht passiert ja was. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 07.08.2013, 12:35 Titel: |
|
|
kawe hat Folgendes geschrieben: | Was ich bei FB (seit der V0.2x-Linie) etwas vermisse, sind:
1) Maintainance-Builts |
Naja, es ist eigentlich nicht davon auszugehen, dass das Fallenlassen von NT 3.51 Absicht war, da FBC ja eigentlich Plattformunabhängig ist und davon auszugehen ist, dass durch die Verwendung eines neueren Compilers sich diese moderneres API-Aufrufe eingeschlichen haben. Von daher wird sich auch niemand gedacht haben, dass alte Versionen weitergepflegt werden müssen. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
kawe
Anmeldungsdatum: 25.03.2012 Beiträge: 41
|
Verfasst am: 07.08.2013, 13:36 Titel: |
|
|
Jojo hat Folgendes geschrieben: | Naja, es ist eigentlich nicht davon auszugehen, dass das Fallenlassen von NT 3.51 Absicht war, da FBC ja eigentlich Plattformunabhängig ist und davon auszugehen ist, dass durch die Verwendung eines neueren Compilers sich diese moderneres API-Aufrufe eingeschlichen haben... |
Ja, ich weiß. so ist das sogar leider meistens, denke ich.
Nicht die entwickelte Software, sondern deren Entwicklungs- (und ggf. Laufzeit-) Umgebung schafft ständig neue Abhängigkeiten.
Manchmal muss man denken, dass sei eine Marketing-Strategie von MS.
Als ich deshalb mal vor Ewigkeiten verstärkt auf Linux umgestiegen war, merkte ich allerdings,
dass es da diesbezüglich fast noch schlimmer war (ist?).
Neue Kleinigkeiten brauchen neue Bibliotheken, die dann neue Abhängigkeiten für die Funktionalität des Ganzen bedeuten.
Wenn es heute praktisch keine Software gibt, die unter den "originalen" Windows NTs läuft (oder inzwischen selbst unter Win2K nicht mehr), gibt es dafür meines Erachtens in aller Regel einen ausschlaggebenden Grund:
Visual Studio in seiner wieder mal neuesten Version.
Selbst das Anzeigen eines Verzeichnisses geht dann ohne MSVCRXY.DLL & Co. (die natürlich - auf ein zwei Umwegen - nur auf den letzten beiden Windowsversionen ihre Abhängigkeiten auflösen können) nicht mehr .
Im zweiten Schritt ist es natürlich auch viel cooler, z. B. die MessageBoxen via DirectX 08/15+ über den virtuell gewölbten Bildschirm zu drehen
und die Farbe der Buttons der aktuellen Tages- und Jahreszeit entsprechend and das Look&Feel des jeweiligen Anwenders anzupassen.
Das geht natürlich mit einem Betriebssystem, das nur ein paar Dutzend MBs auf der Platte braucht, nicht (das Verzeichnis anzeigen könnte es hingegen natürlich viel schneller, auch schon deshalb, weil viel weniger drin sein muss ... ).
Und schließlich kann man es ja auch wahrlich niemandem verdenken, vom Pfad der "Universalität" abzuweichen, da die Cygwin/MiniGW/&Co-Fraktionen es dem "normalen" Menschen ja nicht gerade einfach machen,
überhaupt erstmal ein lauffähiges Built-System aufzubauen.
Das ist ja überhaupt eines der herausragenden Stärken von FreeBasic:
1 Gesamtpaket, 1 Quelldatei, 1 Kompileraufruf - und schont kommt was lauffähiges raus! Wäre FreeBasic selbst in FreeBasic geschrieben, ...
Gruß |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 07.08.2013, 19:56 Titel: |
|
|
FreeBASIC ist in FreeBASIC geschrieben. Allerdings verwendet der C-Emitter eben z.B. einen C-Compiler zum Erzeugen der Binaries.  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|