0%

Author’s Note: Scroll down for English version

今天复习宏观经济的时候突然想到了这个问题,在宏观经济中,一个人的工资取决于

其中

指的是上学的时长

其中 是预期工资, 是你的能力点数, 是每能力点数能收获的工资。
首先这个公式仅仅是一个估测模型 - 意味着它在任何情况下都不能作为真实世界的任何参考,但我觉得在直觉上,我可以用这个模型分析整个世界的运作模式。
但在我们开始之前,我需要慎重的指出我学到的这个入门级的经济学课对市场做出了如下的假设:

  1. 市场中没有任何的信息差,意味着你的能力点数是完全公开且清晰可见的。
    1. 但在现实中雇主需要先对潜在的员工进行评估,以确认他们是否能胜任工作
  2. 能力点数的增长成指数型增长
    1. 个人认为其实能力点数的增长是线性然后逐渐趋于平缓的,但是工资对于能力点数的增长是指数型的
    2. 而且上学时长与能力点数也不是完全1.0的正相关
    3. 但也不完全,针对这个要做一个合理的模型是非常困难的
  3. 假设银行对借贷/存款没有数量限额

在这些假设成立的情况下,假设一个人可以自由的分配TA的时间(工作/娱乐),那么为了最大化TA的快乐程度,完全理智的TA需要做如下优化问题:

  1. 最大化快乐函数
    1. 这里的是指第一年的工作时间和娱乐时间,是指第一年的消费
  2. 限制自己的消费不超过自己这辈子能赚的总量
    1. 当年不足的部分可以借贷
    2. 当年多余的部分可以存起来

这个问题的解是一个非常简单的函数,但是我不想在这里写出来,因为我觉得这个问题的解不是这篇文章的重点,而是这个问题的解的意义。

由于理性的消费最大化了这个优化问题,非理性的决策一旦导致了跟理性决策不一样的投入,就注定了这个人的快乐程度会下降,另一种意义是这个人浪费了自己的先天资源。当然这个模型只能当作业余分析的原因也是&因为没有任何人可以提前预知自己的需求和快乐程度,同时人本身就是带偏见的,所以这个模型只能当作一个参考。

但不管如何,我们还是需要多多了解自己,提前对自己的消费,工资,和资产投资进行规划,这样才能在未来的生活中更加的快乐。


I suddenly thought of this question when I was reviewing macroeconomics today. In macroeconomics, a person’s salary depends on

where

refers to the length of schooling

Where is the expected salary, is your skill points, and is the salary you can get per skill points.
First of all this formula is only a model for estimation - meaning it cannot be used as any reference to the real world under any circumstances, but I feel that intuitively, I can use this model to analyze the working mode of the whole world.
But before we get started, I need to be careful to point out that this introductory economics class I took made the following assumptions about markets:

  1. There is no information gap in the market, which means that your ability points are completely open and clearly visible.
    1. But in reality, employers need to assess potential employees first to confirm whether they are qualified for the job
  2. The growth of skill points is exponential
    1. I personally think that the growth of ability points is linear and then gradually flattened, whereas the growth of salary is exponential for ability points
    2. Moreover, the length of schooling and the ability points are not completely positively correlated with a coefficient of 1.0
    3. But anyhow, it is very difficult to make a reasonable model for this
  3. The bank has no quantitative limit on loans/deposits

In the case where these assumptions are established, assuming that a person can freely allocate his/her time (work/entertainment), then in order to maximize the his/her happiness, a completely rational person needs to do the following optimization problem:

  1. Maximize the happy(utility) function
    1. Here and refer to the working time and entertainment time in the first year, and refers to the consumption in the first year
  2. Limit his/her spending to no more than what he/she can earn in his/her lifetime
    1. The shortfall of the current year can be borrowed
    2. The surplus of the current year can be saved

The solution to this problem is a very simple function, but I don’t want to write it here, because I think the solution to this problem should not be the focus of this article, but the meaning of the solution to this problem.

Since rational consumption maximizes this optimization problem, once irrational decision-making leads to decisions that is different from rational decision-making, it is almost certain that the happiness level of this person will decline. Another interpretation of this is that this person has wasted his innate resources. . Of course, the reason why this model can only be used as an amateur analysis is because no one can predict their own needs and happiness in advance, and people themselves are biased, so this model can only be used as a reference.

