먼저 GitHub 저장소를 연결하겠습니다: wasm3-tinygo-psp.
주요 주제
한동안 PSP에서 Golang을 실행해보고 싶었습니다.
단, PSP로의 네이티브 컴파일은 (아마도) 불가능합니다.
물론 Golang은 GOARCH=mipsle을 지원하지만 운영 체제가 있다고 가정합니다. 이를 달성하려면 매우 어렵고 험난한 길을 헤쳐 나가야 할 것입니다.
그래서 다른 방법을 선택했어요. 즉, TinyGo를 사용하여 WASM으로 변환하는 방식입니다.
이제 실제 코드를 살펴보겠습니다.
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))) }
기본적으로 런타임에서 제공하는 함수를 호출하는 것뿐입니다. 단지 Hello World의 예시일 뿐입니다.
런타임 정보
런타임에 Rust와 wasmi를 사용하는 옵션도 있었는데 PPSSPP 같은 에뮬레이터에서는 작동했지만 실제 하드웨어에서는 오류가 발생했습니다(아래 스크린샷 참조).
커널 모드 관련이 아닐까 의심되지만, 결국 해결하지 못해서 다른 접근 방식을 취했습니다.
결국 C와 Wasm3의 조합이 성공적으로 이루어졌습니다.
앞서 코드에서 언급한 println에 대해서는 런타임 측에서 다음과 같이 정의하고 있습니다.
#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; }
이것은 단지 데모이므로 지금은 이것이 전부입니다. 그러나 다른 기능도 래핑하여 WASM에서 호출할 수 있도록 하면 본격적인 애플리케이션을 개발할 수 있습니다.
직면한 과제
Wasm3 크로스 컴파일
PSP 툴체인을 사용하여 Wasm3를 컴파일해야 했습니다.
누구나 쉽게 환경설정을 할 수 있도록 Forked 저장소를 만들었으니 꼭 참고해주세요: wasm3-for-psp.
TinyGo 빌드 옵션
결국 Tinygo build -o hello.wasm -target=wasm -no-debug main.go 명령어로 끝났는데, 이렇게 간단한 명령어까지 도달하는데 꽤 시간이 걸렸습니다. 아직 배울게 많아요.
주요 기능 내보내기
-target=wasi를 사용하는 경우 TinyGo는 기본 기능을 _start로 내보냅니다. 그런데 이 경우에는 별도의 시작 함수를 정의하고 내보내야 했습니다.
그런 다음...
이번에는 TinyGo를 사용하여 Golang 코드를 WASM으로 컴파일했지만, 다른 언어도 WASM으로 컴파일할 수 있다면 비슷한 방법으로 실행할 수 있다고 믿습니다. 저는 Golang에 대한 열정이 있어서 누군가가 시도해 볼 수 있다면 기쁠 것입니다.
그게 다입니다. 읽어주셔서 감사합니다.
위 내용은 PSP의 Wasm TinyGo의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

GO의 인코딩/이진 패키지는 이진 데이터를 처리하기위한 도구입니다. 1) 소규모 엔디안 및 대규모 엔디 언 엔디 어 바이트 오더를 지원하며 네트워크 프로토콜 및 파일 형식에 사용할 수 있습니다. 2) 복잡한 구조의 인코딩 및 디코딩은 읽기 및 쓰기 기능을 통해 처리 될 수 있습니다. 3) BYTE 순서 및 데이터 유형의 일관성에주의를 기울이십시오. 특히 다른 시스템간에 데이터가 전송 될 때, 특히 데이터가 전송 될 때. 이 패키지는 이진 데이터의 효율적인 처리에 적합하지만 바이트 슬라이스 및 길이를 신중하게 관리해야합니다.

go'sstringspackageincludeSentialtionFunctionsLikeCeceCecections, trimspace, split, andreplaceall.1) contassefficiledychecksforsubstrings.2) trimspaceremoveswhitespacetaintegrity.3) spliteparsparssessucturedtextlikecsv

thestringspackageingoiscrucialforefficientstringmanipulationduetoitsoptimizedFunctionsandUnicodesUpport.1) itsimplifiSeperationswithFunctionsLikeCeceCeceCeCeceCeCeCeCeCeCeCeCeCeCeCeCeCeCeCeCeCeCeCoctains

"인코딩/바이너리"패키지 크루아 시크교 전신 Binarydatamanipulation, ontureformancebenefitsinnetworkprogramming, filei/o, andsystemoperations.itsupportsendiannessflexibility, handlesvariousdatatypes, andissessentialforcustomprotocolsa

GO에서 Mutxes 및 Locks를 사용하는 것이 스레드 안전을 보장하는 열쇠입니다. 1) 상호 배타적 액세스를 위해 Sync.Mutex를 사용하십시오. 2) 읽기 및 쓰기 작업에는 Sync.rwMutex 사용 3) 성능 최적화를 위해 원자 작업을 사용하십시오. 이러한 도구와 사용 기술을 마스터하는 것은 효율적이고 신뢰할 수있는 동시 프로그램을 작성하는 데 필수적입니다.

동시 GO 코드의 성능을 최적화하는 방법은 무엇입니까? 벤치마킹 및 성능 분석을 위해 Getest, Gobench 및 PPROF와 같은 GO의 내장 도구를 사용하십시오. 1) 테스트 패키지를 사용하여 동시 기능의 실행 속도를 평가하기 위해 벤치 마크를 작성하십시오. 2) PPROF 도구를 사용하여 성능 분석을 수행하고 프로그램에서 병목 현상을 식별하십시오. 3) 쓰레기 수집 설정을 조정하여 성능에 미치는 영향을 줄입니다. 4) 채널 작동 최적화를 최적화하고 효로 선수 수를 제한하여 효율성을 향상시킵니다. 지속적인 벤치마킹 및 성능 분석을 통해 동시 GO 코드의 성능을 효과적으로 개선 할 수 있습니다.

동시 GO 프로그램에서 오류 처리의 일반적인 함정을 피하는 방법 : 1. 오류 전파 보장, 2. 처리 시간 초과, 3. 집계 오류, 4. 컨텍스트 관리, 5. 오류 래핑, 6. 로깅, 7. 테스트를 사용하십시오. 이러한 전략은 동시 환경에서 오류를 효과적으로 처리하는 데 도움이됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

WebStorm Mac 버전
유용한 JavaScript 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기