Connect with us

Entwicklung & Code

Cross-Plattform-Applikationen mit Rust 3: Fachlichkeiten und Shell-Integration


close notice

This article is also available in
English.

It was translated with technical assistance and editorially reviewed before publication.

Nach einer Einführung in das Framework Crux geht es im dritten und letzten Teil der Artikelreihe nun um fortgeschrittene Konzepte und die praktische Integration in realen Anwendungen. Die folgenden Punkte zu fachlichen Typen, Aufteilung in mehrere Apps und dem Einsatz in konkreten Shell-Technologien zeigen einen detaillierten Blick aus der Praxis.

Weiterlesen nach der Anzeige


Portrait Marcel Koch

Portrait Marcel Koch

Marcel Koch berät mit seinem siebenköpfigen Team kleine und mittelständische Unternehmen und entwickelt branchenübergreifend Cross-Platform-Apps für Desktop und Mobile sowie Webapplikationen – bevorzugt mit TypeScript, Rust, Flutter oder Java, gestützt auf CI/CD und IaC. Dabei setzt er auf pragmatische, passgenaue Lösungen, denn Software ist kein Selbstzweck. Neben soliden technischen Kenntnissen schult er in Gewaltfreier Kommunikation, Transaktionsanalyse sowie Agilität und fördert einen kritischen Blick auf Cloud Hypes. Marcel ist Speaker, Autor von Fachartikeln und Büchern und regelmäßig in Podcasts zu hören.

In langlebigen Softwareprojekten ist es ratsam, fachliche Typen unabhängig vom eingesetzten Framework zu definieren. Im Rahmen der in den vorherigen Teilen gezeigten E-Mail-App bietet sich zum Beispiel der Typ EmailAddress an: Dieser Typ kapselt die Validierung und Repräsentation einer E-Mail-Adresse und stellt sicher, dass nur gültige Werte im System verwendet werden. Die Logik zur Prüfung – etwa auf das Vorhandensein des Zeichens @ – ist direkt im Typ verankert und nicht Teil der Crux-App.

Dadurch bleibt die fachliche Logik klar von technischen Details getrennt. Sie kann unabhängig von Crux, anderen Frameworks oder der konkreten Plattform getestet, wiederverwendet und weiterentwickelt werden. Sollte sich die technische Umgebung ändern, bleibt die Kernlogik erhalten und muss nicht neu geschrieben werden.

Fachliche Typen wie EmailAddress erhöhen die Wartbarkeit und Verständlichkeit des Codes und schützen vor Fehlern, indem sie ungültige Zustände bereits beim Erstellen verhindern.

Weiterlesen nach der Anzeige

Listing 1: Fachlicher Typ EmailAddress


#[derive(Clone, PartialEq, Eq, Hash, Debug, serde::Serialize, serde::Deserialize)]
pub struct EmailAddress(String);

#[derive(thiserror::Error, Debug)]
pub enum EmailError {
    #[error("missing @")]
    MissingAt,
}

impl EmailAddress {
    /// Der Smart-Constructor garantiert eine gültige Adresse
    pub fn parse(s: impl Into) -> Result {
        let s = s.into();
        if s.contains('@') { Ok(Self(s)) } else { Err(EmailError::MissingAt) }
    }

    pub fn as_str(&self) -> &str { &self.0 }
}


Fachliche Typen wie EmailAddress lassen sich unabhängig vom Framework testen.

Listing 2: Tests für EmailAddress


#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn valid_email_is_accepted() {
        let email = EmailAddress::parse("marcel.koch@example.org");
        assert!(email.is_ok());
        assert_eq!(email.unwrap().as_str(), "marcel.koch@example.org");
    }

    #[test]
    fn invalid_email_is_rejected() {
        let email = EmailAddress::parse("marcel.kochexample.org");
        assert!(email.is_err());
        assert_eq!(email.unwrap_err(), EmailError::MissingAt);
    }
}


Der erste Test prüft, dass eine gültige E-Mail-Adresse akzeptiert und korrekt gespeichert wird. Der zweite Test stellt sicher, dass eine ungültige E-Mail-Adresse (ohne @) abgelehnt und der passende Fehler (MissingAt) zurückgegeben wird.

