Connect with us

Entwicklung & Code

Large Language Models: Die Mathematik hinter Transformers


Im Jahr 2017 veröffentlichte ein Team bei Google ein Paper mit einem gewagten Titel: „Attention Is All You Need.“ Das war nicht nur akademische Prahlerei. Die vorgestellte Transformer-Architektur veränderte grundlegend, wie wir KI-Systeme bauen. Heute basiert jedes große Sprachmodell von GPT über Claude bis Gemini auf diesem Fundament. Wenn Sie ein modernes KI-Tool nutzen, haben Sie bereits mit einem Transformer interagiert.

Weiterlesen nach der Anzeige


Michael Stal

Michael Stal

Prof. Dr. Michael Stal arbeitet seit 1991 bei Siemens Technology. Seine Forschungsschwerpunkte umfassen Softwarearchitekturen für große komplexe Systeme (Verteilte Systeme, Cloud Computing, IIoT), Eingebettte Systeme und Künstliche Intelligenz.

Er berät Geschäftsbereiche in Softwarearchitekturfragen und ist für die Architekturausbildung der Senior-Software-Architekten bei Siemens verantwortlich.

Als Software Engineer haben Sie vielleicht gehört, dass Transformers „nur aus Matrixmultiplikationen“ bestehen oder dass sie „Aufmerksamkeitsmechanismen verwenden“. Diese Beschreibungen sind zwar technisch korrekt, verfehlen aber die elegante mathematische Argumentation, die Transformers funktionieren lässt. Dieser Artikel nimmt Sie mit auf eine Reise zu den Problemen, die Transformers motivierten, bis zu den hochmodernen Optimierungen in Produktionssystemen. Am Ende verstehen Sie nicht nur, was die Mathematik hinter Transformers bedeutet, sondern warum sie genau so sein muss. Damit erlangen Sie das Wissen, um einen Transformer von Grund auf zu implementieren.

Wir folgen einem roten Faden: Wie bauen wir ein System, das Beziehungen zwischen Elementen in einer Sequenz verstehen kann, unabhängig davon, wie weit diese Elemente auseinanderliegen, und dies effizient genug, um auf Milliarden von Beispielen zu trainieren? Jede Formel, jede architektonische Entscheidung resultiert aus der Beantwortung dieser Frage.

Vor Transformers dominierte der Ansatz der Recurrent Neural Networks (RNN) die Sequenzverarbeitung. Um zu verstehen, warum Transformers existieren, müssen wir verstehen, warum wir RNNs trotz ihrer Eleganz nicht auf die Probleme skalieren können, die wir lösen wollen.

Stellen Sie sich vor, Sie bauen ein Übersetzungssystem. Sie erhalten den englischen Satz „The cat sat on the mat“ und müssen die französische Übersetzung produzieren. Ein RNN verarbeitet dies sequenziell. Es liest „The“, aktualisiert seinen internen Zustand, liest dann „cat“, aktualisiert seinen Zustand erneut, und so weiter. Die Idee: Wenn das Übersetzungssystem den Satz zu Ende gelesen hat, enthält sein versteckter Zustand eine komprimierte Repräsentation von allem, was es gesehen hat.


Chatbot umringt von Laptops

Chatbot umringt von Laptops

(Bild: Golden Sikorka/Shutterstock)

Die Online-Konferenz LLMs im Unternehmen zeigt am 19. März, wie KI-Agenten Arbeitsprozesse übernehmen können, wie LLMs beim Extrahieren der Daten helfen und wie man Modelle effizient im eigenen Rechenzentrum betreibt.

So aktualisiert ein RNN seinen versteckten Zustand bei jedem Zeitschritt:

Weiterlesen nach der Anzeige

h_t = tanh(W_hh * h_{t-1} + W_xh * x_t + b_h)

