Forum: PC-Programmierung OOP SourceCode


von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Hallo.

Kennt jemand ein Buch oder Tutorial bzw. Beispiele, in dem ein OBJEKT 
definiert ist? Also angenommen ich will eine OOP-Sprache bzw. Struktur 
"herstellen" - und möchte eine Basisklasse "Objekt" haben. Wie würde 
diese Struktur oder die Basisklasse aussehen (können)? Gibt es da ein 
gut verständliches Beispiel? Warscheinlich ist es nicht ganz so einfach. 
Ich wüsste (auf die schnelle) jedenfalls nicht, wie ich so etwas 
Aufbauen kann, oder wie ich weitere Typen (z.B. String) durch meinen 
Code von OBJEKT Ableiten oder Definieren kann. Klar ist alles irgendwann 
nur noch ein Byte-Array...

Mir fehlt also irgendwo die Basis, wie es von Adressen, Pointern und 
"Byte-Schaufeln" in einem Listing zum "brauchbaren" Objekt kommt, und 
wie so eine
"Programmiersprache" roh im inneren aussieht, die diesen "OOP 
Abstaction-Layer" bereit stellt. Und wie das ganze dann in einem Loop 
"Runtime" hat.

Was ich suche ist also ein "Programmiersprachen-Template". Muss nichts 
besonderes sein also kein Exceptionhandling und noch nix 
Reflection-Artiges können. Einfach nur zum lernen. Um so näher an der 
Hardware desto besser.

Kennt da jemand was simples kleines? Oder kann das jemand gut erklähren?

Edit: Ja, Ich hab bereits einige Threads u. Infos dazu gelesen.
-Objekte in C?, -Frage zu OOP, -usw.

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

Tim S. schrieb:
> Mir fehlt also irgendwo die Basis, wie es von Adressen, Pointern und
> "Byte-Schaufeln" in einem Listing zum "brauchbaren" Objekt kommt,

Wenn ich dich richtig verstehe, dann fange mal zB. hier an:
https://www.itwissen.info/Objektorientierte-Programmierung-object-oriented-programming-OOP.html

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Teo D. schrieb:
> Wenn ich dich richtig verstehe, dann fange mal zB. hier an:
> 
https://www.itwissen.info/Objektorientierte-Programmierung-object-oriented-programming-OOP.html

Ich weiß was OOP ist und wie man es benutzt usw. Also ich kann mit 
prozeduraler Programmierung und mit OOP umgehen. Kein Ding. In dem Link 
steht praktisch nichts neues.
Meine Frage ist: Wie schaud OOP im Source aus? (z.B. interner Ablauf bei 
Vererbung von OBJEKT auf meinen TYPEx. Bzw. "Unter-Typen")

[Ich frage, weil ich immer erst wissen will wie es funktioniert, bevor 
ich es anwende. Das hatt aber in dem Fall nicht so ganz geklappt. 
Learning by Doing usw. Also ich weiß was mit OOP geht, aber noch nicht 
wie es funktioniert auf der "Byte-Schaufel"-Ebene]

Spekulation: Wenn ich TYPEx für "Diese Instanz" brauche, steht im 
"Stack" irgendwo, dass jetzt das OBJEKT die Definitionen (grob Struct) 
ab "Adresse für TYPEx" bis zu irgend einem EOLine mit einbeziehen 
(reservieren u. laden) soll, oder so ähnlich. (Geraten) Ich hab da 
irgend nen Knoten momentan, und kann es mir nichtmal gescheid 
vorstellen, wie OOP mir dann einen Member in diesen Objekt bereitstellen 
soll, den ich zur Laufzeit nochmal gezielt "ansprechen" kann. (Geht das 
dann erstmal trotzdem alles immer nur mit Pointern???) Es wird aber 
immer klarer und verständlicher...
Daher wäre ein Source ganz nett.

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

Tim S. schrieb:
> Meine Frage ist: Wie schaud OOP im Source aus? (z.B. interner Ablauf bei
> Vererbung von OBJEKT auf meinen TYPEx. Bzw. "Unter-Typen")

Hab ich noch einen versuch? :/

Is nich einfach da was zu finden, bzw die richtigen Suchbegriffe.
Eventuell ist dies ja mal ein Anfang:
http://www.lerneprogrammieren.com/blog/praxis/stack-und-heap
(Ich habs natürlich nur überflogen)

von foobar (Gast)


Lesenswert?

Ich denk, du haust einiges durcheinander. Die sprichst einerseits vom 
Source-Code und EOLs, andererseits von Stacks und Adressen. Du solltest 
Compiletime und Runtime getrennt betrachten und überlegen, welche 
Informationen wann benötigt und wie sie benutzt werden. Tipp: viele 
Sprachen benötigen zur Runtime keinerlei Typinformationen mehr.

Btw, es vereinfacht die Sache auch, wenn man etwas konkreter ist und 
sich eine Sprache als Beispiel nimmt.

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Danke für die Infos....
Ja der zweite URL beschreibt gut, wie man das macht. Zum Teil auch was 
da passiert. Aber es ist hald immernoch "zu C". Was mich hald 
interessiert ist, was "im übertragenen Sinne" bei new(TYPEx) oder 
malloc(TYPEx) passiert. Und wie das dann danach "gehandelt" wird. Ob es 
eine Instanz-Liste mit den Start-Adressen(?) gibt, usw. und wie das (und 
ein Zugriff darauf) RAW ausschaut!?


foobar schrieb:
> Ich denk, du haust einiges durcheinander.

Ja das kann durchaus sein. ;-)

foobar schrieb:
> Die sprichst einerseits vom Source-Code und EOLs,

"Irgendwie" muss es ja "definiert funktionieren", um das ganze 
"Programm" dann abzuarbeiten. Also das User-Programm läuft noch nicht 
direkt auf der Hardware, sondern über diesen "OOP Interpreter" den ich 
suche.

foobar schrieb:
> andererseits von Stacks und Adressen.

...das "seltsam beschriebene" war dann schon alles Runtime.

foobar schrieb:
> Tipp: viele Sprachen benötigen zur Runtime keinerlei Typinformationen mehr.