But no matter what, we still need to know more about ourselves and plan our consumption, salary, and asset investment in advance, so that we can be happier in our future life.

感恩节快到了,伯克利又如同往年一般的进入了多事之秋。最近整个UC的学术工作者都在进行罢工游行,好像整个北美高校圈都知道了这件事,而且国内好像这个话题也上了热搜。

校园照片

但不管如何,学术工作者的工作值得被尊敬。我个人不太了解UC其他Campus的Course Staff处境如何,但起码据我所知Berkeley给本科生开的工资只比加州的最低工资$15.00高了一点点,而且有的时候因为EECS课程经费不足通常要求本科TA在毫无任何加班费的情况下要求本科生加班并工作。

UC的资费问题其实不只是过于驳杂的行政人员占用工资的问题,归根究底还是州立大学无法收到像私立学校一般的高昂学费而导致的。目前UAW(工会联盟)要求的是开除一部分行政人员以达成他们诉求的50%的工资涨幅并招募更多的TA以满足学生需求(和解决TA们Overwork的问题) - 但是这个钱从何而来啊!学校开除这么多行政人员几乎就是一个完全不可能的事情,尤其是在短时间内会造成学校的大规模瘫痪,那学校为何要冒这么大的风险在学生雇员罢工只是有可能学校停摆的情况下选择一个完全百分之百导致学校停摆的选择呢?我不理解。

Reddit Discussion

关于这个问题,大家如果想了解更多的话,欢迎点击这里查看Reddit原帖

UC系统内部的腐败,行政手续的驳杂,和资金不足导致的痛苦深深的扎入到了每个同学的骨髓里,强迫这里的每一个人自力更生,却又紧紧的拥抱,团结在一起。但我深知这样的痛苦只有像Strike这样被表达出来才有意义,才会促进整个系统的良好发展。可是 - 我们大学生真的只是离开了大学生的小孩罢了,谁又希望自己的大学生活被流浪汉,游行,和深夜因教育资源不足的哭泣所完全占据呢。伯克利是一个矛盾的大学,在这里,破烂的街道与昂贵的租金,睡在街角的流浪汉与Haas学生们身上的名牌组成了一切,荒诞但又是真实世界甚至未来世界的一面缩影。

站在学生的立场上,我其实很迷茫。我很庆幸今天有幸可以进入UC这所学校,它自由,包容,我完全没有想象到我可以从一个佐治亚偏僻的小村庄里的高中里,从所有编程技术基本靠看书,看文档自学,最后来到这所学校。来到这所学校,我从来没有想过可以幸运到在伯克利这么多的卷B中被现在的大老板选中加入他的Lab。但同时UC中的各种问题也着实给我带来了痛苦。

不管是Strike还是最近大厂的Layoff都着实给我带来了一丝压力,下面给大家看看这周发生了什么好玩的事情。

伯克利选课实录

↑伯克利选课实录好吧,大三下了还选不到课

摆

↑摆

Author Note: Scroll down for english version text

Hello 家人们,距离上次生活更新已经经过两周啦,这两周我在持续给新进的Lab PhD打工的同时也在生活中经历了许许多多。

首先就是我的美国驾照考过啦!DMV的效率和服务态度真的是低到离谱!但我最近可能也不准备买车(Unless I find a GF…),因为养车实在是太贵啦,最近通胀压力又很大,还是要尽量给爸爸妈妈省钱。

另外就是大三了,我也该有一些感情状态了,可是现在我这个卷成麻花的状态实在是腾不出什么时间来谈恋爱(除非是我特别特别喜欢的人,而且这个人也刚好喜欢我,而且这个人还愿意跟我一起卷……),我真的VERY的焦虑。

然后昨天是保研出结果的一天,朋友圈大佬们真的都把我秀麻了,我的从小学开始一起长大的朋友也成功保研!我非常非常为他感到开心!


Hello y’all, it has been two weeks since the last life update. In the past two weeks, I have experienced a lot in my life while continuing to work for the new Lab’s PhD.

First of all, I have passed the US driver’s license test! The efficiency and service attitude of DMV is really low to absurd! But I may not be ready to buy a car recently (Unless I find a GF…), because it is too expensive to keep a car, and the inflation pressure has been very high recently, therefore I want to try my best to save money for my parents.

