ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

standford cs110l lec3

2022-06-11 13:00:16  阅读:153  来源: 互联网

标签:cs110l 错误 编译器 传递 standford ownership lec3 rust 函数


lecture note

  • rust的struct中存在指向其他buffer的指针的时候,如果有人要去解引用一个指针,并且这个指针指向的buffer已经被释放了,对于ownership的分析而言,就会出现问题
  • 函数传递ownership还是传递reference,
    • 编译器在传递ownership的时候,编译器会代表你在编译时执行ownership检查,但是rust生成的汇编代码与c语言的没有差别
    • 当你传递一块内存的ownership时,实际上传递的是一个pointer,但是在这个值的lifetime的末尾会插入一个free函数
    • 当你传递一个reference,你也是传递一个指针,编译器会自动的帮助解引用
    • 当你显示的拷贝时,才会发生内存的拷贝
  • 为什么这里的s是immutable borrowrust中的引用&是会自动解引用的,对于修改之后,s1不会被在使用了,所有ownsership回到s,对于函数参数什么时候用&,什么时候传递onwership,这个由函数语义决定
  • 对于某个变量会是NULL值,那么程序员需要处理可能出现的相关错误,Option可以处理这个值Option是一种enum,可以使用match模式匹配,unwrap_or()等函数来处理
  • c语言处理error的方式非常朴素,在发生错误的时候,程序会将全局变量errno设置一个整数,那么调用方看到错误的时候,会去检查errno,以此来检查发生了什么错误
  • 内核的返回值错误?看到非零值,就认为出错了
  • cpp用exception处理错误,但是异常由于throw,可能会出现使用一个函数,而在其他关系不大的helper函数中抛出异常以及exception容易在代码量逐渐变大的项目中,难以处理
  • rust中处理错误的哲学,是遇到不可恢复的错误直接panic,完全不捕捉处理
  • 对于可以恢复的错误,应该返回Result枚举类型,unwrap和expect在展开Result时,遇到Err变体,直接panic

标签:cs110l,错误,编译器,传递,standford,ownership,lec3,rust,函数
来源: https://www.cnblogs.com/mlmz/p/16365660.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有