Slint unterstützt eine breite Palette von Hardware-Geräteklassen, von Cortex-M bis zu großen Embedded-Geräten. Den Vergleich mit etablierten Werkzeugen wie emWin, TouchGfx, Qt, Qt for MCU, Embedded Web, Embedded Wizard oder Crank muss die Plattform damit nicht scheuen. Ihre Funktionalität konzentriert sich auf das Erstellen und Verwalten von Bedienoberflächen. Grundgerüst für die Programmierung ist das in jüngerer Zeit zunehmend populäre Rust, Slint bringt aber auch Bindings für C++ und künftig NodeJS mit.
Als Cross-Platform-Native-Toolkit läuft Slint auch auf Geräten mit wenig Speicher und leistungsschwachem Prozessor. Eine deklarative Sprache ermöglicht es, das User Interface und seine Elemente zu beschreiben, woraufhin ein Compiler diese Beschreibungen in nativen Code umwandelt.
GUI intuitiv entwickeln
Bei der Entwicklung seiner GUI (Graphical User Interface)-Plattform verfolgt Slint mehrere zentrale Ziele. Zum einen die Skalierbarkeit: UIs passen sich problemlos jedem Bildschirm an und sind kompatibel mit einer Vielzahl an Geräten, von Desktop-Computern bis zu einfachen eingebetteten Systemen. Leichtgewichtigkeit ist ein weiteres Merkmal. Auch mit begrenzten Ressourcen bietet Slint ein flüssiges, Smartphone-ähnliches Benutzererlebnis auf jeglichem Device.
Bei der Bedienung legt Slint großen Wert auf intuitives Arbeiten. Designer und Developer fühlen sich beim Gestalten und Entwickeln von GUIs produktiv und unterstützt. Die Slint-Tools sind einfach zu handhaben, die APIs zeichnen sich durch Konsistenz und Benutzerfreundlichkeit aus, unabhängig von der gewählten Programmiersprache. Außerdem wurde Wert darauf gelegt, dass die erstellten Benutzeroberflächen einer nativen Anwendung in ihrer Anmutung und Funktionalität nicht nachstehen, egal ob auf Desktop, Mobilgerät, Web oder eingebettetem System. Slint orientiert sich hierbei an CSS und verwendet in der Syntax eine Mischung aus Rust, Python und JavaScript.
Rust vereint Programmierparadigmen
Die Open-Source-Programmiersprache Rust wurde mit dem Ziel entwickelt, sicher, nebenläufig und praxisnah zu sein; gesponsert wird sie von u.a. Mozilla Research. Sie vereint Ansätze aus verschiedenen Programmierparadigmen, unter anderem aus der funktionalen, der objektorientierten und der nebenläufigen Programmierung. Dies ermöglicht ein hohes Abstraktionsniveau und führt zu einer mit C++ vergleichbaren Performanz.
Die Konzepte des Ownership und Borrowing gewährleisten durch klare Eigentumsregeln eine sichere Handhabung von Speicher und Daten. Wettlaufsituationen und unsichere Zugriffe lassen sich so vermeiden. Das Konzept der Lifetimes trägt zur Sicherheit bei, indem es die Gültigkeitsdauer von Referenzen definiert und vor unsicherem Zugriff, wie herrenlosen oder verwaisten Referenzen, schützt. Ergänzend dienen Crates als Bausteine für modulare und wiederverwendbare Code-Pakete und unterstützen so die gemeinschaftliche Entwicklung und Vereinfachung der Code-Organisation. Zusammengenommen ermöglichen diese Merkmale eine leistungsstarke, sichere und effiziente Softwareentwicklung.
Rust verfügt über eine Vielzahl an Bibliotheken, mit denen sich die Entwicklung beschleunigen lässt. Die std-Bibliothek bietet – stark getestete – Grundfunktionalitäten. Für die MCU-Entwicklung ist die Bibliothek alloc wichtig. Sie ist Bestandteil von std, enthält aber nur Smart Pointer sowie Funktionen zur Heap Allokation. Dadurch lässt sich ein komfortables Memory Management umsetzen. Allgemein können benötigte Funktionalitäten immer durch Einbinden entsprechender C-Bibliotheken bereitgestellt werden.
Slint für Mikrocontroller
Cloudflight hat die Plattform mit dem spezifischen Embedded-Testsystem STM32H7G Development Kit getestet. Die Evaluierung auf Mikrokontrollern brachte einige interessante Erkenntnisse zutage, aber auch Einschränkungen, die bei der Implementierung auf diesen Plattformen zu berücksichtigen sind.