In addition, I am a junior, and I should have some relationship conditions, but now I am in a state of working and studying every single day and I really don’t have much time to fall in love (unless it is someone I particularly like, and this person just happens to like me, and this person is willing to spend every single date studying with me…), I am VERY anxious.

Then yesterday was the day when the results of special master entry program without examination (for universities in China) were released(meaning that those people who secured a place in this program don’t need to apply for master after graduation; they just go to the school that they secured a place at). My friends really made me “wow” yesterday. There’s a particular friend who grew up with me together since elementary school also successfully secured a position in this special entry program! I am very, very happy for him!

Author Note: Scroll down for english version text

好久没做近期生活更新啦,最近有点忙,所以就一直拖着没写。

这一个月是刚刚开学的一个月,作为一个大三学生,也该继续努力学习,Pick up from where I left off,努力成为伯克利的卷中卷。

开学的一个月一方面是努力投简历求职,另一方面是申请进Lab。我在求职方面屡屡碰壁:投了很多大型的互联网公司但都没什么回音,只收到了亚麻的一个Automatic SDE Assessment,后续也没有任何面试方面的跟进,我想这是因为从履历上看,我即没有什么优秀的小公司实习的经历,也没有学习太多高阶的算法课吧。

但是在科研(申请Lab方面)我非常幸运的收获了我校一个非常好的Lab的Offer(RAIL Lab @ BAIR),为了这个Lab的面试我被迫读了两篇很新很新的Paper,都是这个Lab大老板的学生发的Paper,一篇是Implicit Q-Learning => 用Expectile Regression + Entropy 去modify增强学习的损失函数达到off-policy learning的效果,另一篇是把很多DL方面大模型揉进机器人里面做Self-Supervised Learning,都很有意思!

进入Lab后很荣幸可以拥有一个很Chill的美女PhD和一个很Chill的帅哥Post-doc来作为我的Supervisor(痴汉脸)!目前我们在做机器狗在增强学习环境中,如何学习在不同地形下快速的Self-Supervise走路,同时保留对之前学习过地形的记忆。

FTC中国那篇文章我有空就更新,但目前看来这个周末都要被学业占满啦~


It’s been a long time since I last updated on my life, and I’ve been busy recently, so I’ve been putting it off.

This month is the first month of school, and as a third-year student, I should continue to study hard, Pick up from where I left off, and strive to become a Berkeley “roll in the roll” - it’s a chinese slang that basically says a person’s super nerdy and studies his ass off.

In the first month of school, on one hand, I worked hard to submit my resume to apply for an internship, and on the other hand, I applied to enter labs. I have repeatedly hit a wall when it comes to job hunting: I have invested in many large Internet companies, but I have no response. I only received an Automatic SDE Assessment from Amazon, and I did not get any follow-up with regard to any interviews. I think this is because from my resume, I don’t have any excellent internship experience in small companies, and I haven’t learned too many advanced algorithm courses @ Berkeley.

But in scientific research (applying for labs), I was very fortunate to get an offer from a very good Lab in our school (RAIL Lab @ BAIR). For the lab interview, I was forced to read two very new papers, both of which are by students of the faculty(Sergey Levine) of the Lab. One is Implicit Q-Learning => Use Expectile Regression + Entropy to modify the loss function of reinforcement learning to off- The effect of policy learning, another article is Making many large DL models into robots for Self-Supervised Learning, I found both of them very interesting!

After entering the Lab, I am honored to have a very chill & beautiful PhD and a very chill & handsome Post-doc as my Supervisor! At present, we are working on how the robot dog can learn to walk in a self-supervised sertting quickly under different terrains in the reinforcement learning environment, while retaining the memory of the previously learned terrain.

I will update the article on FTC China when I have time. However, it seems that this weekend will be full of schoolwork~

在开始之前

一些必要的背景知识,我在2020年12月开始陆续参与中国FTC社群的志愿活动,一直做到2021年暑假前我准备离开中国前往美国上伯克利大二。这段时间里我经历过1场SkyStone天际之石和2场Ultimate Goal最终目标这两个赛季的比赛。