In dieser Formel repräsentiert h_t den versteckten Zustand zum Zeitpunkt t, x_t ist die Eingabe zum Zeitpunkt t, W_hh ist eine Gewichtsmatrix, die den vorherigen versteckten Zustand transformiert, W_xh transformiert die aktuelle Eingabe, und b_h ist ein Bias-Term. Die tanh-Funktion beschränkt das Ergebnis, um die Werte begrenzt zu halten.

Das Problem zeigt sich, wenn Sie das Ganze aus der Perspektive vieler Zeitschritte betrachten. Angenommen, Sie übersetzen ein langes Dokument, und eine kritische Information erscheint im ersten Satz, aber Sie benötigen diese Information, um den hundertsten Satz korrekt zu übersetzen. Diese Information muss somit eine hundertfache Multiplikation mit W_HH überleben.

In der Praxis führt dies zu zwei katastrophalen Problemen:

Erstens das Problem verschwindender Gradienten. Beim Training neuronaler Netzwerke berechnen wir Gradienten, die uns sagen, wie wir Gewichte anpassen sollen. Diese Gradienten müssen rückwärts durch die Zeit fließen. Wenn der Gradient bei Schritt 100 die Gewichte beeinflussen muss, die wir im Schritt 1 verarbeitet haben, muss er hundertmal mit der Ableitung der tanh-Funktion multipliziert werden. Da die Ableitung von tanh immer kleiner als eins ist, schrumpft der Gradient exponentiell. Wenn er die frühen Schritte erreicht, bleibt er im Wesentlichen bei null und die Gewichte somit unverändert, ohne dazuzulernen.

Zweitens gibt es, selbst wenn wir verschwindende Gradienten mit Techniken wie LSTMs oder GRUs lösen, ein fundamentaleres Problem: Sequenzielle Verarbeitung ist langsam. Moderne GPUs zeichnen sich durch parallele Berechnung aus. Sie können massive Matrizen unglaublich schnell multiplizieren. Aber RNNs zwingen uns, Sequenzen Schritt für Schritt zu verarbeiten, weil jeder Schritt vom vorherigen abhängt. Sie können h_100 nicht berechnen, bis Sie h_99 berechnet haben, was h_98 erfordert, und so weiter, bis wir schlussendlich h_1 erreichen. Diese sequenzielle Abhängigkeit macht das Training auf den massiven Datensätzen, die wir für moderne KI benötigen, unerträglich langsam.

Die Transformer-Architektur löst beide Probleme mit einer radikalen Idee: Was, wenn wir alle Positionen in der Sequenz gleichzeitig betrachten und das Modell lernen lassen könnten, welche Positionen füreinander relevant sind? Hier kommt Attention ins Spiel.

Bevor wir in mathematische Formeln eintauchen, bauen wir Intuition darüber auf, was Attention tatsächlich macht. Stellen Sie sich vor, Sie lesen diesen Satz: „Die Trophäe passte nicht in die Truhe, weil sie zu groß war.“ Worauf bezieht sich „sie“? Ihr Gehirn verarbeitet dies nicht Wort für Wort unter Beibehaltung eines versteckten Zustands. Stattdessen schauen Sie, wenn Sie auf „sie“ stoßen, durch den Satz zurück, finden relevanten Kontext (Trophäe und Truhe) und bestimmen, was angesichts von „zu groß“ sinnvoll ist.

Aufmerksamkeitsmechanismen formalisieren diesen intuitiven Prozess. Im Kern ist Attention ein differenzierbarer Nachschlagemechanismus (Lookup-Mechanismus). In einer traditionellen Lookup-Tabelle oder Hash-Map geben Sie einen Schlüssel an und erhalten einen Wert zurück. Attention macht etwas Ähnliches, aber mit einem entscheidenden Unterschied: Statt exakter Übereinstimmungen berechnet es einen gewichteten Durchschnitt aller Werte, wobei die Gewichte davon abhängen, wie gut jeder Schlüssel zu Ihrer Abfrage passt.

Konkretisieren wir dies mit einem einfachen Beispiel. Angenommen, Sie haben drei Wörter in einem Satz, und jedes Wort repräsentiert sich als Vektor. Sie möchten eine neue Repräsentation für das zweite Wort berechnen, die Informationen von den anderen Wörtern basierend auf ihrer Relevanz einbezieht.

# Einfaches Beispiel mit drei Wortvektoren

wort1 = [1.0, 0.0] # "Die"

wort2 = [0.5, 0.5] # "Katze"

wort3 = [0.0, 1.0] # "saß"

Um nun eine attention-erweiterte Repräsentation für wort2 zu berechnen, müssen wir beantworten: Wie relevant ist jedes andere Wort im Textfragment für wort2? Wir könnten diese Relevanz als Skalarprodukt berechnen, das Ähnlichkeit misst:

relevanz_1_zu_2 = skalarprodukt(wort1, wort2) = 1.0 * 0.5 + 0.0 * 0.5 = 0.5

relevanz_2_zu_2 = skalarprodukt(wort2, wort2) = 0.5 * 0.5 + 0.5 * 0.5 = 0.5

relevanz_3_zu_2 = skalarprodukt(wort3, wort2) = 0.0 * 0.5 + 1.0 * 0.5 = 0.5

Diese rohen Relevanzwerte sind nicht sehr nützlich, weil sie sich nicht zu eins summieren lassen. Wir wollen Gewichte, die wir für einen gewichteten Durchschnitt nutzen können. Hier kommt die Softmax-Funktion ins Spiel. Softmax konvertiert beliebige Werte in eine Wahrscheinlichkeitsverteilung:

def softmax(werte):

exp_werte = [exp(w) for w in werte]

summe_exp = sum(exp_werte)

return [e / summe_exp for e in exp_werte]

Die Softmax-Funktion besitzt eine schöne Eigenschaft: Sie ist differenzierbar, sodass wir sie mit Backpropagation trainieren können, und sie produziert immer Ausgaben, die zu eins summieren und allesamt positive Werte besitzen. Die Exponentialfunktion stellt sicher, dass größere Werte exponentiell mehr Gewicht erhalten, was einen weichen Auswahlmechanismus schafft.

Wenden wir Softmax auf unsere Relevanzwerte an, …

gewichte = softmax([0.5, 0.5, 0.5]) = [0.33, 0.33, 0.33]

…, können wir die Attention-erweiterte Repräsentation als gewichtete Summe berechnen:

erweitertes_wort2 = 0.33 * wort1 + 0.33 * wort2 + 0.33 * wort3

= 0.33 * [1.0, 0.0] + 0.33 * [0.5, 0.5] + 0.33 * [0.0, 1.0]

= [0.495, 0.495]

Dies ist die Essenz von Attention: Wir berechnen, wie relevant jede Position für die aktuelle Position ist, normalisieren diese Relevanzen zu Gewichten und nehmen einen gewichteten Durchschnitt. Das Genie der Transformer liegt darin, diesen Prozess lernbar und effizient zu machen.

Jetzt sind wir bereit, die tatsächliche Attention-Formel abzuleiten, die Transformers nutzen. Wir bauen sie Schritt für Schritt auf und bekommen Einblick, warum jede Komponente existiert.

Unser Ziel: Einen Mechanismus schaffen, bei dem wir für jede Position in einer Sequenz eine Repräsentation berechnen können, die Informationen von allen anderen Positionen basierend auf gelernter Relevanz einbezieht. Wir benötigen drei Dinge:

  1. eine Möglichkeit auszudrücken, „wonach ich suche“ und das an jeder Position. Wir nennen dies die Query (Q). Denken Sie zum Beispiel an eine Suchanfrage in einer Datenbank.
  2. eine Möglichkeit auszudrücken, „was ich anzubieten habe“ an jeder Position. Wir nennen dies den Key (K). Denken Sie an den Index in einer Datenbank, gegen den wir abgleichen.
  3. die tatsächliche Information, die wir abrufen möchten. Wir nennen dies den Value (V). Denken Sie an die in der Datenbank gespeicherten Daten.