Ok das wusste ich nicht - und habs immer mitnehmen wollen. - das 
vereinfacht dann doch ziemlich. Es wird dann wohl im endeffekt nur noch 
"dummes" Byte-Schaufeln mit irgendwelchen Listen und Pointer Adressen 
geben, wenns nach dem Compilen keine Type-Infos mehr dazu gibt...(!!??) 
Ich kann es nicht sonderlich gut ausdrücken... ^^ OOP mit Types zur 
Runtime - dachte ich - wäre eigentlich ganz normal. OK das erklährt auch 
warum das compilierte meist sooooo extrem viel kleiner ist, und sich 
z.T. überhaupt nicht mehr decompilieren lässt.

foobar schrieb:
> Du solltest Compiletime und Runtime getrennt betrachten

Ja schon, nur eben genau "das dazwischen" fehlt mir noch... ^^
Ein OOP Source, der dann Runtime laufen kann. Der dann eine Runtime 
"anbietet". [Dieser Abstaction-Layer] Damit dass, was in meinem später 
geladenen Programm ist, auch ausgeführt werden kann. Da hatte ich irgend 
einen Denkfehler. Ohne Typinfos zur Runtime ist das wesentlich leichter 
erstmal. Ja du hast eben einige dieser "Knoten" gelößt.

Mir fällt insgesammt nur ein Wort zu dem ein, was ich suche:
> "Programmiersprachen-Template"
... mit "Managed-Code zur Runtime" sozusagen - So wie das z.B. bei Win 
.Net Applications über das Framework passiert. Ich hoffe jemand weiß was 
ich meine.

Beispiel: Ich hab so nen mini "Interpreter" mal auf nen AVR gebaut. 
(lange her). Allerdings ohne OOP und der konnte nur paar 
Standard-Instructions "durchreichen", die man von irgendwo anders 
geladen hat. So etwas würde ich gerne für OOP können und irgendwann mal 
machen.
Ziel: Dass zur Laufzeit ein "New(TypeX);" bei einem Event / Interrupt 
instanziiert werden kann. ;-)

Ich bin ja bestimmt nicht der einzige oder erste, der das sucht oder 
will.

: Bearbeitet durch User
von A. S. (Gast)


Lesenswert?

Wenn Du weißt, was ein c-compiler macht, also wie er Strukturen und 
funktionsptr in Code umsetzt, dann ist es ein kleiner Schritt zur oop.

Klassen sind structs mit Funktionen mit implizitem this, nee ist ein 
malloc mit implizitem Konstruktor-Aufruf. Also so, wie man auch in C 
programmieren würde, aber viel einfacher und sicherer.

Templates quasi ein aufgemotzter Präprozessor, der typischer den jeweils 
konkret erforderlichen Code bereitstellt bzw auch in sich zusammenfallen 
lassen kann.

Die ersten C++-compiler waren quasi präprozessoren-konstrukte..

Das gerade C++ sich ständig rapide weiter entwickelt, lässt den heutigen 
Stand vielleicht wie etwas völlig anderes erscheinen. Geh den Weg 
einfach von C aus nach.

von Peter M. (r2d3)


Lesenswert?

Hallo Tim S.,

Tim S. schrieb:
> Mir fehlt also irgendwo die Basis, wie es von Adressen, Pointern und
> "Byte-Schaufeln" in einem Listing zum "brauchbaren" Objekt kommt, und
> wie so eine
> "Programmiersprache" roh im inneren aussieht, die diesen "OOP
> Abstaction-Layer" bereit stellt. Und wie das ganze dann in einem Loop
> "Runtime" hat.

Tim S. schrieb:
> Meine Frage ist: Wie schaud OOP im Source aus? (z.B. interner Ablauf bei
> Vererbung von OBJEKT auf meinen TYPEx. Bzw. "Unter-Typen")

Die obere Frage ist genau das Gegenteil von der unteren Frage.
Ich gehe davon aus, dass die untere Frage gemeint ist.

Ich würde ein minimales Programm schreiben, dass Deine Strukturen 
benutzt und dann debuggen. Dann siehst Du, was der Compiler aus der 
abstrakten, prozessorfern erscheinenden Sprache real auf 
Maschinenspracheebene gemacht hat.

von Stefan (Gast)


Lesenswert?

Tim S. schrieb:
> Also angenommen ich will eine OOP-Sprache bzw. Struktur
> "herstellen"

Du könntest dir GTK mit GObject ansehen, da wird ja in C 
objectorientiert gearbeitet. Die verwenden da u.a. einen Haufen von C 
Macros, um die Funktionen richtiger OOP Sprachen in C nachzubilden.

Aber wenn Du wirklich eine OOP Sprache entwicken willst, solltest Du 
auch bedenken, dass der Trend etwas von OOP weggeht, bei vielen modernen 
Sprachen wie Go, Rust, Nim steht OOP nicht mehr im Mittelpunkt.

von Purzel H. (hacky)


Lesenswert?

Im Prinzip geht's wie die vorgaengige Methode des Prozeduralen 
Programmierens. OOP ist ein Layer fuer den Compiler, der muss OOP nach 
Prozedural uebersetzen. Unten dran ist es dasselbe. OOP tut so, wie wenn 
Code und Daten zusammengehoeren. Der Code is nur einmal vorhanden, der 
Datenteil des Objektes wird sooft instanziert wie deklariert. Vererbung 
tut so wie wenn gewisse Objekte mehr Moeglichkeiten haetten. Es ist 
einfach mehr code, der auf neue Daten zugreift. Der Compiler merkt sich 
zu welchen Daten welcher Code Zugriff hat.
Da ist kein Hokus-Pokus dahinter.

von Klugscheisser (Gast)


Lesenswert?

Einfacher ausgedrückt:

µController (Bare Metal):

Der Compiler setzt Deinen Quellcode in Maschinencode für die Ziel-CPU um 
(vergleichbar mit Assembler, guck Dir im Debugger das Disassembly an, 
dann weisst Du was ich meine).
Dabei ist es egal, was die Quell-Sprache war (C, C++, BASCOM, Arduino, 
...).
Die CPU arbeitet Instruktionen nur sequenziell ab. IMMER.


