Delphi XE5 für Android
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Delphi XE5 für Android
http://www.heise.de/newsticker/meldung/ ... 46952.html
Hier werden also nun tatsächlich native-Code (ARM) Programme für Linux erstellt !!!
Aber ob das alles so schön ist ?!?!?!?
- völlige Zweiteilung in "Desktop" und "mobile" Entwicklungsumgebung (inkompatible visuelle Objekte, inkompatible Compiler und RTL (Funktionalität und teilweise Syntax)
- der "mobile" Compiler benutzt "Automatic Reference Counting" ("ARC", d.h. Alle Objekte werden automatisch gefreed, so wie es FPC ja bei Strings macht.) Hört sich praktisch an, wird aber sehr kontrovers diskutiert.
- keinerlei Support für Linux auf Desktop.
-Michael
Hier werden also nun tatsächlich native-Code (ARM) Programme für Linux erstellt !!!
Aber ob das alles so schön ist ?!?!?!?
- völlige Zweiteilung in "Desktop" und "mobile" Entwicklungsumgebung (inkompatible visuelle Objekte, inkompatible Compiler und RTL (Funktionalität und teilweise Syntax)
- der "mobile" Compiler benutzt "Automatic Reference Counting" ("ARC", d.h. Alle Objekte werden automatisch gefreed, so wie es FPC ja bei Strings macht.) Hört sich praktisch an, wird aber sehr kontrovers diskutiert.
- keinerlei Support für Linux auf Desktop.
-Michael
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2844
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Delphi XE5 für Android
Ich verstehe nicht warum alle Welt so einen Scheiß implementiert. Ist es so schwer die Objekte die man erzeugt hat auch wieder zu zerstören? Wer sowas will/braucht soll doch bitte zu JAVA oder .NET wechseln. In meinen Augen führt es nur zu unsauberen Code und aufgeblähten Programmen.mschnell hat geschrieben: - der "mobile" Compiler benutzt "Automatic Reference Counting" ("ARC", d.h. Alle Objekte werden automatisch gefreed, so wie es FPC ja bei Strings macht.) Hört sich praktisch an, wird aber sehr kontrovers diskutiert.
Außerdem ist das auch fachlich falsch. Referenzzählung ist keine Alternative zum Garbage Collector es ist eine Variante einen zu implementieren.
Zuletzt geändert von m.fuchs am Mo 9. Sep 2013, 14:48, insgesamt 1-mal geändert.
0118999881999119725-3
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Delphi XE5 für Android
Naja, ARC ist vermutlich weniger Laufzeit-kritisch als ein üblicher Garbage Collector wie bei Java, aber technisch eben ziemlich unzulänglich:
Es kann durchaus sinnvoll sein, Objekte am leben zu erhalten, auf die es keine Referenz gibt. Andererseits ist es auch nicht unbedingt sinnvoll, alle Referenzen auf ein Objekt zu löschen, wenn es nicht mehr gebraucht wird. Dann müsste ja beim freen eines Objektes "von Hand" jede enthaltene Referenz auf irgendein anderes Objekt gelöscht werden, nur um dessen Refernz-Couter zu dekrementieren.
Delphi Prism (.Net Framework), macht das natürlich richtig: Umgekehrt wird beim freen eines Objektes jede Referenz darauf gelöscht. Das geht aber nur in einem Framework und ist ziemlich ineffizient.
-Michael
Es kann durchaus sinnvoll sein, Objekte am leben zu erhalten, auf die es keine Referenz gibt. Andererseits ist es auch nicht unbedingt sinnvoll, alle Referenzen auf ein Objekt zu löschen, wenn es nicht mehr gebraucht wird. Dann müsste ja beim freen eines Objektes "von Hand" jede enthaltene Referenz auf irgendein anderes Objekt gelöscht werden, nur um dessen Refernz-Couter zu dekrementieren.
Delphi Prism (.Net Framework), macht das natürlich richtig: Umgekehrt wird beim freen eines Objektes jede Referenz darauf gelöscht. Das geht aber nur in einem Framework und ist ziemlich ineffizient.
-Michael
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Delphi XE5 für Android
Auch MSEgui hat so einen Mechanismus (iobjectlink). Sehr praktisch, wird auch zum Verteilen von object-events benützt.mschnell hat geschrieben: Delphi Prism (.Net Framework), macht das natürlich richtig: Umgekehrt wird beim freen eines Objektes jede Referenz darauf gelöscht.
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Delphi XE5 für Android
Interessant.
Ich verstehe allerdings nicht, wie das funktionieren kann.
-Michael
Ich verstehe allerdings nicht, wie das funktionieren kann.
-Michael
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Delphi XE5 für Android
Die Definition ist hier:
http://gitorious.org/mseide-msegui/msei ... seglob.pas
Die Implementation in tobjectlinker hier:
http://gitorious.org/mseide-msegui/msei ... lasses.pas
http://gitorious.org/mseide-msegui/msei ... seglob.pas
Die Implementation in tobjectlinker hier:
http://gitorious.org/mseide-msegui/msei ... lasses.pas
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Delphi XE5 für Android
Den letzten Satz unterschreibe ich. Bei dem ersten möchte ich dich ermuntern, noch einmal darüber nachzudenken: Wenn ich keine Referenz auf ein Objekt habe, kann ich nicht mehr darauf zugreifen. Es ist weg, fort, für immer.mschnell hat geschrieben:Es kann durchaus sinnvoll sein, Objekte am leben zu erhalten, auf die es keine Referenz gibt. Andererseits ist es auch nicht unbedingt sinnvoll, alle Referenzen auf ein Objekt zu löschen, wenn es nicht mehr gebraucht wird. Dann müsste ja beim freen eines Objektes "von Hand" jede enthaltene Referenz auf irgendein anderes Objekt gelöscht werden, nur um dessen Refernz-Couter zu dekrementieren.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Delphi XE5 für Android
Das ist natürlich nur in Spezialfällen möglicherweise sinnvoll.Socke hat geschrieben:Wenn ich keine Referenz auf ein Objekt habe, kann ich nicht mehr darauf zugreifen. Es ist weg, fort, für immer.
Ein Objekt hat irgendein anderes Objekt oder einen Speicherbereich allokiert und der Zeiger darauf wurde übernommen. Dann braucht man das eigentliche Objekt nicht mehr.
Ein Objekt hat einen Thread und werkelt für sich alleine vor hin.
...
-Michael
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Delphi XE5 für Android
Ja, aber dann habe ich doch eine Referenz. Dass ich im OOP-Sinne gar nicht von überall darauf zugreifen kann oder darf, steht dem gar nicht entgegen. Schließlich lege ich nicht alle TObject-Instanzen in einer globalen Liste ab, nur um eine Referenz zur Freigabe zu behalten. Wichtig ist, dass ich mindestens eine Referenz habe, auf die ich in einem definierten Rahmen zugreifen kann.mschnell hat geschrieben:Das ist natürlich nur in Spezialfällen möglicherweise sinnvoll.Socke hat geschrieben:Wenn ich keine Referenz auf ein Objekt habe, kann ich nicht mehr darauf zugreifen. Es ist weg, fort, für immer.
Ein Objekt hat irgendein anderes Objekt oder einen Speicherbereich allokiert und der Zeiger darauf wurde übernommen. Dann braucht man das eigentliche Objekt nicht mehr.
Ein Objekt hat einen Thread und werkelt für sich alleine vor hin.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: Delphi XE5 für Android
Auch in nem Thread existieren Zeiger auf das Object minddestens einer vom Thread aus, und vom Hauptprogramm einer auf den Thread. Dein Beispiel ist sinnfrei.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Delphi XE5 für Android
MyThread := TMythread.Create(...);Christian hat geschrieben:Auch in nem Thread existieren Zeiger auf das Object minddestens einer vom Thread aus, und vom Hauptprogramm einer auf den Thread.
Erzeugt natürlich eine Referenz auf das TMyThread-Objekt (nicht auf "den Thread". Auch eine "Hauptprogramm" <-> "Unterprogramm" Beziehung gibt es hier nicht.)
Das TThread-Objekt kann dann selbstzständig "arbeiten"
Wenn ich dann
MyThread := NIL;
mache, gibt es keine Referenz auf das TMyThread -Objekt mehr. (Man könnte auch gleich TMyThread.Create(..) machen und die Referenz gar nicht speichern.)
Am Ablauf der Funktionalität ändert das nichts. Nur kann niemand mehr von außen den Thread "steuern".
(Klar ist das nicht unbedingt "sinnvoll", es soll ja auch nur das Prinzip verdeutlichen. Sinnvoll könnte es sein, wenn man 10000 Threads erzeugt, die man nicht von außen zu steuern braucht. )
Recht hast Du natürlich damit, dass innerhalb des Objektes selbst natürlich immer ein "Self" Pointer existiert. Ich glaube aber nicht, dass der bei ARC als Referenz gilt, sonst könnte der Referenz-Zähler ja nie auf 0 gehen und eine automatisches freeen veranlassen.
-Michael
Zuletzt geändert von mschnell am Fr 6. Sep 2013, 13:08, insgesamt 1-mal geändert.
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2844
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Delphi XE5 für Android
Wie wird dann sowas behandelt:
Was ich mir auch noch vorstellen könnte wäre ein Objekt mit Methoden. Auf das Objekt selber gibt es keine Referenz, auf die Methoden schon.
Sind alles Spezialfälle, aber gerade die machen ja bei solchen Automatismen die Probleme aus.
Code: Alles auswählen
with TJSONParser.Create(JsonString) do begin
JsonObject := Parse AS TJSONObject;
Free;
end;
Sind alles Spezialfälle, aber gerade die machen ja bei solchen Automatismen die Probleme aus.
0118999881999119725-3
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Delphi XE5 für Android
Die Referenz auf den Thread (Threadid) erstellt TThread selbstständig, ist also vorhanden.mschnell hat geschrieben:MyThread := TMythread.Create(...);
Erzeugt natürlich eine Referenz auf das TMyThread-Objekt (nicht auf "den Thread". Auch eine "Hauptprogramm" <-> "Unterprogramm" Beziehung gibt es hier nicht.)
Bei welchen Aufgaben ist es für das ausführende Programm uninteressant, ob diese Ausgeführt werden? Schließlich lässt sich hier nicht einmal das Ergebnis abfragen. Selbstverständlich kann man eine Non-Blocking-Queue verwenden, um die Ergebnisse an das Hauptprogramm zurück zu leiten. Dann ist aber kein sauberer Abgang des Programms gewährleistet.mschnell hat geschrieben:Sinnvoll könnte es sein, wenn man 10000 Threads erzeugt, die man nicht von außen zu steuern braucht.
Du glaubst jetzt nicht ernsthaft, dass hier keine Referenz auf das Objekt existiert?!m.fuchs hat geschrieben:Wie wird dann sowas behandelt:Was ich mir auch noch vorstellen könnte wäre ein Objekt mit Methoden. Auf das Objekt selber gibt es keine Referenz, auf die Methoden schon.Code: Alles auswählen
with TJSONParser.Create(JsonString) do begin JsonObject := Parse AS TJSONObject; Free; end;
Wenn du keine Referenz auf ein Objekt hast, kannst du auch keine Methode aufrufen (das ist die Definition). Diese wird in der Variablen Self übergeben. Wenn keine Referenz vorhanden ist, kann nur ein konstanter Wert (nil) oder ein unbekannter Wert übergeben werden. Zugriff auf da Objekt hat man damit aber nicht mehr.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Delphi XE5 für Android
Es geht hier um "automatisches Reference counting" von Objekten da hat eine ThreadID überhaupt nix mit zu tun.Socke hat geschrieben:Die Referenz auf den Thread (Threadid) erstellt TThread selbstständig, ist also vorhanden.
Das TMyThread Objekt kann eine Referens auf ein anderes Objekt bekommen bevor man die Referens auf das TMyThread Objekt Nullt oder wieder verwendet. Dann kann s sich selbsttätig melden. (Wie gesagt das ist nur ein Beispiel...)Socke hat geschrieben:Bei welchen Aufgaben ist es für das ausführende Programm uninteressant, ob diese Ausgeführt werden? Schließlich lässt sich hier nicht einmal das Ergebnis abfragen.
-Michael
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Delphi XE5 für Android
Klar, existiert die, sie wird aber sofort wieder überschrieben. Bei "Automatic referenc counting" würde das Objekt dann automatisch gefreet. Das kann sinnvoll sein, muss aber nicht.Socke hat geschrieben:Du glaubst jetzt nicht ernsthaft, dass hier keine Referenz auf das Objekt existiert?!
-Michael