Als jahrelanger Qt/QML-Enwickler, der damit auch sein Brötchen verdient, möchte ich mehr darüber erfahren wie QML "under the hood funktioniert". Ich weiß, dass... - jedes QML-Element (Rectangle, TextArea...) im Hintergrund durch eine gleichnamige C++-Klasse abgebildet wird. - QML auf der Zielplattform interpretiert wird. Mir ist aber absolut unklar wie aus QML-Code zur Laufzeit ausführbarer Code entsteht. Das einzige was ich dazu finden konnte ist diese Seite hier: https://www.kdab.com/qml-engine-internals-part-1-qml-file-loading/ Ich habe das mehrmals durchgelesen und verstehe es immer noch nicht. Vielleicht fehlen mir die Grundlagen dafür oder ich bin als Kind zu heiß gebadet worden. ;-) Andere Programmier-/IT-Themen konnte ich mir bisher zumindest immer autodidaktsch beibringen (habe das ja auch mal studiert ;-) ) Kennt ihr vielleicht noch gute Quellen (gerne auch StackOverflow-Artikel o.ä.). Oder könnte ein Profi kurz erklären was auf der Zielplattform passiert? Vielen Dank!
QML code parser erzeugt Objekte von entprechenden Klassen welche dann die Jobs erledigen.
Schau mal hier: https://de.wikipedia.org/wiki/Just-in-time-Kompilierung Mit Qt 6 wird sich aber einiges ändern, weil dann kann der QML Code auch in C++ kompiliert werden kann, welches bessere Performance, kleineren Footprint und noch ein paar Verbesserungen verspricht.
NichtWichtig schrieb: > QML code parser erzeugt Objekte von entprechenden Klassen Aber wie genau funktioniert das? Das ist doch genau das was der Compiler (gcc) macht - und das ist ein "riesiges" Programm. Dirk schrieb: > Mit Qt 6 wird sich aber einiges ändern, weil dann kann der QML Code auch > in C++ kompiliert werden kann, welches bessere Performance, kleineren > Footprint und noch ein paar Verbesserungen verspricht. Klingt interessant. Wenn du das einen Link dazu hast, gerne her damit.
Neugierig schrieb: > Dirk schrieb: >> Mit Qt 6 wird sich aber einiges ändern, weil dann kann der QML Code auch >> in C++ kompiliert werden kann, welches bessere Performance, kleineren >> Footprint und noch ein paar Verbesserungen verspricht. > > Klingt interessant. Wenn du das einen Link dazu hast, gerne her damit. https://www.heise.de/developer/meldung/Qt-Chef-Maintainer-veroeffentlicht-erste-Plaene-fuer-Qt-6-4490900.html Hier findet man was. Hätte den Vorteil Syntax-Fehler in QML schon zur Compile-Zeit zu entdecken.
Neugierig schrieb: > Als jahrelanger Qt/QML-Enwickler, der damit auch sein Brötchen verdient, NichtWichtig schrieb: > QML code parser erzeugt Objekte von entprechenden Klassen Dirk schrieb: > https://de.wikipedia.org/wiki/Just-in-time-Kompilierung Neugierig schrieb: > Aber wie genau funktioniert das? Was genau hast du nicht verstanden? Oder bist du vielleicht Analphabet und liest die Antworten überhaupt nicht? Irgendwie ist es nicht nachvollziehbar, dass du Entwickler bist ohne zumindest Grundlagen des Compilerbaus oder auch nur ansatzweise den heutigen Stand der Technik zu kennen. Bei welcher Firma arbeitest du (noch)?
>Klingt interessant. Wenn du das einen Link dazu hast, gerne her damit. Du solltest schon die Blogs verfolgen und auf dem laufenden bleiben, insbesondere über die Roadmap. https://www.youtube.com/watch?v=YmwAeS_ojPA >Irgendwie ist es nicht nachvollziehbar, dass du Entwickler bist ohne >zumindest Grundlagen des Compilerbaus oder auch nur ansatzweise den >heutigen Stand der Technik zu kennen. Braucht man nicht wirklich als reiner Applikationengineer.
Überhaupt NichtWichtig schrieb: > Oder bist du vielleicht Analphabet und liest die Antworten überhaupt > nicht? Ist es wirklich so schwer zu verstehen, was ich meine: Ich will wissen wie die QML-Elemente mit den korrespondierenden C++-Klassen zusammenhängen und wie daraus zur Laufzeit Code entsteht. Und ja, ich weiß, was JIT ist.
Neugierig schrieb: > Ist es wirklich so schwer zu verstehen, was ich meine: Ich will wissen > wie die QML-Elemente mit den korrespondierenden C++-Klassen > zusammenhängen und wie daraus zur Laufzeit Code entsteht. QML wird geparst und just in time compiliert. Wenn du es genauer wissen willst, stell eine konkrete Frage oder guck dir die Qt sources an. > Und ja, ich weiß, was JIT ist. Nein. Weißt du nicht. Zumindest weißt du nicht, was das tut und wozu es gut ist. Sonst würdest du nicht so strunzdumm deine Fragen wiederholen.
Dirk schrieb: > Mit Qt 6 wird sich aber einiges ändern, weil dann kann der QML Code auch > in C++ kompiliert werden kann, welches bessere Performance, kleineren > Footprint und noch ein paar Verbesserungen verspricht. Soweit ich sehen kann, gibt es das bereits in Qt 5: https://doc.qt.io/QtQuickCompiler/ Neugierig schrieb: > Hier findet man was. Hätte den Vorteil Syntax-Fehler in QML schon zur > Compile-Zeit zu entdecken. Dafür aber den Nachteil, dass man nach jeder Änderung erst neu compilieren muss. Das schöne an Skriptsprachen bei der Entwicklung ist, dass man das nicht braucht. Neugierig schrieb: > Ist es wirklich so schwer zu verstehen, was ich meine: Ich will wissen > wie die QML-Elemente mit den korrespondierenden C++-Klassen > zusammenhängen und wie daraus zur Laufzeit Code entsteht. > Und ja, ich weiß, was JIT ist. Na dann hast du ja die Antwort.
Neugierig schrieb: > Überhaupt NichtWichtig schrieb: >> Oder bist du vielleicht Analphabet und liest die Antworten überhaupt >> nicht? > > Ist es wirklich so schwer zu verstehen, was ich meine: Ich will wissen > wie die QML-Elemente mit den korrespondierenden C++-Klassen > zusammenhängen und wie daraus zur Laufzeit Code entsteht. > > Und ja, ich weiß, was JIT ist. Ich probiers mal: 1. Ob da ein JIT(ter) verwendet wird oder nicht ist erstmal nur für die Geschwindikeit relevant, so was wie QML kann man auch komplett ohne Jitter bauen (ist dann eben langsamer) - also hat das Wort JIT leider hier so gut wie keine Erklärungsbedeutung, auch wenn es ein sooo schönes Buzzword ist :) 2. Wie Umfangreich QML ist und ob da noch Javascript mit darunter steck ist fuer ein Grundverständnis auch unrelevant, das sind nur Features und sehr viel Code aber das Konzept dahinter wird dadurch nicht im Kern veraendert 3. QT bringt schon mit seinem Mock/Meta System, Signals und Funktionsufrufe sehr viel Basisarbeit mit - im Grunde kann man ja mehr oder minder fast alles mit Strings Aufrufen was man in die Qt Welt integriert d.h die meisten Features lassen sich zur Laufzeit über eine sehr lockere Schnittstelle erreichen und ausfuehren, auch wenn das so kaum oder niemand macht D.h. sich per Metadaten zu Informieren welche Schnittstellen Typen oder deren Objekte aufweisen und diese ohne direkte Implementation auf zurufen oder miteinander zu verschränken Im Grunde kannst du jede Typ/Objekt der String finden oder dir eine Liste aller bekannten geben lassen und dann per QVariant entweder einen ValueType abfragen oder per MethodenAufruf(Methode, QVariantList parameter) alles aufrufen 3. Im Grunde ist QML nichts anderes als eine Textdatei+Parser+Interpreter+Factories der sich diese Standard Qt Schnittstellen zu nutze macht um über den QML(und auch Javascript) Interpreter in die C++ Welt zu kommen und die Cpp Welt macht das gleiche Deswegen die vielen Strings wenn man Typen zwischen den Welten zuordnen will oder das komische es-kann-funktionieren-Verhalten von QML weil der Interpreter einfach nur per String in eine Property oder Funktion Map einsticht und strunzdumm die Parameter dran haengt, passen die nicht passiert erst mal nix, meistens nicht mal eine Fehlermeldung Woher ich weiss wie sowas funktioniert: Ich baue solche Systeme (Ohne QML, weil damals noch nicht existent und heute noch zu langsam) und es ist gar nicht soo kompliziert, nur viel Code der eben in nativem Code triviales wie assignment oder calls abstrahiert damit man es zur Laufzeit machen kann und leider habe ich keinen JITer weil meine Kollegen denken das wäre Voodoo:)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.