Wächst das Entwicklungsteam der App, kann es sinnvoll sein, das Team und auch die Anwendung in mehrere eigenständige Apps und Crates aufzuteilen. Ein Kontaktmanagement könnte die bisherige E-Mail-App erweitern und alle eingehenden Kontaktdaten speichern, aktualisieren oder löschen. Dabei bekommt das Kontaktmanagement eine eigene Crux-App, verwaltet in einem separaten Crate. Dieses separate Crate beinhaltet ein abgegrenztes Feature und wird auch als Feature-Crate bezeichnet. Jedes Feature-Crate definiert dabei seine eigenen Events, Models, ViewModels und Effekte – das Model ist also explizit Teil des jeweiligen Features. Die Haupt-App integriert die einzelnen Feature-Crates und koordiniert deren Zusammenspiel.

Listing 3: contacts (Feature-Crate)


// contacts/src/lib.rs
#[derive(Clone, Debug)]
pub struct Contact {
    pub name: String,
    pub email: EmailAddress,
}

pub enum ContactsEvent {
    AddContact(Contact),
    RemoveContact(EmailAddress),
    EditContact(EmailAddress, Contact),
}

#[derive(Default)]
pub struct ContactsModel {
    pub contacts: Vec,
}

pub struct ContactsViewModel {
    pub contacts: Vec,
}

pub enum ContactsEffect {
    ShowContactAdded(EmailAddress),
    ShowContactRemoved(EmailAddress),
}

pub fn update(event: ContactsEvent, model: &mut ContactsModel) -> Vec {
    match event {
        ContactsEvent::AddContact(contact) => {
            model.contacts.push(contact.clone());
            vec![ContactsEffect::ShowContactAdded(contact.email)]
        }
        ContactsEvent::RemoveContact(email) => {
            model.contacts.retain(|c| c.email != email);
            vec![ContactsEffect::ShowContactRemoved(email)]
        }
        ContactsEvent::EditContact(email, new_contact) => {
            if let Some(c) = model.contacts.iter_mut().find(|c| c.email == email) {
                *c = new_contact.clone();
            }
            vec![]
        }
    }
}

pub fn view(model: &ContactsModel) -> ContactsViewModel {
    ContactsViewModel {
        contacts: model.contacts.clone(),
    }
}


Das E-Mail-Feature übernimmt die Funktion der bisherigen E-Mail-App:

Listing 4: email (Feature-Crate)


// email/src/lib.rs
pub enum EmailEvent {
    SendEmail(EmailAddress),
    EmailSent(bool),
}

#[derive(Default)]
pub struct EmailModel {
    pub last_sent: Option,
}

pub struct EmailViewModel {
    pub last_sent: Option,
}

pub enum EmailEffect {
    SendEmailRequest(String),
}


Die Haupt-App aggregiert die Feature-Modelle und koordiniert die Kommunikation:

Listing 5: Haupt-App-Integration (App-Crate)


// app/src/lib.rs
use contacts::{ContactsEvent, ContactsModel, ContactsViewModel, ContactsEffect};
use email::{EmailEvent, EmailModel, EmailViewModel, EmailEffect};

pub enum AppEvent {
    Email(EmailEvent),
    Contacts(ContactsEvent),
}

pub struct AppModel {
    pub email: EmailModel,
    pub contacts: ContactsModel,
}

pub struct AppViewModel {
    pub email: EmailViewModel,
    pub contacts: ContactsViewModel,
}

pub enum AppEffect {
    Email(EmailEffect),
    Contacts(ContactsEffect),
}

pub fn update(event: AppEvent, model: &mut AppModel) -> Vec {
    match event {
        AppEvent::Email(email_event) => {
            email::update(email_event, &mut model.email)
                .into_iter().map(AppEffect::Email).collect()
        }
        AppEvent::Contacts(contacts_event) => {
            contacts::update(contacts_event, &mut model.contacts)
                .into_iter().map(AppEffect::Contacts).collect()
        }
    }
}

pub fn view(model: &AppModel) -> AppViewModel {
    AppViewModel {
        email: email::view(&model.email),
        contacts: contacts::view(&model.contacts),
    }
}


Durch diese Aufteilung bleibt die Anwendung modular, testbar und erweiterbar. Jedes Feature verwaltet seinen eigenen Zustand und lässt sich unabhängig entwickeln, testen und warten. Die Haupt-App sorgt für die Orchestrierung und das Zusammenführen der einzelnen ViewModels zu einer konsistenten Oberfläche. So entsteht eine skalierbare Architektur.



