Microsoft-ui-xaml: Vorschlag: WinUI 3 Rostunterstützung

Erstellt am 20. Mai 2020  ·  14Kommentare  ·  Quelle: microsoft/microsoft-ui-xaml

Rost wird immer beliebter. Es kann bereits DirectX 12 ansteuern, aber nur im Vollbildmodus oder über UI-Bibliotheken, die aussehen, als wären sie von Ingenieuren für Ingenieure gemacht worden. Die WinUI3-Unterstützung für Rost würde es ermöglichen, Rost-Apps zu erstellen, die modern und poliert aussehen und unter der Haube alle Vorteile von Rost genießen. Das würde Ingenieure und Marketing glücklich machen, dh diese Kombination für kommerzielle Apps praktikabel machen.

feature proposal

Hilfreichster Kommentar

winrt-rs ist vielleicht in der Lage, die Verbindung herzustellen, aber eine explizite winui3-rs -Kiste, die die notwendigen Abhängigkeiten einzieht und eine funktionierende Hallo-Welt hat, wird es viel leichter zugänglich machen.

Alle 14 Kommentare

An Sprachzuordnungen scheint bereits gearbeitet zu werden: https://github.com/microsoft/winrt-rs

winrt-rs ist vielleicht in der Lage, die Verbindung herzustellen, aber eine explizite winui3-rs -Kiste, die die notwendigen Abhängigkeiten einzieht und eine funktionierende Hallo-Welt hat, wird es viel leichter zugänglich machen.

Dies wird (wahrscheinlich) dadurch blockiert, dass winrt-rs stabil ist.

@kennykerr als FYI

Die Rust winrt- Kiste bietet die Sprachprojektion und Paketierungsunterstützung, vergleichbar mit C++/WinRT mit seiner VS-Erweiterung und NuGet- Unterstützung. All das wird heute von Rust/WinRT bereitgestellt. Es steht auf meiner Liste, bald einige Xaml-Beispiele hinzuzufügen. Wir haben noch einiges zu tun, um die Erstellung Ihrer eigenen Xaml-Steuerelemente in Rust zu unterstützen, aber Sie können bereits grundlegende Xaml-Apps erstellen und wir arbeiten mit Hochdruck daran, eine vollständige Typsystemunterstützung bereitzustellen.

Ich würde gerne hören, was die Leute sonst noch suchen. Ich kann mir vorstellen, dass es hier eher darum geht, Unterstützung für die Art von Dingen bereitzustellen, die der Xaml-Compiler traditionell übernimmt, aber ich kann mich irren.

Das würde ich auch sehr gerne sehen.
Rost wird nicht ohne Grund immer beliebter. Es ist eine wirklich gute Sprache, und Microsoft hat sogar gesagt, dass es Rost verwendet, um einen Teil von Windows zu erstellen.
Ein um Rost herum aufgebautes App-Framework würde eine Leistung auf C++-Niveau bedeuten, jedoch mit viel besser lesbarem Code und weniger Speicherfehlern.

@kennykerr "Ich würde gerne hören, wonach die Leute noch suchen."
die Hauptmotivation war, professionell aussehende Anwendungen haben zu können, die möglichst nativ in Rost geschrieben sind. Irgendwie scheint es, dass Leute, die über großartige Sprachdesignfähigkeiten verfügen, nicht dieselben sind, die über großartige künstlerische Fähigkeiten im Bereich des UI-Widget-Designs verfügen. Ein Wrapper in Rost für WIN UI 3 würde also die Kluft überbrücken. Aber die Eintrittsbarriere ist hoch, wenn es Bibliotheken gibt, die den Trick machen sollten, aber kein Beispiel dafür haben. Ein Hallo-Welt-Beispiel zu haben, das die Technologien miteinander verbindet, wird viel mehr Leute dazu bringen, tatsächlich einzutauchen und ihre eigenen Ableitungen daraus zu machen. Ich persönlich würde mich über ein Rostbeispiel mit WIN UI 3 und DirectX12 in einem Panel innerhalb der WIN UI-App freuen. Ich habe nicht angefangen daran zu arbeiten, da es mir schwer vorkam, als ich auch gerade erst anfing, Rost zu lernen.

