Запознайте се със SwiftWasm

Група смели души зад SwiftWasm работят върху добавянето на WebAssembly като цел за компилация за езика за програмиране Swift. Работата е в процес, така че все още не е напълно готова. Но ние вече сме в състояние да накараме кода на Swift да се изпълни в среда за изпълнение на Wasm (напр. браузъра)!

Нека да настроим SwiftWasm на най-новия macOS. Тогава нека се опитаме да създадем първото си приложение, базирано на Swift!

Инсталирайте Swift Language с поддръжка на Wasm

Поддръжката на Wasm все още не е в официалното хранилище на Swift. Следователно трябва да инсталираме моментна снимка на езика с експериментална поддръжка.

Изтеглете и инсталирайте най-новата macOS версия на SwiftWasm (5.3 към момента на писане) за macOS от проекта GitHub.

За да можете да използвате инструменталната верига SwiftWasm от командния ред:

export PATH=/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin:"${PATH}"

И за да тествате, че е правилно настроен:

swift --version

Тествайте SwiftWasm

Създайте HelloWorld Swift файл:

echo 'print("Hello, world!")' > hello.swift

Компилирайте изходния код на Swift в байт код на Wasm:

swiftc -target wasm32-unknown-wasi hello.swift -o hello.wasm

Стартирайте изхода

За да стартирате кода от командния ред, можете да използвате wasmer (време за изпълнение на Wasm).

Инсталирайте го:

curl https://get.wasmer.io -sSfL | sh

Изпълнете вашия Wasm код:

wasmer hello.wasm

Направете Swift пакет със SwiftPM

Можем да използваме SwiftPM, за да създадем пакет, който след това ще бъде компилиран в Wasm.

Просто е. Нека създадем пакет с име testpack и след това просто да го компилираме и изпълним:

mkdir testpack && cd testpack
swift package init --type executable

Нека го изградим:

swift build --triple wasm32-unknown-wasi

Изпълнете го:

wasmer .build/debug/testpack

След това създайте уеб приложение със SwiftWasm

Ние едва настроихме цялото нещо и изпълнихме просто Hello World. Сега „нека направим“ нашето първо уеб приложение, вдъхновено от ReactJS и SwiftUI, със Swift!