Irgendeine Sprache mit Runtime Environment (Java, C#, ... ):

Deine Quelle wird in eine "Intermediate-Language" übersetzt und ist 
nicht direkt auf der CPU-Lauffähig. Es benötigt eine RTE 
(RunTimeEnvironment), nämlich die JavaVM, das .Net-Framework etc.
Darin ist meist ein JustInTime-Compiler enthalten, der den 
Intermediate-Code dann in den Maschinencode der Ziel-CPU übersetzt, wenn 
er gebraucht wird.
Vorteil: Plattformunabhängigkeit (zumindest theoretisch).

Und dann gibt es noch richtige Interpretersprachen, wo die Quelle gar 
nicht übersetzt wird, sondern der Interpreter etwas tut, was er vorher 
in einer Textdatei (der Quelle) gelesen hat.

von georg (Gast)


Lesenswert?

Tim S. schrieb:
> Meine Frage ist: Wie schaud OOP im Source aus?

Mal so ganz grob: ein Objekt ist eine List von Adressen, nämlich die 
Adressen der Variablen (Eigenschaften) und der Methoden. Vererbt man 
was, kommen Einträge zu der Liste dazu.

Im Sourcecode taucht das nicht auf, weil in den mir bekannten Sprachen 
das (Basis-) Objekt ein vordefinierter Typ ist. Wie die Listen genau 
aufgebaut sind, ist möglicherweise irgendwo dokumentiert, interessiert 
aber kein Schwein (ausser dir).

Georg

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Danke für die Antworten... ;-)

Peter M. schrieb:
> Ich würde ein minimales Programm schreiben, [...] Dann siehst Du, was der 
Compiler [...] gemacht hat.

Klugscheisser schrieb:
> Der Compiler setzt Deinen Quellcode in Maschinencode für die Ziel-CPU
[...]
> Die CPU arbeitet Instruktionen nur sequenziell ab. IMMER.

Ja das ist mir im Grunde schon bewusst...


Tim S. schrieb:
> Ob es
> eine Instanz-Liste mit den Start-Adressen(?) gibt, usw. und wie das (und
> ein Zugriff darauf) RAW ausschaut!?

georg schrieb:
> Mal so ganz grob: ein Objekt ist eine List von Adressen, nämlich die
> Adressen der Variablen (Eigenschaften) und der Methoden. Vererbt man
> was, kommen Einträge zu der Liste dazu.

Wenn ich das jetzt richtig verstanden hab: Man braucht also diese 
"Liste" (wie anfangs spekuliert) und diese "hält" und verwaltet 
sozusagen den Heap !? Alles im Ram...

> Im Sourcecode taucht das nicht auf, weil in den mir bekannten Sprachen
> das (Basis-) Objekt ein vordefinierter Typ ist.

Ja genau dessen Source habe ich gesucht. Undzwar einen, der zur Laufzeit 
immer noch "Typeinfos" hat... Mit eurer Hilfe komme ich so nach und nach 
immer weiter. Anscheinend suche ich ein RunTimeEnvironment-Source oder 
mehr Verständniss darüber...

> Wie die Listen genau
> aufgebaut sind, ist möglicherweise irgendwo dokumentiert, interessiert
> aber kein Schwein (ausser dir).

Ohja. ;-)

Tim S. schrieb:
> weil ich immer erst wissen will wie es funktioniert, bevor
> ich es anwende.

Sonnst wäre es ja zu einfach!!! Okay so grob hab ich nun "Runtime" damit 
durchdacht, und in der Kopfsache laufen. Kann ich jetzt auch 
programmieren. Es werden dann viele Listen (Types, Instances, Stack) 
aber macht ja nix.

Tausend Dank...

von M.K. B. (mkbit)


Lesenswert?

Tim S. schrieb:
> Ja genau dessen Source habe ich gesucht. Undzwar einen, der zur Laufzeit
> immer noch "Typeinfos" hat

Wozu brauchst du die Typeinfos? Vielleicht formulierst du mal deine 
Anforderungen, also was du mit dem Projekt erreichen willst. Mein 
Eindruck ist, dass du irgendwo einen Denkfehler hast und dir dadurch die 
Sache komplexer erscheint, als es in Wirklichkeit ist.
Interessant wäre auch wozu du die Typinformationen brauchst?

Hier mal ein paar Aspekte zu C++, die dir für dein Verständnis 
vielleicht weiterhelfen. Man sieht auch, dass der Ausführenden (in 
diesem Fall bare metal) gar keine Typinformationen braucht, um korrekt 
zu arbeiten.

Im Prinzip besteht alles nur aus Datenstrukturen (struct, class, int, 
float, ...) und Funktionen.

Datenstrukturen:
Die Datenstrukturen haben eine Größe und eine Adresse auf dem Heap, 
Stack oder im statischen Speicher. Die Adresse kann damit teilweise 
schon zur Compilezeit bekannt sein. Die einzelnen Elemente haben einen 
Typ und einen Adressoffset relativ zur Adresse der Datenstruktur.
Der Typ ist nur dazu da zur Compilezeit die Korrektheit der Operationen 
zu prüfen und implizite Konvertierungen durchzuführen (z.B. int auf 
float zuweisen).
Der Adressoffset wird für den Zugriff auf das Element in der 
Datenstruktur benötigt. Ist die Adresse der Struktur zur Compilzeit 
bekannt, dann kann der Compiler das schon ausrechnen. Sonst erzeugt er 
Code, der das zur Laufzeit anhand der Adresse der Datenstruktur 
ausrechnet.
Damit braucht man im fertigen Code keine Typen mehr, weil alle 
benötigten Größen und Offsets durch den Compiler als konstanten in den 
Code übernommen wurden.

Funktionen:
Funktionen sind Stücke von Programmcode an einer Adresse im Speicher in 
die man springen kann und danach wieder zurückkommt (zumindest in der 
Regel). Für den Compiler beschreibt die Funktion aber nur welche 
Datenstrukturen wie übergeben werden. Damit kann dieser auf Fehler 
prüfen und z.B. implizite Kopien der Objekte anlegen (im Prinzip auch 
nur ein Aufruf einer weiteren Funktion - Copy constructor) oder nur 
einen Pointer.
Aber was ist jetzt mit Memberfunktionen. Im Prinzip geben diese auch nur 
an, dass man die Funktion nur auf bestimmten Objekten aufrufen kann und 
das implizit der Pointer auf das Objekt übergeben wird. Zur Laufzeit 
sind es daher auch konstante Offsets, also keine Typinformation mehr 
notwendig.