Ich habe mich darauf gefreut, mehr GUI-Arbeit in Rust zu erledigen. WinUI klingt wie der richtige Ort, um es auszuprobieren

@kennykerr "Ein Hallo-Welt-Beispiel zu haben, das die Technologien miteinander verbindet, wird viel mehr Leute dazu bringen, tatsächlich einzutauchen und ihre eigenen Ableitungen daraus zu machen."

Hallo Welt ist genug, um die Benutzeroberfläche zu zeigen. Eine Beispiel-To-Do-App zeigt einige einfache Interaktionen und wie die Teile zusammenpassen.

Ich erinnere mich an die Ankündigung zu .Net MAUI und frage mich, wie viel davon in WinUI untermauert ist.

Für mich kommt die Inspiration von einem Rust-GUI-Framework namens vgtk.
https://bodil.lol/vgtk/

Die Syntax dieses Frameworks ist stark von der jsx-Syntax von React zum Erstellen deklarativer Benutzeroberflächen inspiriert, und das Programmiermodell ist das heutzutage beliebte MVU-Modell.

Um eine App zu deklarieren, schreibst du

fn view(&self) -> VNode<Model> {
    gtk! {
        <Application::new_unwrap(None, ApplicationFlags::empty())>
            <Window border_width=20 on destroy=|_| Message::Exit>
                <HeaderBar title="inc!" show_close_button=true />
                <Box spacing=10 halign=Align::Center>
                    <Label label=self.counter.to_string() />
                    <Button label="inc!" image="add" always_show_image=true
                            on clicked=|_| Message::Inc />
                </Box>
            </Window>
        </Application>
    }
}

Dies ist sehr nah an jsx, aber noch näher an XAML, das sich perfekt für WinUI eignet. Diese Syntax in rust wird durch die prozedurale Makrofunktion von rust aktiviert.

Mir scheint, dass diese Art von UI-Framework heutzutage der Trend ist, und damit Rust mit WinUI erfolgreich ist, muss es auch diesen Zug fahren. Diese Art von Arbeit wurde unzählige Male durchgeführt, und es ist wahrscheinlich sehr einfach für Microsoft, eine für WinUI zu erstellen. Es könnte auch eine gute Chance für ein plattformübergreifendes UI-Framework sein, da die Rust-GUI-Community darauf sehnsüchtig wartet, aber das scheint nicht in den Rahmen dieses Themas zu fallen.

Bemerkenswert ist auch, dass XAML die Unterstützung von "Teilklassen" erfordert, oder? So können Sie den UI-Elementen Steuerelemente hinzufügen. Unterstützt Rust das? Könnten Sie es mit prozeduralen Makros imitieren?

Danke für alle Rückmeldungen! Weiter so.

@suleyth – die Xaml-API erfordert keine Teilklassen. Dies ist ein Feature der C#-Sprache, das der Xaml-Compiler verwendet. Für C++ und jetzt Rust untersuchen wir einen völlig anderen Ansatz, der für diese Sprachen natürlicher ist. Und ja, prozedurale Makros sind eine großartige Möglichkeit, dies in Rust zu lösen. Wir verwenden sie ausgiebig in winrt-rs .

Gibt es hierzu Neuigkeiten?
Edit: Es wäre toll, wenn es eine Roadmap für die Unterstützung von Rost mit Winui . gäbe

Ich kann nicht für das WinUI-Team sprechen, aber ein Großteil der Unterstützung für Rust wird von der Rust/WinRT-Sprachprojektion ( winrt-rs ) kommen. Insbesondere arbeite ich jetzt daran, Unterstützung für das Definieren und Implementieren von COM- und WinRT-Typen in Rust hinzuzufügen. Das ist eine wichtige Voraussetzung für eine vollständige Xaml-Integration. Sobald das fertig ist, können wir damit beginnen, die Xaml-Bindungsunterstützung in Rust natürlicher zu beleuchten.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen