首页 > 其他分享 >far语言的思考

far语言的思考

时间:2022-11-05 16:00:10浏览次数:36  
标签:arr 语言 far Boss let User 思考 match

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];




结构化赋值

内存管理

vec

map

异常处理

标签:arr,语言,far,Boss,let,User,思考,match
From: https://www.cnblogs.com/cfas/p/16860363.html

相关文章