Einen Sonderfall stellen hier die virtuellen Methoden dar, bei denen das 
Sprungziel zur Laufzeit über einen vtable ausgewählt wird. Aber auch 
hier wird der vtable nicht für jedes Objekt, sondern nur einmalig für 
einen Typ angelegt. D.h. im Speicher liegt eine Tabelle die auf 
Funktionen zeigt. Da steht dann aber auch keine Typinformation mehr 
drin, weil sich diese zur Compilezeit in eine Adresse aufgelöst hat.

Wir funktioniert New:
Im Prinzip besteht ein new aus zwei Schritten.
1) Speicher mit einer Größe beim Heap anfordern. Die Größe kann der 
Compiler aurechnen und als Konstante dem Funktionsaufruf für das malloc 
mitgeben.
2) Objekt initialisieren. Der Compiler ruft eine Funktion aus 
(Constructor) und übergibt diesem den Pointer. Der Constructor enthält 
alles um das Objekt und bei Bedarf den Pointer auf den vtable 
einzurichten.
Wie man hier sieht bleibt von der Typinformation nicht viel übrig, weil 
man es auch nicht braucht.

von georg (Gast)


Lesenswert?

Tim S. schrieb:
> Man braucht also diese
> "Liste" (wie anfangs spekuliert) und diese "hält" und verwaltet
> sozusagen den Heap !? Alles im Ram...

Zunächst mal, auf einem PC ist sowieso alles im RAM. Ansonsten hat die 
Struktur mit dem Ort der Speicherung nur wenig zu tun, ich kann Objekte 
sowohl als globale Variablen definieren (also im fest allokierten 
Speicher), als auch mit new erzeugt (also im Heap), oder in einer 
Funktion lokal definiert (also auf dem Stack). Das Objekt bleibt dabei 
das gleiche. Im übrigen ist alles implementationsabhängig, da muss man 
die Dokumentation heranziehen, soweit für diese Fragen überhaupt 
vorhanden.

Es ist ja ein beliebter Programmierstil, alles was überhaupt in einem 
Programm vorkommt mit new zu erzeugen. Das wirft aber die Frage auf was 
passieren soll wenn nicht genug Speicher dafür da ist. Ich ziehe es 
daher vor, zumindest für alles was für die ganze Laufzeit gebraucht wird 
festen Speicherplatz vorzusehen. Im Fall einer PC-Exe startet dann das 
Programm garnicht erst, wenn nicht genug Memory für die Variablen 
verfügbar ist, man muss das nicht bei jeder Variable extra prüfen und 
behandeln.

Georg

von rbx (Gast)


Lesenswert?

Die Objektorientierte Programmierung ist ein Programmierparadigma.
Da interessiert in erster Linie die abstrahierte "Technik" selbst.

Was hilft bei der OOP-Programmierung/Grundlagen weiter? Z.B. Gute 
Einführungsbücher zu Java lesen und verarbeiten und viel mit Ruby 
herumspielen.
https://de.wikipedia.org/wiki/Ruby_(Programmiersprache)

Ein wenig "Compiler"-Hilfe:
https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours

Oder: Mal angenommen, du möchtest einen Algorithmus in Assembler 
programmieren. Da heißt es zuerst, den Algorithmus zu verstehen.
Wenn man den Algorithmus gut verstanden hat, dann ergibt sich die 
Implementierung fast von allein.

Ein Algorithmus ist eine Sache, die Implementierung einer 
Programmiersprache eine andere - und die muss gar nicht hardwarenahe 
sein.
Z.B. : http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf

So ganz grob gibt es drei Ebenen,
 - das was schon da ist, Compilergeschichte, Metasprachen wie Bnf, 
Fortranbibs, Lambda-Kalkül usw.
 - die OO-Sprache selbst und ihre Entwurfssprache
 - die Lowlevelebene bzw. das, was man im Hexeditor oder im Debugger 
sehen kann.

Nochmal das Algorithmusbeispiel: Wenn man jetzt einen Blick auf den 
Hexcode oder ein Listing mit Zeigern o.ä. hat -
Verstehen kann man den eigentlich nur, wenn man den Algorithmus gut 
kennt.

Man kann es auch umgekehrt machen, aber der Algorithmus aus dem Lehrbuch 
ist 1000 mal besser verdaulich, als die umgekehrte Erschließung aus dem 
Hex- oder Assemblercode.
Letzteres ist sehr viel einfacher, wenn man bereits Erfahrung (+ 
Theorie) mit Algorithmen und deren Implememtierung hat.

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Super Erklährungen.. ;-)

Also warum Typeinfos: Ich versuch eine minimale OOP Sprache zu bauen. 
Und die Anwendungen die damit "entstehen" sollen sozusagen zur Laufzeit 
wissen, was sie tuhen, oder woraus sie bestehen. (Komisch beschrieben)

Auch wegen der Kapselung in Objekte und Vererbung bzw nachträglicher 
Runtime-Erweiterung(en), und insgesamt Vereinfachung beim Debug, damit 
auch ich später weiß was die Anwendung grad wirklich macht brauch ich 
die Typeinfos.

Und längerfristig soll da eine art Entwicklungsumgebung "mit eingebaut" 
werden. Also ein Tool zum Programmieren und "jederzeit Source erweitern" 
ist in der "Sprache" enthalten.

Ich denk mal so sehr viel Verwaltungs-Overhead ist es ja nicht, wenn ich 
das mit den statischen "Offsets" beim compilieren vergleichen würde.
Und die "Offsets" für Objekte und dessen Member für die Daten / Heap 
würde ich dann besser immer ausrechnen anhand der Typenbeschreibung und 
nicht compilieren.

Sodass ich einen OOP-Layer recht nahe Bare-Metal hab, dazu brauch ich 
(beispiel µC AVR) ja nur neue "Types" [die über das "Byte" hinaus gehen. 
Also uint16, uint32 ..., und die Vorzeichenlosen. Dazu paar Sondertypen 
float string usw. Und die weiteren "Elemente" wie Interrupt Events und 
Hardware-Dinge] fest in den Flash auf der HW ein compilieren.
Es soll dann von anderer Quelle den Code ausführen, und vorher seinen 
"Type Set" davon erweitern bzw. updaten können...
__