Warum Keys und Values trennen? Weil das, was wir zur Bestimmung der Relevanz verwenden (der Key), sich von dem unterscheiden kann, was wir tatsächlich abrufen möchten (der Value). Zum Beispiel könnte beim Übersetzen von „Die Katze saß“ das Wort „Katze“ relevant sein, weil es ein Substantiv ist (das erfasst der Key), aber was wir tatsächlich abrufen möchten, ist seine volle semantische Bedeutung (das erfasst der Value).

Wir erzeugen Q, K und V, indem wir unsere Eingabe mit gelernten Gewichtsmatrizen multiplizieren:

Q = X * W_Q

K = X * W_K

V = X * W_V

Hier ist X unsere Eingabematrix, wobei jede Zeile ein Wort-Embedding ist, und W_Q, W_K, W_V lernbare Gewichtsmatrizen. Diese Matrizen lernen während des Trainings, die richtige Art von Informationen für Queries, Keys und Values zu extrahieren.

Um nun Attention zu berechnen, müssen wir messen, wie gut jede Query zu jedem Key passt. Die natürliche Wahl ist das Skalarprodukt, weil es Ähnlichkeit misst: Wenn zwei Vektoren in die gleiche Richtung zeigen, ist ihr Skalarprodukt groß; wenn sie orthogonal sind, ist es Null; wenn sie in entgegengesetzte Richtungen zeigen, ist es negativ.

Wir berechnen alle Query-Key-Ähnlichkeiten auf einmal, indem wir Q und K transponiert multiplizieren:

scores = Q * K^T

Dies gibt uns eine Matrix, bei der Eintrag (i,j) beschreibt, wie intensiv Position i (die Query) auf Position j (den Key) achten sollte. Die Dimensionen ergeben sich daraus wie folgt: Wenn wir n Positionen betrachten und jede Query/jeder Key d-dimensional ist, dann erhalten wir eine Matrix Q mit der Größe n mal d, K^T mit der Größe d mal n, und ihr Produkt mit der Größe n mal n.

Hier stoßen wir auf unser erstes Problem. Erhöht sich die Dimension d wachsen die Skalarprodukte ebenfalls. Um zu sehen, warum, bedenken Sie, dass ein Skalarprodukt eine Summe von d Termen ist. Wenn jeder Term die Varianz sigma zum Quadrat hat, hat die Summe die Varianz d mal sigma zum Quadrat aufgrund der Eigenschaften der Varianz. Dies bedeutet, das Skalarprodukt wächst mit der Quadratwurzel von d.

Warum ist dies ein Problem? Weil wir Softmax auf diese Werte anwenden. Softmax mit sehr großen Eingaben führt allerdings zu extrem „spitzen Werten“. Um dies zu sehen, betrachten Sie:

softmax([10, 9, 8]) = [0.665, 0.245, 0.090]

softmax([100, 90, 80]) = [0.9999, 0.0001, 0.0000]

Wenn die Eingaben für Softmax riesengroß sind, ergibt sich im Wesentlichen eine harte Auswahl, die nur den größten Wert auswählt und alles andere ignoriert. Dies löscht Gradienten während des Trainings aus, weil die Ableitung von Softmax fast überall Null erreicht, außer am Maximum.

Die Lösung besteht darin, die Skalarprodukte durch die Quadratwurzel der Dimension zu skalieren:

skalierte_scores = (Q * K^T) / sqrt(d_k)

Diese Skalierung stellt sicher, dass unabhängig von der Dimension die Varianz der Werte ungefähr konstant bleibt. Die Quadratwurzel wirkt speziell dem Quadratwurzelwachstum entgegen, das wir früher identifiziert haben.

Jetzt wenden wir Softmax an, um Attention-Gewichte zu erhalten:

