Referensi cepat sintaks
Deklarasi yang sering digunakan, alur kontrol, tipe, pointer, dan tata bahasa FFI disusun dalam satu halaman.
Wave Foundation
deklarasi
var value: i32 = 1;
var next: i32 = value + 1;
const LIMIT: i32 = 64;
static total: i64 = 0;
type Identifier = u64;
var adalah wilayahnya, const/static adalah deklarasi tingkat atas. Variabel lokal secara eksplisit mendeklarasikan tipenya.
Fungsi
fun max(left: i32, right: i32) -> i32 {
if (left > right) {
return left;
}
return right;
}
generik
fun identity<T>(value: T) -> T {
return value;
}
var value: i32 = identity<i32>(10);
Saat memanggil generik, tentukan argumen tipe.
Struktur dan enum
struct Pair {
left: i32;
right: i32;
}
enum Result -> i32 {
Ok = 0,
Error,
}
Kondisi dan loop
if (ready) {
println("ready");
}
while (count < 10) {
count += 1;
}
for (var i: i32 = 0; i < 10; i += 1) {
println("{}", i);
}
match (status) {
Ready => {
println("ready");
}
0 => {
println("zero");
}
_ => {
println("other");
}
}
Header if, while, for, dan match menggunakan tanda kurung.
Array dan pointer
var values: array<i32, 4> = [1, 2, 3, 4];
var p: ptr<i32> = &values[0];
var first: i32 = deref p;
masukan/keluaran konsol
print("value = ");
println("{}", value);
input("{}", value);
Argumen pertama adalah string literal. Setiap placeholder {} yang tepat memerlukan ekspresi yang mengikutinya, dan target input harus dapat ditetapkan.
import dan barang-barang umum
import("std::string::len");
import("./helpers" as helpers);
import("math")::{
Vector
};
pub fun add(left: i32, right: i32) -> i32 {
return left + right;
}
pub import("./extra"):: {
increment
};
Jalur lokal dimulai dengan ./. Alias import menentukan nama modul, dan pilihan import mengimpor entri publik yang diperlukan ke dalam namespace file ini. pub import mengekspor ulang item yang dipilih.
FFI
extern(c) fun native_call(value: i32) -> i32;
export(c) fun wave_call(value: i32) -> i32 {
return value + 1;
}
Targetkan item bersyarat
#[target(os="linux", arch="riscv64")]
extern(c) fun platform_call(value: i32) -> i32;
Kunci kondisi dukungan adalah arch, os, env, abi. Properti mengontrol item tingkat atas berikutnya.
Perakitan sebaris
var result: i64 = 0;
asm {
"mv a0, a1"
in("a1") 7
out("a0") result
clobber("memory")
}
Teks instruksi dan nama register bergantung pada target. Deklarasikan semua input, output, dan clobber tersembunyi yang diperlukan untuk blok tersebut.
pemeriksaan sumber
wavec build main.wave --emit=check
wavec print supported-targets
wavec print supported-emit-kinds
Rentang Pembelajaran dan Contoh
Contoh variabel lokal dan pernyataan yang ditampilkan secara terpisah di luar fungsi adalah potongan kode yang dimasukkan ke dalam isi fungsi. Selesaikan contoh lari dan latihan ikuti di Wave Proses Pembelajaran. Silakan periksa Perpustakaan standar untuk mengetahui aturan rinci tentang memori dan fungsi eksternal.