Source link

Entwicklung & Code

Software Testing: Warum KI kein Ursache-Wirkung-Denken kann – und wie QFD hilft


Richard Seidl spricht in dieser Folge mit Thomas Fehlmann über Quality Function Deployment (QFD) und die Rolle von Ursache-Wirkung-Denken im Zeitalter großer Sprachmodelle. Sie diskutieren, wie Unternehmen mit QFD Kundennutzen greifbar machen und diesen Nutzen systematisch in Softwaretests übersetzen können.

Weiterlesen nach der Anzeige

Thomas Fehlmann ist seit 2016 offiziell im Ruhestand – theoretisch. Praktisch jedoch bleibt er ein aktiver und leidenschaftlicher Forscher. Seine Arbeit präsentiert er regelmäßig auf internationalen Konferenzen, wo er Erkenntnisse mit Fachkollegen diskutiert und seine neuesten Ergebnisse veröffentlicht. Ursprünglich prägten Themen wie Six Sigma und Prozesssteuerung seine wissenschaftliche Laufbahn. Doch seine Neugier für Künstliche Intelligenz (KI) reicht viel weiter zurück: Bereits im Studium beschäftigte er sich intensiv damit – und blieb der Disziplin treu, selbst durch mehrere KI-Winter hindurch. Heute widmet sich Thomas Fehlmann der Frage, wie Graphmodelle der kombinatorischen Logik helfen können, das Innenleben moderner KI-Modelle nachvollziehbarer zu machen. Sein Fokus liegt darauf, besser zu verstehen, wie KI funktioniert und welchen realen Mehrwert sie für ihre Nutzer schafft.

Bei diesem Format dreht sich alles um Softwarequalität: Ob Testautomatisierung, Qualität in agilen Projekten, Testdaten oder Testteams – Richard Seidl und seine Gäste schauen sich Dinge an, die mehr Qualität in die Softwareentwicklung bringen.

Die aktuelle Ausgabe ist auch auf Richard Seidls Blog verfügbar: „Warum KI keine Ursache-Wirkung kann – und QFD hilft – Thomas Fehlmann“.


(mdo)



Source link

Weiterlesen

Entwicklung & Code

Meta kauft zig Millionen AWS Graviton Cores für Agentic AI


Amazon Web Services und Meta haben eine Vereinbarung bekannt gegeben, nach der Meta mehrere zehn Millionen Graviton5-Cores von AWS verwenden wird. Mit dem Deal wird Meta zu einem der größten Graviton-Kunden, und die Vereinbarung sieht eine Erweiterung um weitere Graviton-Kerne vor, wenn Metas Bedarf wächst.

Weiterlesen nach der Anzeige

Meta will die zusätzliche Rechenleistung vor allem für den Bereich Agentic AI nutzen. Für das Training von KI-Modellen sind GPUs besser geeignet als CPUs. Im Bereich Agentic AI müssen autonome Agenten jedoch komplexe Aufgaben planen und ausführen, wofür sich CPUs besser eignen.

Amazon hatte die Graviton5-Chips im Dezember 2025 auf der re:Invent 2025 vorgestellt.



Meta wird zahlreiche Graviton-Chips nutzen.

(Bild: Amazon)

Amazon bezeichnet die Graviton-CPU als Cloudprozessor, der speziell für energieeffiziente Cloudanwendungen konzipiert ist. Graviton setzt wie die Axion-Chips von Google und die Cobalt-Chips von Microsoft auf eine ARM-Architektur. Im März 2026 hat ARM erstmals einen eigenen Prozessor vorgestellt: Die AGI CPU, deren Name an die Artificial General Intelligence angelehnt ist, hat ARM zusammen mit Meta und TSMC entwickelt.

Die Graviton5-Chips haben 192 Kerne und einen deutlich größeren L3-Cache als das Vorgängermodell. Weitere Details lassen sich den offiziellen Ankündigungen von Meta und von Amazon entnehmen.

Weiterlesen nach der Anzeige


(rme)



Source link

Weiterlesen

Entwicklung & Code

DeepSeek v4: Günstige KI-Alternative fordert OpenAI und Anthropic heraus