attention_gewichte = softmax(skalierte_scores)

Schließlich verwenden wir diese Gewichte, um einen gewichteten Durchschnitt der Values zu berechnen:

ausgabe = attention_gewichte * V

Alles zusammengesetzt erhalten wir die Scaled Dot-Product Attention-Formel:

Attention(Q, K, V) = softmax((Q * K^T) / sqrt(d_k)) * V

Implementieren wir das in Code, um es zu veranschaulichen:


import numpy as np

def scaled_dot_product_attention(Q, K, V):
    """
    Berechnet Scaled Dot-Product Attention.
    
    Args:
        Q: Query-Matrix der Form (n, d_k), wobei n die Sequenzlänge ist
        K: Key-Matrix der Form (n, d_k)
        V: Value-Matrix der Form (n, d_v)
        
    Returns:
        ausgabe: Attention-Ausgabe der Form (n, d_v)
        attention_gewichte: Attention-Gewichtsmatrix der Form (n, n)
    """
    # Holt die Dimension der Keys für die Skalierung
    d_k = Q.shape[-1]
    
    # Berechnet Attention-Scores durch Skalarprodukt von Queries und Keys
    # Form: (n, d_k) @ (d_k, n) = (n, n)
    scores = np.matmul(Q, K.transpose(-2, -1))
    
    # Skaliert Scores durch Quadratwurzel der Key-Dimension
    # Dies verhindert, dass Softmax zu spitz wird
    skalierte_scores = scores / np.sqrt(d_k)
    
    # Wendet Softmax an, um Attention-Gewichte zu erhalten
    # Jede Zeile summiert zu 1, repräsentiert eine Wahrscheinlichkeitsverteilung
    attention_gewichte = softmax(skalierte_scores)
    
    # Berechnet gewichtete Summe der Values
    # Form: (n, n) @ (n, d_v) = (n, d_v)
    ausgabe = np.matmul(attention_gewichte, V)
    
    return ausgabe, attention_gewichte

def softmax(x):
    """
    Berechnet Softmax-Werte für jede Zeile der Matrix x.
    Numerisch stabile Implementierung, die den Maximalwert subtrahiert.
    """
    # Subtrahiert Maximum für numerische Stabilität
    # Dies verhindert Overflow durch exp von großen Zahlen
    exp_x = np.exp(x - np.max(x, axis=-1, keepdims=True))
    return exp_x / np.sum(exp_x, axis=-1, keepdims=True)


Dies ist der Kern des Transformers. Alles andere baut auf diesem Fundament auf. Beachten Sie, wie die Formel aus ersten Prinzipien entstand: Wir wollten einen differenzierbaren Lookup-Mechanismus, wir wählten Skalarprodukte für Ähnlichkeit, wir skalierten, um Sättigung zu verhindern, und wir verwendeten Softmax, um normalisierte Gewichte zu erhalten.



Source link

Entwicklung & Code

WWDC 2026 am 8. Juni: Apple gewährt ersten Blick auf iOS 27 und macOS 27


Am Montag, 8. Juni, gewährt Apple einen ersten offiziellen Blick in die nächsten großen Versionen seiner Betriebssysteme. An diesem Tag findet der Auftakt zur Entwicklerkonferenz WWDC statt, wie das Unternehmen am Montag mitteilte. Traditionell beginnt die Konferenz mit einer Keynote und der anschließenden „Platforms State of the Union“, der speziellen Entwickler-Keynote. Erwartet werden unter anderem die Betriebssystem-Updates iOS 27, iPadOS 27 und macOS 27.

Weiterlesen nach der Anzeige

Bis zum 12. Juni können App-Entwickler dann online Details zum erwarteten neuen Framework Core AI erfahren, mit Designern und Entwicklern von Apple in Kontakt treten oder an Workshops teilnehmen. Dabei dürfte auch das bereits in Xcode integrierte agentische Coding für Entwickler eine wichtige Rolle spielen.