Hat jemand noch ne Idee wie ich das ganze dann Crossover machen kann? 
Ist ja eigentlich nochmal ein Layer "Drüber" bzw. dann Compiler-Sache 
oder?
Ich denk "mein OOP-Ding" wird so eine "Intermediate-Language" damit dass 
auch überhaupt Crossover geht. Dazu muss ich (am ende) jede Zeile bzw. 
ASM Befehl für den fertigen RTE-Code (beispiel µC AVR Flash) aus einem 
"Lookuptable" für die Ziel-Hardware holen und zusammensetzen. !?? Dort 
natürlich noch statische Offsets nehmen! Oder wie macht man das?

Also ich möchte das nur zu lernzwecken machen.
__

rbx schrieb:
> Verstehen kann man den eigentlich nur, wenn man den Algorithmus gut
> kennt.
>
> Man kann es auch umgekehrt machen, aber der Algorithmus aus dem Lehrbuch
> ist 1000 mal besser verdaulich, als die umgekehrte Erschließung aus dem
> Hex- oder Assemblercode.

Daher möchte ich es selber schreiben!! Ich hatte nur ein Beispiel zum 
"Anlehmen" gesucht... Es wird dann eben nur ein hardwarenaher 
interpreter... Warscheinlich "reicht" JSON des für den "auszuführenden 
Sourcecode".

: Bearbeitet durch User
von foobar (Gast)


Lesenswert?

Ich empfehle dir dringend, dir erstmal das nötige Grundwissen 
anzueignen, damit du überhaupt weißt, wovon du sprichst - z.Zt. ergeben 
die meisten deiner Aussagen keinen Sinn, reines Buzzword-Bingo.

Als Einstieg in den Compilerbau z.B. https://en.wikipedia.org/wiki/PL/0 
.

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

foobar schrieb:
> Ich empfehle dir dringend, dir erstmal das nötige Grundwissen
> anzueignen, damit du überhaupt weißt, wovon du sprichst - z.Zt. ergeben
> die meisten deiner Aussagen keinen Sinn, reines Buzzword-Bingo.

Ich hab ne Runtime im Plan. Im Kopf. Hab durch den Thread nur paar 
Sachen bestätigt bekommen. Ich kann jetzt ein OOP-Gelände bauen. Von mir 
aus kann das Objekt auch "Kritzikratzi" oder "Hausschuh" heißen.

georg schrieb:
> Im übrigen ist alles implementationsabhängig, da muss man
> die Dokumentation heranziehen, soweit für diese Fragen überhaupt
> vorhanden.

Ich hab soweit alles verstanden was ich dazu brauche. Ja foobar dann 
korrigier mich hald. Noch mehr "Overhead" will ich vermeiden. Was meinst 
du denn eigentlich, außer dass du durch die alten negativen Worte dieses 
Threads (die bereits kompensiert wurden) urteilst?

Was in deinem URL steht hatte ich ja auch schon beschrieben...
Und da kommt so ne Art "Basic" bei raus, aber ich will´s mit JSON 
Syntax.

Und ich mach noch diesen "statischen" layer drüber, für den Compiler und 
Crossover. Bingo. Ist für mich erstmal "logisch und weitsichtig" genug.

Sorry wenn du´s nicht verstanden hast.

Wie gesagt Danke für die Tipps.

von M.K. B. (mkbit)


Lesenswert?

foobar schrieb:
> Ich empfehle dir dringend, dir erstmal das nötige Grundwissen
> anzueignen, damit du überhaupt weißt, wovon du sprichst - z.Zt. ergeben
> die meisten deiner Aussagen keinen Sinn, reines Buzzword-Bingo.

Ist nicht böse gemeint, aber das ist auch mein Eindruck.

Meine Frage, was du damit erreichen willst hat sich auch noch nicht 
beantwortet.
Entweder willst du unbedingt diese Runtime schreiben. Ok, mach es, 
irgendwer hat auch mal Brainfuck erfunden.
Vielleicht möchtest du mit der Runtime aber auch ein Projekt von dir 
realisieren, dann könnten wir dir bei der Suche nach den richtigen Tools 
helfen, die du nicht erst selbst schreiben musst.

von georg (Gast)


Lesenswert?

Tim S. schrieb:
> Was meinst
> du denn eigentlich, außer dass du durch die alten negativen Worte dieses
> Threads (die bereits kompensiert wurden) urteilst?

Tim S. schrieb:
> Was in deinem URL steht hatte ich ja auch schon beschrieben...

Tim S. schrieb:
> Sorry wenn du´s nicht verstanden hast.

Ich habe überhaupt keinen URL angegeben, und ich kann in meinen Posts 
auch nichts finden was dir einen Grund gibt mich anzupöbeln. Also ist 
hier für mich Schluss.

Es wird eh nichts draus, weil man Programmierprobleme nicht mit 
schlechtem Benehmen lösen kann, das funktioniert höchsten von Mensch zu 
Mensch, siehe Trump. Genausowenig kann man fehlende Kentnisse durch 
Agressivität kompensieren.

Georg

von Dirk K. (merciless)


Lesenswert?

Tim S. schrieb:
> Ich denk mal so sehr viel Verwaltungs-Overhead ist es ja nicht, wenn ich
> das mit den statischen "Offsets" beim compilieren vergleichen würde.
> Und die "Offsets" für Objekte und dessen Member für die Daten / Heap
> würde ich dann besser immer ausrechnen anhand der Typenbeschreibung und
> nicht compilieren.

Wow: Also ich äußere mal die gewagte These, dass
du deinen "OOP-Layer" nicht an einem verregneten
Nachmittag zusammenklöppelst.

Da hier ja Buzzword-Bingo gespielt wird: OOP
bedeutet Polymorphie, was bedeutet, dass erst
zur Laufzeit entschieden wird, welche Methode
einer Klassenhierarchie aufgerufen wird. D.h.
du musst dich mit virtual tables rumschlagen,
in denen Einsprungadressen verwaltet werden.

Der GCC ist open source, schau doch einfach
mal da rein, welchen Aufwand es bedeudet, das
umzusetzen.

BTW: Was meinst du mit JSON-Syntax? JSON ist ein
Dateiformat zum Austausch von Daten, das hat mit
einer Programmiersprache recht wenig zu tun.

Just my 2 cents
merciless
(der mit Grauen an die Compilerbau-Vorlesungen
zurückdenkt)

