std :: f32 :: sqrtを使用します。

struct matrix3 {
    X：[[F32;3];3]、
}

struct point3 {
    X：F32、
    Y：F32、
    Z：F32、
}

fn matrix_from_normal（normal：＆point3） - > matrix3 {
    mut result = matrix3 {x：[[0.0;3];3]};

    let length = sqrt（normal.x * normal.x + normor.y * normal.y + normal.z * normal.z）;
    inv_length = 1.0 / length;

    result.x [0] [0] = normal.x * inv_length;
    result.x [0] [1] = normal.y * inv_length;
    result.x [0] [2] = normal.z * inv_length;

    result.x [1] [0] = -normal.y * inv_length;
    result.x [1] [1] = normal.x * inv_length;
    result.x [1] [2] = 0.0;

    result.x [2] [0] = -normal.z * inv_length;
    result.x [2] [1] = 0.0;
    result.x [2] [2] = normal.x * inv_length;

    返品結果;
}

注：錆では、タイプの暗黙的な導入はないため、matrix_from_normal関数の変数のタイプが明確に示されています。さらに、Rustは通常、ネーミング関数と変数にSnake_Caseを使用します。
use std::f32::sqrt;

struct Matrix3 {
    x: [[f32; 3]; 3],
}

struct Point3 {
    x: f32,
    y: f32,
    z: f32,
}

fn matrix_from_normal(normal: &Point3) -> Matrix3 {
    let mut result = Matrix3 { x: [[0.0; 3]; 3] };

    let length = sqrt(normal.x * normal.x + normal.y * normal.y + normal.z * normal.z);
    let inv_length = 1.0 / length;

    result.x[0][0] = normal.x * inv_length;
    result.x[0][1] = normal.y * inv_length;
    result.x[0][2] = normal.z * inv_length;

    result.x[1][0] = -normal.y * inv_length;
    result.x[1][1] = normal.x * inv_length;
    result.x[1][2] = 0.0;

    result.x[2][0] = -normal.z * inv_length;
    result.x[2][1] = 0.0;
    result.x[2][2] = normal.x * inv_length;

    return result;
}

Примечание: в Rust не существует неявного приведения типов, поэтому типы переменных в функции matrix_from_normal указаны явно. Кроме того, в Rust обычно используется snake_case для именования функций и переменных.