Der Termin war bereits – dem Rhythmus der Vorjahre folgend – erwartet worden. Über weitere Inhalte gibt Apple nur wenig preis. Das diesjährige Logo, ein grell leuchtender Kreis in Anspielung auf das kreisrunde Apple-Hauptquartier in Kalifornien, und der ebenfalls leuchtende Schriftzug WWDC26 lädt zu Spekulationen ein. Die Erfahrung lehrt aber, dass die Bildsprache so abstrakt ist, dass sich selbst rückblickend nicht zwangsläufig Rückschlüsse herstellen lassen.

Als recht wahrscheinlich gilt, dass Apple nach der Erstvorstellung der Apple Intelligence im Jahr 2024 nach zwei Jahren umfassende neue KI-Funktionen auf Basis von Google Gemini plant. Apple selbst hat in der Medienmitteilung bereits erwähnt, dass es KI-Neuigkeiten geben wird. Angesichts der Kooperation mit Google und der Integration des LLM Gemini wird spätestens zur WWDC erwartet, dass die kontextsensitive Siri als echter Chatbot Gestalt annimmt. Sie sollte eigentlich schon in iOS 18 kommen. Außerdem soll laut Gerüchten ein Hauptaugenmerk in diesem Jahr auf Fehlerbehebungen und Optimierungen der Software liegen.

Wie in den Vorjahren haben ausgewählte Entwickler und Studenten die Möglichkeit, am 8. Juni persönlich bei einer Sonderveranstaltung im Apple Park dabei zu sein – die Teilnehmerzahl ist begrenzt. Die Bewerbungsfrist für das Losverfahren läuft bis zum 30. März, die Benachrichtigung der ausgewählten Teilnehmer soll am 2. April erfolgen.

Weiterlesen nach der Anzeige

Neben den Inhalten richtet Apple auch den Blick auf seinen Entwickler-Nachwuchs: Am 27. März werden die Teilnehmer der diesjährigen Swift Student Challenge über ihren Status informiert. Die Gewinner können sich für einen Platz bei der Vor-Ort-Veranstaltung im Apple Park bewerben. 50 besonders ausgezeichnete „Distinguished Winners“ werden zudem zu einem dreitägigen Aufenthalt in Cupertino eingeladen.

Die Konferenz ist über die Apple Developer App, die Webseite und den Apple-YouTube-Kanal zugänglich.

Lesen Sie auch


(mki)



Source link

Weiterlesen

Entwicklung & Code

Jetzt auch für Windows: Terminal-Multiplexer Zellij 0.44.0 erschienen


Der in Rust geschriebene Terminal-Workspace Zellij ist in Version 0.44.0 erschienen. Das Release bringt unter anderem nativen Windows-Support, die Anbindung via HTTPS an entfernte Sessions sowie umfangreiche Erweiterungen der Kommandozeilensteuerung für die Automatisierung.

Weiterlesen nach der Anzeige

Wie die Entwickler im offiziellen Blog mitteilen, läuft Zellij nun nativ unter Windows. Der Funktionsumfang entspricht dem der Linux- und macOS-Versionen. Bislang war der Einsatz unter Windows nur über das Windows Subsystem for Linux (WSL) möglich.

Aufbauend auf dem in Version 0.43.0 eingeführten Webserver können Nutzer sich nun direkt aus dem Terminal heraus per HTTPS an eine entfernte Zellij-Session anbinden – ganz ohne Browser. Der Befehl zellij attach genügt dafür. Die Verbindung nutzt den eingebauten Webclient, der sich wie ein Browser gegenüber dem Zellij-Web-Server authentifiziert.

Ergänzend dazu gibt es neuerdings einen Read-Only-Modus für das Session-Sharing. Über zellij watch oder im Browser mit einem speziellen Read-Only-Token können Dritte eine Session ausschließlich lesend verfolgen. Solche Tokens lassen sich per zellij web --create-read-only-token oder über das Share-Plug-in (Strg+O, S) erzeugen. Dieses Feature eignet sich besonders für Lehrveranstaltungen, Demonstrationen, Screencasting oder das Streaming, bei denen Zuschauer den Terminalinhalt beobachten, aber nicht eingreifen sollen.