: Bearbeitet durch User
von G. P. (gpnt)


Lesenswert?

Achim S. schrieb:
> Die ersten C++-compiler waren quasi präprozessoren-konstrukte..
>
> [...] Geh den Weg
> einfach von C aus nach.

Genau, überlege dir einfach, wie du C so erweitern könntest, dass es 
objektorientiert wird.
Ich kein Experte im Compilerbau, aber ich vermute mal, dass jede 
Programmiersprache die Objektorientierung unterschiedlich umsetzt.
Also überlege dir basierend auf deinem Wissen doch einfach etwas 
eigenes!

Tim S. schrieb:
> Tim S. schrieb:
>> weil ich immer erst wissen will wie es funktioniert, bevor
>> ich es anwende.
>
> Sonnst wäre es ja zu einfach!!!

Ich weiß ja nicht ob du noch Student bist oder ob du in der Industrie 
schon erfolgreich Projekte umgesetzt hast. Aufgrund der ersten Aussage 
("ich will immer erst wissen, wie es funktioniert") nehme ich mal an, 
dass du noch keine Projekte in einer OOP-Programmiersprache umgesetzt 
hast und deshalb ein gut gemeinter Ratschlag:

Vergiss diese Denke! Sonst wirst du weder das Studium packen (selbst 
erlebt bei nem Kumpel von dem ich hier glaub schonmal berichtet habe...) 
noch erfolgreich irgendwelche Projekte umsetzen!
Nicht falsch verstehen, es ist nie schlecht, ein solides 
Grundverständnis zu haben, aber manchmal muss es Zack auf Zack gehen und 
dann zählt nur die Anwendung.

: Bearbeitet durch User
von Arc N. (arc)


Lesenswert?

Tim S. schrieb:
> Super Erklährungen.. ;-)
>
> Also warum Typeinfos: Ich versuch eine minimale OOP Sprache zu bauen.
> Und die Anwendungen die damit "entstehen" sollen sozusagen zur Laufzeit
> wissen, was sie tuhen, oder woraus sie bestehen. (Komisch beschrieben)

Das ist Introspektion bzw. Reflektion.

> Auch wegen der Kapselung in Objekte und Vererbung bzw nachträglicher
> Runtime-Erweiterung(en), und insgesamt Vereinfachung beim Debug, damit
> auch ich später weiß was die Anwendung grad wirklich macht brauch ich
> die Typeinfos.
>
> Und längerfristig soll da eine art Entwicklungsumgebung "mit eingebaut"
> werden. Also ein Tool zum Programmieren und "jederzeit Source erweitern"
> ist in der "Sprache" enthalten.

Klingt nach Smalltalk, was nicht nur Aufgrund der einfach zu 
implementierenden Sprache sehenswert ist.

Klassisches Buch dazu wäre das Blue Book
http://stephane.ducasse.free.fr/FreeBooks/BlueBook/Bluebook.pdf
oder eine der Implementierungen wie Squeak ansehen.
Oberon(2) ist inkl. der Implementierungen auch sinnvoll, da selbst mit 
dazugehörigem OS einfach zu verstehen und zu übersetzen. Bspw.
https://www.inf.ethz.ch/personal/wirth/ProjectOberon1992.pdf
oder
http://www-oldurls.inf.ethz.ch/personal/wirth/index.html bzw.
http://www-oldurls.inf.ethz.ch/personal/wirth/Oberon/index.html
Ebenso für die grundlegenden Konzepte eines Compilers 1) zu empfehlen 
u.a.
http://www-oldurls.inf.ethz.ch/personal/wirth/CompilerConstruction/index.html
Wen mehr interessiert greift bspw. zum Dragon Book (Compilers: 
Principles, Techniques, and Tools, Aho, Lam, Sethi, Ullman) oder macht 
einen Online-Kurs: 
https://online.stanford.edu/courses/soe-ycscs1-compilers (min. gutes 
Verständnis von Algorithmen und Datenstrukturen, wie bei allen 
Compiler-Kursen/Büchern, nötig, implementiert wird eine einfache, 
objektorientierte Sprache).

1) Nette Übung am Rande: Einen Lisp-Interpreter schreiben 
https://programmingpraxis.com/2011/11/01/rip-john-mccarthy/

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Tim S. schrieb:

> [Ich frage, weil ich immer erst wissen will wie es funktioniert, bevor
> ich es anwende. Das hatt aber in dem Fall nicht so ganz geklappt.
> Learning by Doing usw. Also ich weiß was mit OOP geht, aber noch nicht
> wie es funktioniert auf der "Byte-Schaufel"-Ebene]

Dann lerne einfach Assembler und schaue dir an, was die Compiler von 
OO-Sprachen für die typischen OO-Konstrukte produzieren.

Ich denke, ich verstehe sehr gut, was du eigentlich meinst. Ich selber 
habe das OO-Konzept damals(tm) auch erst auf diesem Weg wirklich 
kapiert. Das abstrakte akademische Geseiere alleine hat den Erkenntnis 
nicht purzeln lassen. Erst der Umweg über die Analyse des "ganz unten" 
hat mir die Konzepte wirklich klar gemacht.

Allerdings: bei heutigen OO-Sprachen ist es nicht mehr ganz so einfach 
wie damals(tm). Der ganze Scheiß, der in modernen Sprachen zur 
Compile-Zeit passiert, ist so nicht zu erschließen. Also so'n Kram wie 
Templates in C++ oder Generics in .net-Sprachen. Um das zu kapieren, 
muss man die Laufzeit wirklich verstanden haben. Dann kann man das 
Wissen sozusagen in die Compile-Zeit "rückübersetzen", denn die 
grundlegenden Prinzipien sind dieselben. Es gibt nur keine (relativ) 
einfache Möglichkeit mehr, exakt zu verfolgen, was hier eigentlich 
passiert...

von W.S. (Gast)


Lesenswert?

Tim S. schrieb:
> Kennt jemand ein Buch oder Tutorial bzw. Beispiele, in dem ein OBJEKT
> definiert ist?

Aber ja doch.

Versuche mal, dir die Dokumentation zu besorgen, die DAMALS, also vor 
langer Zeit mit Turbopascal oder mit Borland Pascal 7 gekommen war. Ja, 
das waren richtige Bücher und es gab darinnen eine wirklich gute 
Einführung in die Welt der objektorientierten Programmierung.