Vor einem Jahr sorgte das chinesische KI-Start-up DeepSeek für einen Schock in der KI-Branche: Das KI-Modell DeepSeek-R1 zeigte vergleichbare Leistungen wie US-Topmodelle zum deutlich günstigeren Preis und sorgte für ein Börsenbeben. Wie später bekannt wurde, hatte das Training von DeepSeek-R1 weniger als 300.000 US-Dollar gekostet. Jetzt ist mit DeepSeek v4 eine neue Generation als Vorschau erschienen. Das neue Spitzenmodell ist weiterhin kostenlos als Open Source verfügbar und liegt in einer Pro- und einer Flash-Variante vor.

Weiterlesen nach der Anzeige

Der große Schock könnte dieses Mal ausbleiben. Zwar setzt sich DeepSeek erneut an die Open-Source-Spitze, doch Experten verorten das Leistungsvermögen zeitlich etwa drei bis sechs Monate hinter den absoluten Topmodellen am Markt und nicht auf Augenhöhe. Dafür bleibt aber immerhin der große Preisvorteil erhalten. Das Pro-Modell ist zwar deutlich teurer bei den API-Aufrufen als DeepSeek v3.2. Es liegt aber immer noch weit unter den Preisen, die OpenAI und Anthropic aufrufen. So kostet etwa GPT-5.5 von OpenAI laut Benchmark-Angaben des Unternehmens das Doppelte für vergleichbare Coding-Aufgaben. Aus dem Konkurrenz-Sprint könnte jetzt ein Marathon werden. Wie sich die chinesische Open-Source-KI nach dem DeepSeek-Schock insgesamt entwickelt, zeigt ein Überblick zur chinesischen Open-Source-KI.

Unter der Haube hat sich eine Menge getan: V4 ist ein echter Generationswechsel mit komplett neuer Architektur, achtfach längerem Kontextfenster und einem laut den von DeepSeek vorgelegten Unterlagen spürbar besserem Coding- und Mathe-Niveau.

V3.2 hatte 685 Milliarden Parameter; V4-Pro kommt auf 1,6 Billionen – mehr als doppelt so viele. Das neue Modell kann bis zu einer Million Token Kontext verarbeiten – also sehr lange Dokumente, Codebases oder Gespräche – und benötigt dafür nur einen Bruchteil der Rechenleistung früherer DeepSeek-Modelle. Zum Vergleich: V3.2 unterstützte maximal 128.000 Token Kontext. Der Vorgänger führte als wichtigste Neuerung „DeepSeek Sparse Attention“ (DSA) ein – eine effizientere Aufmerksamkeitsarchitektur für lange Texte. V4 baut darauf auf und kombiniert gleich zwei neue Mechanismen.

Schwächen gibt es offenbar beim Allgemeinwissen – hier sollen andere Spitzenmodelle deutlich besser sein. Die Reasoning-Fähigkeiten des Modells können jetzt in drei statt bislang zwei Stufen gesteuert werden: Non-Think, Think High und Think Max statt vorher nur Thinking und Non-Thinking. DeepSeek spekuliert offenbar vor allem auf Entwickler als Kunden: In der Eigendarstellung des neuen Modells rücken vor allem Coding-Benchmarks, Reasoning und agentische Aufgaben in den Vordergrund. Auch OpenAI setzt verstärkt auf Entwickler als Zielgruppe und hat seine ChatGPT-Tarife rund um das Coding-Werkzeug Codex umgebaut. Das mögliche Einsparpotenzial gegenüber US-Modellen dürfte hier sicherlich einige interessieren.

Weiterlesen nach der Anzeige

DeepSeek-V4-Pro kostet 1,74 US-Dollar pro Million Input-Token und 3,48 US-Dollar pro Million Output-Token. Die Flash-Variante schlägt mit 0,14 US-Dollar pro Million Input-Token und 0,28 US-Dollar pro Million Output-Token. Das US-Wirtschaftsmedium Bloomberg berichtet, dass DeepSeek aktuell wegen Rechnerknappheit einen Kapazitätsengpass beim Pro-Modell hat. Im zweiten Halbjahr sollen neue Huawei-Ascend-950-Cluster den Mangel ausbessern. Dann könnten die Preise sinken.


(mki)



Source link

Weiterlesen

Beliebt