Zellij 0.44.0 hat die Kommandozeilensteuerung erheblich erweitert. Der Befehl zellij run unterstützt im aktuellen Release Flags wie --blocking, --block-until-exit-success und --block-until-exit-failure, mit denen sich Kommandos konditionell verketten lassen. So lässt sich etwa eine Sequenz aus Tests und anschließendem Release-Build abbilden: zellij run --block-until-exit-success -- cargo test && zellij run --blocking -- cargo build --release.

Neue CLI-Aktionen wie zellij action list-panes liefern detaillierte Informationen zu geöffneten Panes mitsamt IDs, Titeln, ausgeführten Befehlen und Koordinaten. Mit zellij action send-keys lassen sich Tasteneingaben an bestimmte Panes senden, zellij action dump-screen gibt den aktuellen Viewport oder den Scrollback-Buffer aus. Über zellij subscribe können externe Tools Echtzeit-Updates aus der Session abonnieren. Hinzu kommen verbesserte Befehle für detach und switch-session sowie die Möglichkeit, Floating Panes atomar ein- und auszublenden. Pane- und Tab-IDs werden nun als Rückgabewerte geliefert, was die Skript-Integration erleichtert.

Weiterlesen nach der Anzeige

Der überarbeitete Layout-Manager lässt sich über Strg+O, L aufrufen. Nutzer können Layouts in neuen Tabs öffnen, auf den aktuellen Tab anwenden oder den Zustand eines Tabs als neues Layout aufzeichnen. Der ebenfalls neu gestaltete Session-Manager fasst das Erstellen neuer Sessions, das Anhängen an bestehende und das Wiederherstellen beendeter Sessions in einer einzigen Ansicht mit Fuzzy Finding zusammen.

Darüber hinaus lassen sich Pane-Grenzen neuerdings mit der Maus oder per Strg+Scrollrad verschieben. Dateipfade in Compiler-Ausgaben oder Logdateien erkennt Zellij automatisch und öffnet sie per Klick.

Für Plug-in-Entwickler stellt Version 0.44.0 neue Rust-APIs bereit. Sie ermöglichen unter anderem den Zugriff auf Scrollback-Inhalte anderer Panes, das Hervorheben von Text im Viewport, das Setzen von Pane-Farben sowie das Auslesen von Umgebungsvariablen und das Auslösen von Session-Saves. Da neue UI-Funktionen in Zellij grundsätzlich als Erweiterungen umgesetzt werden, stehen diese APIs auch externen Plug-ins zur Verfügung.

Siehe auch:


(fo)



Source link

Weiterlesen

Entwicklung & Code

Google schiebt die Gaming-Umgebung Agones in die CNCF


close notice

This article is also available in
English.

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

Die Gaming-Erweiterung für Kubernetes, Agones, kommt zur Cloud Native Computing Foundation (CNCF) und startet dort im Status einer Sandbox.

Weiterlesen nach der Anzeige

Laut CNCF-Blog ist das Open-Source-Projekt ein fester Bestandteil der Games-Industrie, der erste offizielle Partner war von Anfang an Ubisoft. 250 Entwicklerinnen und -Entwickler beteiligen sich an Agones, was sich unter dem Dach der CNCF weiter ausbauen soll.

Das von Google 2017 ins Leben gerufene Projekt dient dem Bereitstellen von Multi-Player-Games in der Kubernetes-Welt. Entwicklerinnen und Entwickler brauchen damit eine Anwendung nur einmal zu bauen und können sie überall bereitstellen, wobei sowohl lokale als auch Cloud-Komponenten zum Einsatz kommen können.


(who)



Source link

Weiterlesen

Beliebt