免责声明:本篇文章是为了描述一些我在这段时间内担任FTC志愿者所看到的部分问题与症结,与目前的FTC组委会无关。目前中国FRC组委会已经在2021-2022年赛季(也就是我离开的后面一个赛季)正式从北京西觅亚公司手中接手此比赛的办赛权。

免责声明2:本文章结合事实和本人的主观推导,如果感到冒犯可以在下方评论区提出异议,本作者根据心情进行修改。

注意:本人作为全栈工程师多年,此网页为全局静态网页,同时CloudFlare防火墙实时防护,保留WAF日志,攻击前请三思。

契机

2020年3月,因为疫情原因春假结束的我被高中逼着买了回国的机票,运气也非常好地赶在了五个一政策生效前在上海落地,然后经历了14天的隔离后成功回家。由于美国比赛进度对比中国比较提前,我早在2020年2月就与队伍一同完成了在佐治亚州的Skystone Season州赛。这一年同时也是我的最后一任赛期(高中毕业了),我们队伍由于机械结构不稳定,作为第一位备选,与进入世界赛的名额失之交臂。但是作为队长我没有感到太强的遗憾(肯定还是有一点遗憾的),因为这个赛季我们队伍在赛事前期因为良好的自动程序(我写的,叉腰)挺进过北美赛事排名的第六名。(而且我还进了伯克利,再次叉腰)

所以我从4月隔离完回家以后就开始不太努力读书了,毕竟大学Offer拿到了,而且上网课其实也不需要太用功,于是我干什么了呢?我去找了网球教练和舞室,正式奠定了我大学兴趣爱好的基础。一切都非常顺利。

但是我对FIRST这个组织真心爱的深沉,看了一下北京西觅亚给FTC建的官网,好家伙虽然不如北美吧但是真的还挺不错的!听闻12月上海有当年唯一一场的SkyStone活动于是我就报名啦!这是我第一次跟

未完待续

最近惊闻新浪博客已经不能用啦,于是我真的去谷歌上搜索了一下我之前写过的博客 - 他们还真的是把这个服务给关了呀,新浪博客作为之前一个非常优秀的博客平台(静态链接,静态渲染),真的是有大规模的人使用过这个平台的,这一关之下好多人的数据就没有了呀!

回顾我之前的写作生涯,我最早正式的开始写博客应该是可以追溯到初中时期,那个时候由于一些评奖和领导的要求需要给班级写博客,我想我的正式写作生涯也是从那个时候开始的吧。其实直到今日我也会时不时的回去看一眼之前写的博客(可惜现在看不到啦),顺便看看我小时候长啥样(毕竟我现在除了秃就是帅是吧)。回望当时的写作其实我的措辞都不太好,感觉文笔不太连贯(当然现在你们感觉我写作文笔不太连贯是因为我一般写博客都是找有时间的时候写,但是因为太卷了所以写博客的时间都是半夜凌晨即将需要去睡觉的时间),但是我在不断地写作过程中慢慢练好了文笔,具体是怎么练好的呢?是通过给形随意动这个公众号平台撰写很多原创的技术方面的推文。

形随意动这个公众号是我高中时期工作的重心之一,我花了很多时间去参照网上的纯英文资料然后尝试翻译并整合到一篇篇的原创推文中,当然这个频道最后还是没有火起来,我想最大的原因不是因为我写的有多烂也不是我运气不好,而是微信的推广方式取决于朋友们的转发数量,平常你读科技文章会转发吗?我想很少吧!所以这个账号久而久之就凉了,我也被迫把它委托在了微软小冰的文章自动导入平台里面。

但是回望过去,形随意动公众号的经历以及形随意动B站账号写稿子的经历极大程度的帮助了我现在的写作水平,当然不可否认一些伯克利的文科课例如English R1B(英语写作课Part B), SEASIAN R5A(东南亚洲学习, 主要学的是印度神话和文学, 同时也是英语写作课Part A), 以及GWS 50AC(美国文化中的性别)这几节课也对我的批判性思维和写作功底有着卓越的贡献。

不得不说乔布斯说的”You can’t connect the dots looking forward, you can only connect them looking backward”这句话 - “站在人生的十字路口,向自己未来的前方看时你无法连接所有你学过的技能点,你只有在从你的现在回望过去才能发现他们之间的联系”这句话,真的是十分正确的。

