Die Programmiersprache Move wurde ursprünglich zum Erstellen der Diem-Blockchain verwendet. Sie wurde von der Diem Association entwickelt, einem von Meta unterstützten Technologiekonsortium. Obwohl die Blockchain schließlich verworfen wurde, ist Move noch heute im Einsatz.
Die Programmiersprache Move ist eine ausführbare Bytecode-Sprache. Sie implementiert Smart Contracts und benutzerdefinierte Transaktionen. Move zielt darauf ab, Probleme zu beheben, die bei anderen Blockchain-Programmiersprachen wie Solidity auftreten. Die grundlegenden Ziele, nämlich digitale Knappheit und Kontrolle über digitale Vermögenswerte zu erreichen, bleiben jedoch dieselben. Insbesondere zielt es auch darauf ab, Doppelausgaben zu verhindern und es den Inhabern digitaler Vermögenswerte zu ermöglichen, Eigentumsinformationen zu behalten.
Auf diese Weise maximiert Move die Sicherheit bei gleichzeitig optimiertem Design und deutlich niedrigeren Gaskosten als Blockchains, die nicht auf Move basieren.
Wie funktioniert die Programmiersprache Move?
Move verwendet eine lineare Logik, was bedeutet, dass Ressourcen nur einmal verwendet und niemals kopiert oder implizit verworfen werden können. Dadurch können Entwickler benutzerdefinierte Ressourcentypen kodieren, die nicht gelöscht oder dupliziert werden können und besser behandelt werden als andere.
Im statischen Typsystem von Move müssen Variablen als Typ (eine Zahl/ein Wort) definiert werden. Es schützt priorisierte Ressourcen. Sie können dennoch wie normale Elemente verwendet und in Datenstrukturen gespeichert oder als Werte in Berechnungen bereitgestellt werden. Ressourcen sind in Modulen außerdem transparent und vor dem Aufruf durch externe Quellen verborgen.
Darüber hinaus sind Module in Move flexibel und sicher, da die Beziehung zwischen Modulen, Ressourcen und Prozeduren der Beziehung zwischen Klassen, Objekten und Methoden in der objektorientierten Programmierung ähnelt.
Move kann außerdem alle Sicherheitsmerkmale in der Kette verifizieren und unterstützt statische Verifizierungstools außerhalb der Kette. Dies reduziert die Komplexität der Verifizierung in der Kette erheblich. Das Design basiert auf drei Kernentscheidungen:
—> Das Fehlen dynamischer Dispatches vermeidet die Erstellung von Call-Graphen und ermöglicht die statische Bestimmung der Aufrufstelle. Dadurch kann Move die Auswirkungen eines Prozeduraufrufs einfacher und ohne zusätzliche Komplexitäten erkennen.
—> Dank ihrer Modularität können Module zur Funktionsüberprüfung isoliert werden und helfen bei der Datenabstraktion und Lokalisierung kritischer Operationen an Ressourcen. Die Sicherheit wird durch die Kapselung des Moduls zusammen mit dem Typsystem der Sprache gewährleistet, sodass der Code außerhalb eines Moduls dessen Typen nicht verletzen kann. Darüber hinaus ermöglicht die Untersuchung isolierter Module eine gründliche Funktionsüberprüfung auf signifikante Modulinvarianten.
—> Schließlich ermöglicht die eingeschränkte Veränderlichkeit die Verwendung von Referenztypen ähnlich wie in C++. Referenzen sind unerlässlich, um jeden Move-Wert zu verändern, und normalerweise werden die temporären Werte in einem Transkriptionsskript erstellt und zerstört. Ähnlich wie bei Rust führt Moves Bytecode-Verifizierer „Borrow Checks“ durch, um mindestens eine veränderbare Referenz zu bestätigen.
—> Schließlich lehnt Move Programme ab, die die Anforderungen an Typsicherheit, Speichersicherheit und Ressourcensicherheit nicht erfüllen. Stattdessen kann eine höhere Programmiersprache mit einem Compiler verwendet werden, der für die Überprüfung der Eigenschaften zuständig ist. Die Alternative ist eine nicht typisierte Assembly auf niedriger Ebene mit Sicherheitsüberprüfungen.
