示例¶
入门示例¶
Hello, World¶
基本算术¶
let a = 10;
let b = 3;
println("a + b =", a + b); // 13
println("a - b =", a - b); // 7
println("a * b =", a * b); // 30
println("a / b =", a / b); // 3 (整数除法)
println("a % b =", a % b); // 1
变量与类型¶
let name: str = "Link";
let version: f64 = 0.1;
let year: i32 = 2026;
let is_open_source: bool = true;
println("语言:", name);
println("版本:", version);
println("年份:", year);
println("开源:", is_open_source);
算法示例¶
斐波那契数列¶
fn fib(n: i32) -> i32 {
if n < 2 { return n; }
fib(n - 1) + fib(n - 2)
}
// 打印前 15 项
for i in 0..15 {
print(fib(i), " ");
}
println("");
// 输出:0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
阶乘¶
fn factorial(n: i32) -> i32 {
if n <= 1 { return 1; }
n * factorial(n - 1)
}
for i in 1..11 {
println(i, "! =", factorial(i));
}
最大公约数(辗转相除)¶
fn gcd(a: i32, b: i32) -> i32 {
if b == 0 { return a; }
gcd(b, a % b)
}
println("gcd(48, 36) =", gcd(48, 36)); // 12
println("gcd(17, 5) =", gcd(17, 5)); // 1
println("gcd(100, 75) =", gcd(100, 75)); // 25
素数判断¶
fn is_prime(n: i32) -> bool {
if n < 2 { return false; }
if n == 2 { return true; }
if n % 2 == 0 { return false; }
let i = 3;
while i * i <= n {
if n % i == 0 { return false; }
i = i + 2;
}
true
}
// 找出 100 以内的所有素数
let count = 0;
for n in 2..100 {
if is_prime(n) {
print(n, " ");
count = count + 1;
}
}
println("");
println("共", count, "个素数");
冒泡排序¶
fn bubble_sort(nums: list) -> list {
let n = len(nums);
for i in 0..n {
for j in 0..(n - i - 1) {
if nums[j] > nums[j + 1] {
let temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
nums
}
let arr = [64, 34, 25, 12, 22, 11, 90];
let sorted = bubble_sort(arr);
println("排序后:", sorted);
// 输出:[11, 12, 22, 25, 34, 64, 90]
二分查找¶
fn binary_search(nums: list, target: i32) -> i32 {
let lo = 0;
let hi = len(nums);
while lo < hi {
let mid = (lo + hi) / 2;
if nums[mid] == target {
return mid;
} else if nums[mid] < target {
lo = mid + 1;
} else {
hi = mid;
}
}
-1
}
let arr = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
for target in [5, 13, 8] {
let idx = binary_search(arr, target);
if idx >= 0 {
println("找到", target, "在索引", idx);
} else {
println(target, "不存在");
}
}
FFI 示例¶
C 标准库¶
extern "C" {
fn abs(n: i32) -> i32;
fn sqrt(x: f64) -> f64;
fn pow(base: f64, exp: f64) -> f64;
}
// 计算两点距离
fn distance(x1: f64, y1: f64, x2: f64, y2: f64) -> f64 {
let dx = x2 - x1;
let dy = y2 - y1;
sqrt(pow(dx, 2.0) + pow(dy, 2.0))
}
println("距离 =", distance(0.0, 0.0, 3.0, 4.0)); // 5
println("|-42| =", abs(-42)); // 42
Python 标准库¶
extern "python" module "math" {
fn sqrt(x: f64) -> f64;
fn pow(base: f64, exp: f64) -> f64;
fn log(x: f64) -> f64;
fn sin(x: f64) -> f64;
fn cos(x: f64) -> f64;
fn radians(deg: f64) -> f64;
}
extern "python" module "os" {
fn getcwd() -> str;
fn getpid() -> i32;
}
// 数学计算
println("sqrt(2) =", sqrt(2.0));
println("log(e) =", log(2.718281828));
println("sin(90°) =", sin(radians(90.0)));
// 系统信息
println("当前目录:", getcwd());
println("进程 ID:", getpid());
C++ 共享库¶
extern "C++" module "examples/cpp_demo.dll" {
fn cpp_add(a: i32, b: i32) -> i32;
fn cpp_factorial(n: i32) -> i32;
fn cpp_fib(n: i32) -> i32;
fn cpp_version() -> str;
fn cpp_greet(name: str) -> str;
fn cpp_is_even(n: i32) -> bool;
fn cpp_max3(a: i32, b: i32, c: i32) -> i32;
}
println("C++ 库版本:", cpp_version());
println("3 + 4 =", cpp_add(3, 4));
println("5! =", cpp_factorial(5));
println("fib(10) =", cpp_fib(10));
println("问候:", cpp_greet("Link"));
println("42 是偶数:", cpp_is_even(42));
println("max(3, 9, 6) =", cpp_max3(3, 9, 6));
三语言混合¶
// === 1. C 标准库 ===
extern "C" {
fn abs(n: i32) -> i32;
}
// === 2. Python 标准库 ===
extern "python" module "math" {
fn sqrt(x: f64) -> f64;
fn pow(base: f64, exp: f64) -> f64;
}
// === 3. C++ 共享库 ===
extern "C++" module "examples/cpp_demo.dll" {
fn cpp_factorial(n: i32) -> i32;
}
// === 4. Link 自己的函数 ===
fn distance(x1: f64, y1: f64, x2: f64, y2: f64) -> f64 {
let dx = abs(x2 - x1); // 调用 C
let dy = abs(y2 - y1); // 调用 C
sqrt(pow(dx, 2.0) + pow(dy, 2.0)) // 调用 Python
}
// === 5. 业务逻辑 ===
let d = distance(0.0, 0.0, 3.0, 4.0);
let f = cpp_factorial(5); // 调用 C++
let combined = abs(-3) + cpp_factorial(3); // C + C++
println("距离 =", d);
println("5! =", f);
println("组合 =", combined);
实用工具¶
简易计算器¶
fn add(a: f64, b: f64) -> f64 { a + b }
fn sub(a: f64, b: f64) -> f64 { a - b }
fn mul(a: f64, b: f64) -> f64 { a * b }
fn div(a: f64, b: f64) -> f64 {
if b == 0.0 {
println("错误:除零");
return 0.0;
}
a / b
}
let x = 10.0;
let y = 3.0;
println(x, "+", y, "=", add(x, y));
println(x, "-", y, "=", sub(x, y));
println(x, "*", y, "=", mul(x, y));
println(x, "/", y, "=", div(x, y));
FizzBuzz¶
for n in 1..31 {
if n % 15 == 0 {
println("FizzBuzz");
} else if n % 3 == 0 {
println("Fizz");
} else if n % 5 == 0 {
println("Buzz");
} else {
println(n);
}
}
九九乘法表¶
for i in 1..10 {
for j in 1..i + 1 {
let product = i * j;
print(j, "*", i, "=", product, " ");
}
println("");
}
输出:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
(中间省略)
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
字符串反转¶
fn reverse(s: str) -> str {
let n = len(s);
let result = "";
let i = n - 1;
while i >= 0 {
result = result + s[i];
i = i - 1;
}
result
}
println(reverse("hello")); // olleh
println(reverse("Link")); // kniL
println(reverse("你好世界")); // 界世好你
矩阵运算¶
fn matrix_print(m: list) {
for i in 0..len(m) {
let row = m[i];
for j in 0..len(row) {
print(row[j], " ");
}
println("");
}
}
fn matrix_add(a: list, b: list) -> list {
let rows = len(a);
let cols = len(a[0]);
let result = [];
for i in 0..rows {
let row = [];
for j in 0..cols {
row = row + [a[i][j] + b[i][j]];
}
result = result + [row];
}
result
}
let a = [[1, 2], [3, 4]];
let b = [[5, 6], [7, 8]];
let c = matrix_add(a, b);
matrix_print(c);
// 输出:
// 6 8
// 10 12
数据处理¶
统计计算¶
fn sum(nums: list) -> f64 {
let total = 0.0;
for i in 0..len(nums) {
total = total + nums[i];
}
total
}
fn mean(nums: list) -> f64 {
sum(nums) / len(nums)
}
fn max_of(nums: list) -> f64 {
let m = nums[0];
for i in 1..len(nums) {
if nums[i] > m {
m = nums[i];
}
}
m
}
fn min_of(nums: list) -> f64 {
let m = nums[0];
for i in 1..len(nums) {
if nums[i] < m {
m = nums[i];
}
}
m
}
let data = [12.5, 23.4, 8.9, 34.2, 18.7, 25.1, 15.6];
println("数据:", data);
println("总和:", sum(data));
println("平均:", mean(data));
println("最大:", max_of(data));
println("最小:", min_of(data));
数据过滤¶
fn filter_positive(nums: list) -> list {
let result = [];
for i in 0..len(nums) {
if nums[i] > 0 {
result = result + [nums[i]];
}
}
result
}
let nums = [-3, 5, -1, 8, 2, -7, 4, 0, 6];
let positives = filter_positive(nums);
println("正数:", positives); // [5, 8, 2, 4, 6]
下一步¶
stream 数据流¶
基本用法¶
// 从列表创建 stream
let s = stream([1, 2, 3, 4, 5]);
// map:变换每个元素
let doubled = stream([1, 2, 3])
| map(fn(x) -> i64 { return x * 2; })
| collect();
println(doubled); // [2, 4, 6]
// filter:过滤元素
let evens = stream([1, 2, 3, 4, 5, 6])
| filter(fn(x) -> bool { return x % 2 == 0; })
| collect();
println(evens); // [2, 4, 6]
// for_each:遍历元素
stream([1, 2, 3])
| for_each(fn(x) { print(x, " "); });
// 输出:1 2 3
管道链式操作¶
// 多步管道操作
let result = stream([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
| map(fn(x) -> i64 { return x * x; }) // 平方
| filter(fn(x) -> bool { return x > 50; }) // 保留大于 50 的
| collect();
println(result); // [64, 81, 100]
多语言 FFI 示例¶
WebAssembly 互连¶
extern "wasm" module "math_utils.wasm" {
fn add(a: i32, b: i32) -> i32;
fn multiply(a: i32, b: i32) -> i32;
}
println("wasm add(3, 4) =", add(3, 4)); // 7
println("wasm multiply(5, 6) =", multiply(5, 6)); // 30
Java 互连¶
extern "java" module "build/classes::com.example.MathUtils" {
fn factorial(n: i64) -> i64;
fn greet(name: str) -> str;
}
println("5! =", factorial(5)); // 120
println("问候:", greet("Link")); // Hello, Link!
HTML / JS 互连¶
extern "html" module "http://127.0.0.1:3000" {
fn add(a: i32, b: i32) -> i32;
fn render_html(content: str) -> str;
}
println("js add(10, 20) =", add(10, 20));
println("html:", render_html("<h1>Hello</h1>"));
进程桥接互连¶
// Go 桥接
extern "go" module "bridge.go" {
fn add(a: i64, b: i64) -> i64;
fn greet(name: str) -> str;
}
// Ruby 桥接
extern "ruby" module "bridge.rb" {
fn transform(input: i64) -> i64;
}
let go_sum = add(10, 20);
let ruby_result = transform(go_sum);
println("Go add(10, 20) =", go_sum);
println("Ruby transform =", ruby_result);
全语言混合¶
extern "C" { fn abs(n: i32) -> i32; }
extern "python" module "math" { fn sqrt(x: f64) -> f64; }
extern "C++" module "cpp_demo.dll" { fn cpp_factorial(n: i32) -> i32; }
extern "wasm" module "mod.wasm" { fn add(a: i32, b: i32) -> i32; }
extern "go" module "bridge.go" { fn greet(name: str) -> str; }
// 混合使用 5 种语言
let c_abs = abs(-42);
let py_sqrt = sqrt(16.0);
let cpp_fact = cpp_factorial(5);
let wasm_add = add(10, 20);
let go_greet = greet("Link");
println("C abs(-42) =", c_abs);
println("Python sqrt(16) =", py_sqrt);
println("C++ factorial(5) =", cpp_fact);
println("WASM add(10, 20) =", wasm_add);
println("Go greet:", go_greet);
// stream + 多语言
let result = stream([1, 2, 3, 4, 5])
| map(fn(x) -> i64 { return add(x, x); }) // 调用 WASM
| filter(fn(x) -> bool { return x > 4; })
| collect();
println("stream result:", result); // [6, 8, 10]