跟上几篇文章里提到的内容一样,这个暑假我前往新加坡参加了一个学校官方的实习项目。除了周一到周四需要在学校给我们匹配的公司实习之外呢,我们还必须在周五去新加坡国立大学(NUS)上一节新加坡历史课(令人无语),然后再在伯克利上一节UGBA C155的领导课。

点击这里查看我的课上笔记(英文)

我平常是很讨厌一些商学院的课程的,因为我个人认为很多商学院的课程都是没有科学依据的而且并不是适用于所有的公司的,比如在我实习的公司里面就不太适用(亚洲许多公司都缺少一些跟老板沟通他们自己可能有不足的渠道,另外就是亚洲的上下层级文化决定了领导有更大的可能是一个傲慢的人)。另外一部分商学院教课的问题就是他们教的东西都是一些假大空,听了觉得“奥好像没有问题”,但你自己想想,你会觉得“欸但是这不就是普通生活中的小常识吗,这简简单单试个错就能得到的道理为什么我需要听你说?”并且你实际去运用他们的时候,会发现这些道理好像没有办法很好的被使用(因为人跟人的交互是不可预测的)。

麦肯锡7S模型

尽管如此,这节课我总体来说还是比较享受的。为什么呢?因为教课的人很会教。尽管这节课教的都是一些简单的沟通技巧(比如如何倾听别人啊,尤其是在听别人讲话的时候脑子里面不要直接想着反驳别人,先听听别人怎么说)和设计公司/团队组织结构的技巧,但是在教学的时候这两个Professor都用了很多脚踏实地的例子,比如说一个公司里面用了这个策略啦,或者你生活中出现什么情况可以用这个策略啦,有了脚踏实地的例子我的脑子就可以想象这样的情景然后主观的推断使用这样的策略的后果是什么。我觉得这个也是美式教育教到我的一点吧,就是老师说的话不能全信,所以学所有课的时候我一般会在脑子里面自己过一遍老师教的东西,只有推论正确了我才会接受,不然我会一直卡着这个Topic不去接受它的知识点,这其中甚至包括了理科,认识我的朋友们(尤其是我的爹们)应该经常被我请教一些理科(CS和数学)方面的证明问题和概念上的Intuition冲突问题。因为我这个特质,其实我并没有完全接受UGBA C155这门课的所有观点。我想这个特质尽管让我多花了时间在评判老师教导的内容上,但是帮助我更加精简和强化了我学习到的内容,所以说批判性思维是真的有用的。

倾听

最后的最后,我真的是感觉我们人类所有的知识都是为了找到更好的办法给整个宇宙减少熵排放,科学是为了让我们做事情的时候更有效率,从而使用更少的能源和精力去实现生产,生活,等等。文科是为了让我们的精神生活更加健康,从而减少内耗,让我们更有效率的进行文化发展,生产,生活,等等。

最后,我想说一下最近世界真的不太太平,气候问题和领土争端层出不穷,愿世界和平,也希望我们可以跨过气候难关。

2022年6月3日北美太平洋时间,我作为一个准大三学生踏上了前往新加坡的旅程。作为一个不需要工资的免费实习生,我在新加坡一个叫OneRHT的公司实习了大约2个月(2022-6-8 to 2022-7-28)。

负责与我们联络的是我们公司的老板,他的履历很离谱,是联合国UNGC的Vice President of the Board, 同时在例如复旦大学,新加坡国立大学,MIT,剑桥,UBC,牛津,哈佛读了一砣子Advacement Program。所以我们入职的第一天,就直接介绍了一下我们后面两个月需要做的东西:我的项目是需要从零开始设计并写出一个类似Alphasights和GLG的咨询平台。我的朋友们则一个需要建立一个加速器(Accelerator)项目,另一个需要对新加坡对医学这个板块的律法进行一些深入研究。

于是从第二天开始我就与我的小伙伴们开开心心的坐着MRT(地铁)上班啦,由于我负责的这个项目不仅要设计还需要真的写东西出来,所以我第一天就开始了紧张的准备工作。要设计这个平台的第一步就是先构思商业模式啦,所以第一周我的工作就是做了一些PPT来给(糊弄)老板看。老板对我构思出的商业模式点头称赞,并认为这真的可以构建出一个Competitive Advantage(狗头)。

