Je vais d'abord joindre le référentiel GitHub : wasm3-tinygo-psp.
Sujet principal
Depuis quelques temps déjà, je souhaitais faire tourner Golang sur PSP.
Cependant, la compilation native sur la PSP est impossible (probablement).
Certes, Golang prend en charge GOARCH=mipsle, mais cela suppose la présence d'un système d'exploitation. Si vous essayez d’y parvenir, vous devrez probablement emprunter un chemin très difficile et épineux.
Alors, j'ai choisi une autre voie. En d'autres termes, l'approche consiste à le convertir en WASM à l'aide de TinyGo.
Maintenant, jetons un œil au code réel.
package main import "unsafe" //go:wasmimport debug println func println(ptr unsafe.Pointer, len int32) //export start func start() { main() } func main() { message := "Hello, WebAssembly, from Golang!" println(unsafe.Pointer(unsafe.StringData(message)), int32(len(message))) }
Essentiellement, nous appelons simplement les fonctions fournies par le runtime. C'est juste un exemple de Hello World.
À propos de l'exécution
Il existait également une option permettant d'utiliser Rust et wasmi pour le runtime, mais bien que cela fonctionnait sur des émulateurs comme PPSSPP, des erreurs se produisaient sur le matériel réel (comme le montre la capture d'écran ci-dessous).
Je soupçonne que cela peut être lié au mode noyau, mais comme je n'ai finalement pas pu le résoudre, j'ai adopté une approche différente.
En fin de compte, la combinaison de C et Wasm3 a fonctionné avec succès.
Concernant println, qui a été mentionné dans le code précédent, il est défini côté exécution comme suit.
#define printf pspDebugScreenPrintf static const void* host_debug_println(IM3Runtime runtime, IM3ImportContext ctx, uint64_t *stack, void *mem) { uint32_t ptr = (uint32_t) stack[0]; uint32_t length = (uint32_t) stack[1]; uint8_t* bytes = (uint8_t*)mem + ptr; char buffer[256]; if (length >= sizeof(buffer)) { length = sizeof(buffer)-1; } memcpy(buffer, bytes, length); buffer[length] = ''; printf("%s\n", buffer); return NULL; }
Puisqu'il ne s'agit que d'une démo, c'est tout pour le moment. Cependant, si vous enveloppez également d'autres fonctions et les rendez appelables depuis WASM, vous devriez être en mesure de développer des applications à part entière.
Défis rencontrés
Compilation croisée Wasm3
Il était nécessaire de compiler Wasm3 à l'aide de la chaîne d'outils PSP.
J'ai créé un référentiel forké pour permettre à tout le monde de configurer facilement l'environnement, alors jetez un œil pour référence : wasm3-for-psp.
Options de construction TinyGo
Au final, je me suis retrouvé avec la commande tinygo build -o hello.wasm -target=wasm -no-debug main.go, mais il m'a fallu pas mal de temps pour arriver à une commande aussi simple. J'ai encore beaucoup à apprendre.
Fonction principale d'exportation
Si vous utilisez -target=wasi, TinyGo exporte la fonction principale sous _start. Mais dans ce cas, j'ai dû définir et exporter une fonction de démarrage distincte.
Et puis...
Cette fois, j'ai utilisé TinyGo pour compiler du code Golang dans WASM, mais si d'autres langages peuvent également être compilés dans WASM, je pense qu'ils peuvent être exécutés en utilisant une méthode similaire. Je suis passionné par Golang, donc je serais heureux si quelqu'un pouvait l'essayer.
C'est tout. Merci d'avoir lu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Golang convient au développement rapide et à la programmation simultanée, tandis que C est plus adapté aux projets qui nécessitent des performances extrêmes et un contrôle sous-jacent. 1) Le modèle de concurrence de Golang simplifie la programmation de concurrence via le goroutine et le canal. 2) La programmation du modèle C fournit un code générique et une optimisation des performances. 3) La collecte des ordures de Golang est pratique mais peut affecter les performances. La gestion de la mémoire de C est complexe mais le contrôle est bien.

GOIMIMPACTSDEVENCEMENTSPOSITIVEMENTS INSPECT, EFFICACTION ET APPLICATION.1) VITESSE: GOCOMPILESQUICKLYANDRUNSEFFIÉMENT, IDEALFORLARGEPROROSTS.2) Efficacité: ITSCOMPEHENSIVESTANDARDLIBRARYREDUCEEXTERNEDENDENCES, EnhancingDevelovefficiency.3) Simplicité: Simplicité: Implicité de la manière

C est plus adapté aux scénarios où le contrôle direct des ressources matérielles et une optimisation élevée de performances sont nécessaires, tandis que Golang est plus adapté aux scénarios où un développement rapide et un traitement de concurrence élevé sont nécessaires. 1.C's Avantage est dans ses caractéristiques matérielles proches et à des capacités d'optimisation élevées, qui conviennent aux besoins de haute performance tels que le développement de jeux. 2. L'avantage de Golang réside dans sa syntaxe concise et son soutien à la concurrence naturelle, qui convient au développement élevé de services de concurrence.

Golang excelle dans les applications pratiques et est connu pour sa simplicité, son efficacité et sa concurrence. 1) La programmation simultanée est implémentée via des goroutines et des canaux, 2) le code flexible est écrit à l'aide d'interfaces et de polymorphismes, 3) Simplifier la programmation réseau avec des packages Net / HTTP, 4) Construire des robots concurrents efficaces, 5) Déboggage et optimisation par le biais d'outils et de meilleures pratiques.

Les caractéristiques principales de GO incluent la collection de déchets, la liaison statique et le support de concurrence. 1. Le modèle de concurrence du langage GO réalise une programmation concurrente efficace via le goroutine et le canal. 2. Les interfaces et les polymorphismes sont implémentés via des méthodes d'interface, de sorte que différents types peuvent être traités de manière unifiée. 3. L'utilisation de base démontre l'efficacité de la définition et de l'appel des fonctions. 4. Dans une utilisation avancée, les tranches offrent des fonctions puissantes de redimensionnement dynamique. 5. Des erreurs courantes telles que les conditions de course peuvent être détectées et résolues par l'imagerie. 6. Optimisation des performances Réutiliser les objets via Sync.Pool pour réduire la pression de collecte des ordures.

GO Language fonctionne bien dans la construction de systèmes efficaces et évolutifs. Ses avantages incluent: 1. Haute performance: compilé en code machine, vitesse de course rapide; 2. Programmation simultanée: simplifier le multitâche via les goroutines et les canaux; 3. Simplicité: syntaxe concise, réduction des coûts d'apprentissage et de maintenance; 4. Plate-forme multipliée: prend en charge la compilation multiplateforme, déploiement facile.

Confus quant au tri des résultats de la requête SQL. Dans le processus d'apprentissage de SQL, vous rencontrez souvent des problèmes déroutants. Récemment, l'auteur lit "Mick-SQL Basics" ...

La relation entre la convergence des piles technologiques et la sélection de la technologie dans le développement de logiciels, la sélection et la gestion des piles technologiques sont un problème très critique. Récemment, certains lecteurs ont proposé ...


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

PhpStorm version Mac
Le dernier (2018.2.1) outil de développement intégré PHP professionnel

Version Mac de WebStorm
Outils de développement JavaScript utiles

MinGW - GNU minimaliste pour Windows
Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

VSCode Windows 64 bits Télécharger
Un éditeur IDE gratuit et puissant lancé par Microsoft