farLang 早期仅支持嵌入式和操作系统的开发以及其他底层的开发工作
想法
- far 早期只专注在Riscv和Jvm上的实现以及自举,以更方便的在riscv的Cpu和嵌入式进行操作系统的开发和探索,所以far在早期可以定义为专为写操作系统和嵌入式的语言
- 所以在早期, far 仅会比c语言现代一点点...
- 在早期没有线程库、原子语义、仅有平台的锁语义
far语法
// 赋值 自动推断
if 语句
let x = 1;
if x==1 || b==1{
}
if let match 语句
//match 捕获 val为元组类型 res 可以接收 match表达式的结果,如果你不想占用一个单词用于接收,可以用 _ 忽略
//该语句最终会产生4个变量,为:x,y,z val 可以作为后续的上下文使用 如果不想接收val 可以使用_ 忽律
//_ 忽律 if let (x,y,z) = getData(), _ = match _{}
if let (x,y,z) = getData(), res = match val{
// 解构第二和第三个值
(0, y, z) => println("0 - {:?} - {:?}", y, z),
// 只匹配第一个值,后面的没有匹配和解构,.. 可以忽略元组剩下的值
(1, ..) => println("First is `1`"),
_ => println("It doesn't matter what they are"),
}
//解决的问题
let (x,y) = getData();
if x==1{
}
数据类型
u8 u16 u32 u64 u128 i8 i16 i32 i64 i128 bool string int
枚举
//枚举
enum Data{
User(User),
Boss(i32,i32),
}
let n = 4;
match n {
n if n > 2 => println("> 2"),
n if n > 3 => println("> 3"),
_ => println("some else"),
};
函数
fn Data get(Data allData) {
//只需要处理需要处理的类型即可
match allData{
User(s)=>{
s
},
Boss( x,y )=>{
print(x,y);
},
//忽略y
Boss( x,_ )=>{
print(x);
},
//x是1到9才匹配
Boss( 1..9,_ ) => {
print(x);
},
//1或9才匹配
Boss( 1|9,_ ) => {
print(x);
},
Data::User | Data:Boss =>{
}
//通配符
_=>{}
};
}
结构体
struct User{
int x;
}
//实现接口
impl User for IUser{
fn string getName(User *me){
}
fn (int,string) getbb(User me) {
}
}
数组
//栈上分配
//自动推类型 string[5] arr
let arr = []{
"1","2","3","4","5"
};
//自动推类型 i32[5] arr
let arr = []{
1,2
};
//返回栈内存
return &arr;
//结构体栈分配
let obj = User{
name:"far",
age:1
}
//返回栈内存
return &obj;
//堆上分配 1
arr = alloc(sizeof(i32)*4);
//堆上分配 2 统一范式
let *arr = new i32[4];
let *user = new User[4];