然后就是设计营销方案和系统架构了,这两项东西也是拿PPT和DrawIO画出来的系统架构图糊弄一下,做的越庞大看起来就越酷。

最后就是一些编程的活,这个时间花的比较长,一方面是因为我对于Rust这个语言比较陌生另一方面就是因为与老板的沟通不是很顺利。老板不知道到底是因为什么,尽管我跟我的朋友们签了NDA以后很多信息还是不会给到我们,导致我们在对我们项目进行设计的时候进展非常缓慢也没有办法做出合理的假设。

另外这次实习除了负责手上的项目外,我们还有个经理会带我们去参加一些公司股东年会(AGM)的第三方公平审计工作。

这次实习得到了什么良好的训练或者说是对自己有什么帮助吗?我想除了对第三方审计这个职责和股东年会的运行方式有所了解以外,并没有得到什么个人层面上的成长(除了我自己花了一些时间了解了一下Rust这个语言以外)。所以说还是建议大家在选择实习的时候要关注老板,然后如果老板不行的话可以适当的摆烂一些。

在上次写了一篇关于我首次学习Rust的文章后,我从北美辗转来到了新加坡,并在这个新的城市中开启了我的实习之旅。

尽管本次实习是在一个非互联网企业,但是得益于我老板是NUS的CS硕士,我除了需要帮助我们公司完成第三方企业AGM中立审查的任务以及设计一些项目的商业策划之外,还揽到了一些Web开发+AI技术方面的项目。

然后由于目前我这个公司比较chill,我也想在做我平常会做的事情以外学习一些新的东西,所以把AI逻辑和后端逻辑拆开了。后端将会由Rust编写,而AI逻辑将由Python进行,这是由于:

  1. 使用Rust编写后端可以承载大规模的API并发并减少延时
  2. 使用Python编写AI逻辑可以方便的进行热更新和调试(Python Research => Python Deploy),在不损失太多性能的情况下减少许多运维(Python Research 转 AI通用模型 => 然后用MLOps 高性能C++/Rust推理)的成本

而Rust与Python之间使用Redis进行队列的Push和Pull. Python处理完成后Rust会有一个独立的线程跑在线程池中,然后将处理完的数据做持久化保存(MongoDB)。

目前来说,这个系统运行还算比较顺畅,每个API Call平均20-30ms内都可以完成回复。

因为这篇文章是谈论Rust初见后嘛,所以我还是想聊一聊Rust的使用体验。


目前来说,我觉得用Rust写HTTP服务器真的比C++舒服很多,而且这是在没有损失很多性能的情况下
首先Rust支持async/await特性,而且tokio这个库自带线程池,它直接按照逻辑处理器数量自动初始化线程池然后自动做IO的调度,真的很舒服。
另外Rusthttp Request/Response生态和服务器的生态做的真的很好,有很多框架可以选择,而且编译的时候就一个命令cargo build就可以了,都不用自己写CMake文件。
除了这些以外,Rust跟C++比最大的优点就是Macro这个东西, Serde这个库的序列化以及bsondoc! macro的支持都让我少写了非常多非常多的代码,而且这个对比DartAnnotation Generator来说不需要自己手动写Connector。

对对,反正大概就是这样,总之就是Rust写服务端可能雀石没有NodeJS那么爽,但是我觉得可能爽度有NodeJS的75%,相比之下C++的体验就是NodeJS的5%。如果加上性能考量的话,那我觉得Rust真的是太适合做大规模的高性能API服务器了。大家都给我用Rust!

Rust是Mozilla基金会提出的新一代内存安全的C++和C的替代品,可以用来制造操作系统内核,后端应用程序,跨平台应用程序等等,包含丰富的std支持库,内存安全特性,和爆发式增长的生态。

其实知道Rust语言是很久以前的事情了,可以追溯到2019年我还在写EasyCrossPlatform这个C++库的时候,当时我觉得C++的语法糖真的很酷炫,很优雅,但是非常痛苦,在构建问题上花费了太多时间。