Da ist m.W. keines der später erschienenen Werke herangekommen.

W.S.

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Sorry - dass ich mich hier so lange nicht gemeldet habe.
Und nochmal tausend Dank für die vielen Infos und die Erklärungen.

Dirk K. schrieb:
> die gewagte These, dass
> du deinen "OOP-Layer" nicht an einem verregneten
> Nachmittag zusammenklöppelst.

Ja richtig, das dauert ein Weilchen...

> zur Laufzeit entschieden wird, welche Methode
> einer Klassenhierarchie aufgerufen wird. D.h.
> du musst dich mit virtual tables rumschlagen,
> in denen Einsprungadressen verwaltet werden.

Ja genau davon rede ich ja - bzw. das habe ich ja angefragt!
Und ich hab auch einige weitere Sachen (z.T. hier) gefunden.


G. P. schrieb:
>> Geh den Weg
>> einfach von C aus nach.
>
> Genau, überlege dir einfach, wie du C so erweitern könntest, dass es
> objektorientiert wird.
> Ich kein Experte im Compilerbau, aber ich vermute mal, dass jede
> Programmiersprache die Objektorientierung unterschiedlich umsetzt.
> Also überlege dir basierend auf deinem Wissen doch einfach etwas
> eigenes!

Das ist ja der Sinn des Threads und der Anfrage. Vorher wusste ich es 
noch nicht genau. Mir hat mehr oder weniger die "Bestätigung" gefehlt, 
bevor ich mich da irgendwo hin verlaufe beim Programmieren. Naja ich 
habs jetzt aber kapiert.

G. P. schrieb:
> Vergiss diese Denke! Sonst wirst du weder das Studium packen (selbst
> erlebt bei nem Kumpel von dem ich hier glaub schonmal berichtet habe...)
> noch erfolgreich irgendwelche Projekte umsetzen!
[...]
> Grundverständnis zu haben, aber manchmal muss es Zack auf Zack gehen und
> dann zählt nur die Anwendung.

Naja das ist Grundverständnis für mich. Ich finde das "OOP-Konstrukt" 
zum Lernen erstmal ganz ausreichend. Es ist im ersten Moment schon recht 
viel - Also es hilft nunmal beim logischen Denken in fast jeden 
Arbeitsschritt... Und das mit "Zack auf Zack" hab ich natürlich auch 
schon mehrfach erlebt - oder erleben müssen. Statisches Pfuschi ist das 
dann meist, was da raus kommt (oder verlangt wird) - wenn überhaupt was 
bei raus kommt (/bzw raus kommen kann).

Und in neben-Thread(s) regt man sich wegen schlechter Programmierung 
über zig solcher Layer (übereinander) auf usw. Und nein ich bin kein 
Student ;-) Ich will diesen OOP Layer wie anfangs beschrieben auch 
selber zumindest verstanden haben - und mit den ganzen Listen und den 
Raw-Staff hatte ich anfangs noch einen kleinen "Knoten" in der Birne 
(der Knoten ist jetzt aber Disposed!) Hat sich alles kompensiert und 
aufgelößt... Wenn ich am PC (egal wo) irgendwass in der Richtung sehe, 
kann ich direkter besser Rückschlüsse ziehen usw. Und ohne das zu 
können, komme ich mir irgendwie albern vor ;-) wenn ichs dann trotzdem 
benutzen oder anwenden sollte o. müsste oder gar will - nee. Wäre ja 
irgendwie komisch mit "geht hald einfach so". Also Danke nochmal!

Das ist wie "c-hater" es oben beschrieben hat:
Beitrag "Re: OOP SourceCode"

Man muss sich ja nicht gleich alle Layer und Funktionen zeilengenau 
reinziehen. Aber das Grundverständnis brauch ich schon...
___
Und angeregt durch den Thread (von cpu_builder),
Beitrag "Re: diskrete CPU"
wollte ich noch fragen, ob es möglich ist, diesesn "OOP Layer" komplett 
in Hardware zu realisieren, oder ob es solch eine CPU schon irgendwo 
gibt?

dass z.B. die Hardware die "klassischen konstrukte" wie Events \ Invokes 
\ Handler [Exceptions] kann und die Types über 'ByteArray-Größen' in den 
Instanzen "kennt", und dadurch z.B. Table-Offsets auch ebenso 'gleich 
kennt' und nicht erst rechnen muss(?) - Kurz gesagt über so ne art 
Memory-Controller oder Mapper fürs OOP in HW!? Oder dass schon 
Hardware-Mäßig die 'Accessoren' (private public) 'nutzbar' sind!? Gibts 
sowas?
Lernkette FPGA?
___
Tim S. schrieb:
> Und da kommt so ne Art "Basic" bei raus, aber ich will´s mit JSON
> Syntax.

Dirk K. schrieb:
> BTW: Was meinst du mit JSON-Syntax? JSON ist ein
> Dateiformat zum Austausch von Daten, das hat mit
> einer Programmiersprache recht wenig zu tun.

Ich meinte damit ja, dass man in das ECMA-JSON 'ne Sprache oder Objekte 
rein-packen' kann (als Austauschformat) - also dass man eine komplette 
(Beschreibungs-)Sprache mit diesem Syntax bauen kann - worauf die 
meisten "modernen" Anwender-Sprachen ja eh schon irgendwo basieren. Ich 
meine damit grob 'des mit den Klammern, und kein Basic')

von Arc N. (arc)


Lesenswert?

Tim S. schrieb:
> Und angeregt durch den Thread (von cpu_builder),
> Beitrag "Re: diskrete CPU"
> wollte ich noch fragen, ob es möglich ist, diesesn "OOP Layer" komplett
> in Hardware zu realisieren, oder ob es solch eine CPU schon irgendwo
> gibt?

Noch ein Klassiker ;)
https://en.wikipedia.org/wiki/Rekursiv bzw. dessen Vorläufer und 
Nachfolger auf http://www.merlintec.com/swiki/hardware/26.html
andere, die mehr oder weniger vollständig die Java-Virtual-Machine 
implementieren, sind z.T. hier aufgeführt:
http://www.cpushack.com/CPU/cpu7.html
und
https://en.wikipedia.org/wiki/Java_processor

von Dirk K. (merciless)


Lesenswert?

Tim S. schrieb:
> Ja richtig, das dauert ein Weilchen...
Also ich bin verwirrt: Gehe ich Recht in der Annahme,
dass du wissen möchtst, wie OOP auf Assembler-Ebene
umgesetzt wird, um sie evtl. in Hardware abzubilden?

Du musst dich auseinandersetzen mit dem Compilerbau, da
wird gelehrt, wie man es umsetzen könnte. Praktisches
Anschauungsmaterial liefern die GNU-Compiler für OO-
Sprachen, offene Java-Implementierungen, Google Go,
Mono.NET-Implementierung, ... genügend quelloffene
Compiler für Jahre an Reverse Engineering.

Ich denke, du unterschätzt den Aufwand. Es wird kein
Tutorial geben, dass dir in kurzer Zeit die ganze
Problematik erklärt. Allein zur Theorie (Compilerbau,
Formale Sprachen, Grammatiken) gibt es meterweise
Literatur, da könnte man ein eigenes Studienfach daraus
machen. Auch die praktische Umsetzung ist alles andere
als trivial: C++ wird jetzt 40 Jahre alt, und erst seit
einigen Jahren gibt es Compiler, die den Umgang damit
erträglich gestalten.

merciless

von Stefan S. (Gast)


Lesenswert?

Tim S. schrieb:
> Sorry - dass ich mich hier so lange nicht gemeldet habe.

Du könntest auch mal das folgende lesen, dann wird deine OOP 
Begeisterung womöglich etwas abnehmen:

https://medium.com/@cscalfani/goodbye-object-oriented-programming-a59cda4c0e53

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Dirk K. schrieb:
> genügend quelloffene
> Compiler für Jahre an Reverse Engineering.

Naja so krass ist es auch wieder nicht.

Tim S. schrieb:
> Und ich mach noch diesen "statischen" layer drüber, für den Compiler und
> Crossover.

Der parst den Source, teilt das in Blöcke und Abschnitte auf (und kann 
damit optimierungen machen), und setzt das ganze "statisch" und 
Wörterbuch-Mäßig für die Zielhardware und dessen Register und (Stack) 
Eigenheiten um, und spuckt es letztendlich Binary aus. Also mal ganz 
ohne fremde OS Calls oder Framework Layer Eigenschaften und Funktionen 
dazwischen beschrieben. Da muss ich mir eher die Ziel-Plattformen 
Datasheets [Reverse Engineering] anschauen für den "Compilerbau".

Dirk K. schrieb:
> Ich denke, du unterschätzt den Aufwand. Es wird kein
> Tutorial geben, dass dir in kurzer Zeit die ganze
> Problematik erklärt. Allein zur Theorie (Compilerbau,
> Formale Sprachen, Grammatiken) gibt es meterweise
> Literatur, da könnte man ein eigenes Studienfach daraus
> machen.

Der Einwand ist natürlich klar. ;-) Das geht nicht alles von heute auf 
morgen. Und das hab ich ja jetzt drinnen. Und damit komm ich erstmal 
wieder weiter... ;-)

Dirk K. schrieb:
> Also ich bin verwirrt: Gehe ich Recht in der Annahme,
> dass du wissen möchtst, wie OOP auf Assembler-Ebene
> umgesetzt wird, um sie evtl. in Hardware abzubilden?

Es läuft wohl darauf hinaus. Aber in Software reicht erstmal völlig. Das 
bekomm ich zam! - In Hardware wäre dann das Langzeit Lebensprojekt Hobby 
Lernkette [FPGA] fortsetzung usw. Darum auch erst die Frage ob es das 
schon gibt. ^^ Die Java Cpus hatte ich schon fast wieder vergessen ;-)

Aber wie gesagt, nur das OOP-Konstrukt (in Software) reicht jetzt 
erstmal.

Stefan S. schrieb:
> Du könntest auch mal das folgende lesen, dann wird deine OOP
> Begeisterung womöglich etwas abnehmen:
>
> https://medium.com/@cscalfani/goodbye-object-oriented-programming-a59cda4c0e53

Ok habe ich gelesen. Das ist ne Anregung: Sodass du trotzdem nur die 
Banane haben kannst. (Ohne Gorilla der sie hält, und ohne den Urwald 
drum rum) Und so ein Modell stricke ich ja grade. Noch kann ich alte 
Krücken beseitigen oder gar nicht erst aufkommen lassen. Schwerpunkt ist 
Kommunikation und fürs IOT. Und ich will 'Types' und Instanzen möglichst 
"verlustfrei", so wie die 'grad Runtime sind' mit Modell Serialisieren 
und Speichern oder (übers Netz) Cross transporieren können usw. (Dazu 
der OOP "Layer")

Insgesammt soll Source- sowie (kompilierte)Runtime- und Flash/Ram 
(Instanzen) und Debug Inhalt aus so ziemlich der selben Sprache bzw. 
Code bestehen (auch wenn es Overhead bekommt), (Ja vll sogar mal direkt 
in Hardware - ihr habt mich überzeugt) und ich mir dann eigentlich sogar 
Compiler spaaren kann. So dass ziemlich direkt in HW Startadressen von 
Types u. Instanzen für die Member rumgeschoben werden (MemoryCtrl. u. 
ArbeitsRegister), und die CPU dann gleich darauf ihren "ASM" Befehl 
(RechenRegister) Ausführen kann. Dass es immer nur "RuntimeCode" gibt. 
Und wenn (z.B) irgendwass zu 'private' ist, gibts ne Exception. Eben 
'direkt' OOP. Den Stack /Layer in Hardware oder so. Ähnlich wie 
Grafikkarten die Triangles oder Physics übernehmen. Aber das ist ja 
alles wieder ein ganz anderes Thema und das dauert natürlich noch sehr 
viel länger.

Sorry nochmal an alle, die nur Buzzwort-Bingo gelesen o. verstanden 
haben. Und dass ich meine vorherigen Beiträge nicht mehr gelesen hab :-)
@georg: Das war aneinander vorbeigeredet und ne kleine Verwechslung - Ja 
ich hab bisschen übern Tisch gezogen nach den Vorwüfen (Daher kam auch 
die "Pause" von mir), und es war nicht dein URL.

Gruß tsx

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.