C++最让人诟病的几点是:

  1. 指针释放问题
    1. 可能会造成内存泄露,多次释放指针导致权限问题的Segmentation Fault
    2. 被弱指针和所有权指针部分解决,但是C++的原生指针历史遗留问题注定了这个内存管理问题的存在。
  2. 多进程/协程支持非常有限
    1. 多进程std支持在C++11标准中提出,现在基本所有编译器都支持
    2. 但问题是指针问题导致的两个内存同时写可能需要调用互斥锁(mutex)或者atomic标准库,没有更优雅的解决方式,如果一个进程使用了一个变量,很难保持对其他进程使用情况的追踪(需要程序员自己keep track)。
  3. std标准推进缓慢
    1. 乃至于2015年立项的Networking Draft到了2022年都没有进入C++23标准。
    2. 非常离谱,强烈阻碍了C++生态的发展
  4. 没有统一的包管理
    1. 致命!装一个库可能得下3-4个包管理软件例如make,cmake,vcpkg,等等
    2. 有的时候甚至不知道动态链接的库的头文件该怎么找

下面我将叙述一下rust是怎么一个个解决这些问题的

首先,Rust引进了一整套关于C++内存管理方面痛点的解决方案(当然同时也制造了一些其他的痛点),其中最重要的就是所有权概念。

我们直接来看代码

在C++中,如果我们创建一个字符串类型(std::string)

1
2
3
4
5
6
7
8
9
10
11
include <string>
include <iostream>

using namespace std;

int main(int argc, char** args){
string a = "我爱秋风";
string &b = a;
cout << a << endl;
cout << b << endl;
}

这套代码将在控制台中输出

1
2
我爱秋风
我爱秋风

让我们用Rust写出同样的逻辑

1
2
3
4
5
6
7
8
fn main(){
let a = String::from("我爱秋风");
let b = a;
//由于String类型存于堆(Heap)中,不继承Copy Trait (可以参照Rust官方手册关于Copy Trait的内容),Rust会默认传引用(类似于Java对Object的引用传递)而不是像C++调用assign operator
//如果想要复制内容, 可以设置b 为 a.clone()
println!("{}",a);
println!("{}",b);
}

而这段代码将会报编译时错误(Compile-Time Error), 为什么呢?因为Rust的所有权机制
这个机制看起来好像很傻,因为Java不会爆出这种错误,整个代码都可以顺畅的运行,但Rust就不可以。
但这是因为Rust是实时语言,没有垃圾收集器(GC),而Java有GC,程序每运行几秒就会有几毫秒或者几微秒的GC。GC导致Java在使用栈空间的时候不需要做任何内存释放工作,因为每次GC Sweep都会自动做引用计数并收集垃圾,而RustC++这类实时语言需要在某个变量不需要用了以后立即负责释放掉内存的空间。

这样做的好处和坏处分别是什么呢?

  1. 有了GC可以大范围的节省开发成本
    1. 程序员不再需要管理内存释放
  2. 但是GC对于一些对于实时性要求高的任务可能不太适合,因为运行时什么时候进行GC Sweep是不太能预测的。
    1. 火箭发射 / 手术或者工业界的控制程序 / …

C++和Rust都是做实时内存释放,但是C++要求程序员手动释放内存,而Rust通过变量作用域和所有权这两大神器可以帮助程序员自动释放内存。
这样一方面可以帮助简化单线程内存方面的管理,多线程方面,程序员也可以很清楚的区分哪些变量只能被哪些线程来访问。
但代价是什么呢?

  1. 程序员需要管理变量的作用域
    1. Rust对于引用,自动引用追踪的管理及其严格,这要求程序员在编写时时刻想着引用,所有权,和作用域的概念,我这个C++和61C脑子一时半会还转不过来(主要是C++太不安全了写惯了哈哈哈)
    2. 并且因为Halting Problem(一个CS领域非常有名的问题),明明是安全的内存使用缺无法在编译时检测是否安全,Rust将默认弹出错误,这时可以通过使用一个特殊类型来套过编译时检查转而使用运行时检查。

说了那么多,其实Rust既有优点又有缺点,但是最近由于Networking标准在C++23上迟迟得不到讨论我实在是对这个傻逼语言失望了。Cargo这个集中的包管理软件又深得我心,所以总的来说Rust我个人的态度还是很喜欢的(尤其是它绝大多数的语法与C++和Dart特别像)。

下面我的计划应该是用Rust试着写一下OpenAPI的后端(Go语法实在是爱不起来,没有OOP…)。