A Wand Makes Your Ideas Come True

0%

这篇博客是我受邀在清华大学开源操作系统训练营活动中讲授相关入门知识的讲义。本讲义对应的视频课程可以在清华大学开源操作系统社区在线课程中找到,访问链接为:https://os2edu.cn/course/106。

本讲义的视频回放:

清华大学开源操作系统训练营活动的相关链接如下:

阅读本讲义之前必须要在手头准备好的4个文档:

阅读全文 »

本系列的上一篇文章中,我们实战了proc_macro_workshop项目的seq题目。前面三篇文章已经给大家介绍过了rust三种过程宏里面的两种,也就是派生式过程宏和函数式过程宏,这一次我们要介绍的是最后一种,也就是属性样式的过程宏。

好了,不废话了,准备好一台电脑,开始我们的第四个挑战任务sorted

阅读全文 »

本篇文章是受Databend团队邀请,作为《Rust培养提高计划》公开课程的讲稿而书写的。

课程相关录像可以在Databend的Bilibili账号【Databend】找到
讲师本人的微信公众号是:【极客幼稚园】
讲师本人的个人博客是: http://blog.ideawand.com
讲师本人的B站账号是: 【爆米花胡了】(注意胡是胡萝卜的胡) https://space.bilibili.com/500416539

分享背景:

在我所加入的各种Rust讨论群中,大家经常问的一个直击灵魂的问题就是:你们在生产环境中用Rust了吗?

的确,现在掌握Rust的人还相对较少,很多学习Rust的同学可能是出于自己的兴趣爱好,实际并无法在工作中有机会实际使用。我本人也是在两年前接触的Rust,中间一直断断续续地学习,但大部分停留在看书、看教程、看文档、看别人吐槽的阶段,自己写过的代码也都是不超过几百行的小Demo。虽然后来在B站做过一系列《Rust过程宏实战系列教程》,那也是自己学习Rust的副产品,纸上谈兵,和实际工作没有任何关系。直到三个月前,我才下定决心要在生产环境中实战一把。

本次分享希望可以给大家提供一个思路,通过替换系统中最小模块的方式,逐步用Rust来“蚕食”现有系统,实现逐步替换,并逐步积累在生产环境中使用Rust的经验。

通过本次分享,我希望可以:

  • 减弱大家在生产环境中引入Rust的恐惧感,如果你还在犹豫、观望,不妨get your hands dirty first, 然后大家就可以放开了去搞了。
  • 了解Rust为什么比一些常用的语言(如Golang、Java等)更适合开发通用二进制库
  • 了解一下Rust开发C-FFI库的方法,并介绍一些个人实际使用中遇到的问题(也可能是我太菜)
  • 了解一下Golang中Cgo的使用
  • 有很多朋友在纠结Golang和Rust选哪个,通过本次分享,加深对两个语言的了解,为大家做选择多一些参考
阅读全文 »

本系列的上一篇文章中,我们实战了proc_macro_workshop项目的builder题目。并且介绍了proc_macro_workshop这个项目的概况,如果您是第一次阅读本系列文章,对proc_macro_workshop项目的结构还是不很熟悉的话,可以先阅读一下上一篇文章。

好了,不废话了,准备好一台电脑,开始我们的第二个挑战任务debug

阅读全文 »

上一期中,我们介绍了Rust过程宏开发的基础流程,从本期开始,我们以戴维·托尔奈(David Tolnay,也就是synquote这两个库的作者)的教学项目proc-macro-workshop出发,带领大家实战几个Rust过程宏的编写。

proc-macro-workshop是一个包含5个过程宏的“解题游戏”,每一个过程宏都是有实际应用价值的案例,通过一系列由简到繁的测试用例,指导你去完成每一个过程宏的开发,而我们要做的,就是编写代码,像闯关游戏一样依次通过每一个测试用例,在这个过程中,我们会学到不同类型的过程宏的开发方法。

好了,不废话了,准备好一台电脑,我们从第一个过程宏挑战任务builder开始,每一关对应的视频教程我也放在下面了,点击【阅读原文】就可以看到所有的视频教程。

序言视频版:

阅读全文 »

如果想用Rust去开发大型项目,特别是框架级别的项目,那么Rust的过程宏(proc-macro)机制肯定是一个必须掌握的技能。极客幼稚园公众号从本期开始,将进行一个系列连载,以文字 + 视频的形式,介绍过程宏的相关知识点,并通过几个项目实战,手把手书写几种不同类型的过程宏。我的视频将会上传至B站,文字版本与视频版本内容会大致相符,但文字版本对原理的讲解会更加清晰,大家看到的是一个最终【正确】的版本,而视频版本对于编写和调试过程的展示更加友好,大家可以看到编写一个过程宏的整个过程中是如何一步步阅读文档、踩坑的。另外,这一系列文章也是我本人近期在学习过程宏的过程中边学边写的,可能有很多野路子,如果大家有更好的实现方式或者编码方式,欢迎与我交流讨论。

视频教程在这里,完整文字版本请点击视频下方的【阅读原文】

阅读全文 »

先写个算是开篇语的东西吧。从去年起就开始关注rustpython这个项目,也一直想写一系列长篇文章来深入分析这个项目。这样一直拖了差不多一年了,总想着先把整个项目看完再书写一套有体系有章法的文章,但事实证明碎片的时间还是不足以让我把整个项目看完。因此,在今天决定,不管什么体系了,就按照随笔来写吧,看到啥写啥。正好之前因为追求高质量的文章,这个博客之前几个月才更新一次,所以这也算是一个尝试,当然,龟速更新的文章我也会继续写的。如果你看到这系列文章感觉还有点意思,可以把我的网站加收藏哈~ http://blog.ideawand.com 。我还有一个微信公众号叫做【极客幼稚园】,大家也可以关注一下,这样有什么更新大家也可以看到。

本系列随笔的第一篇,基本算是随机挑选的,我们来看看个python中__getattribute__这个魔术方法在rustpython中有关的实现吧。

阅读全文 »

在上一篇文章中,我们从历史发展的角度介绍了Console、Terminal、TTY这些概念,并且给大家展示了各种上古时代的显示设备,特别是使用印章和打印纸形式作为输出的设备。这一篇文章中,我们将重点聊聊有了荧光显示器之后,输出设备与操作系统之间的关系,例如如何显示彩色的文字。这是本系列的第二篇文章,后续应该还会有几篇文章。欢迎大家关注我的公众号【极客幼稚园】来获取最新的推送,当然也可以访问我的个人主页http://blog.ideawand.com。

阅读全文 »

Terminal(终端)和Console(控制台)这两个词,在使用Linux操作系统或者查阅资料的时候,经常会看到。但它们究竟是什么呢?笔者最近在捣鼓一台Linux系统的笔记本,并对其做键盘键位的映射,使其能够符合Mac操作系统下的按键习惯,在这个过程中,顺道深入了解了一下Terminal和Console的区别。关于键位映射,我会在后面再写一系列文章来介绍背后的原理以及实战,这里先卖个关子。本篇文章主要带领大家回顾一下计算机的发展历史,随着历史的发展,看看Terminal、Console这些概念是如何演进的。

阅读全文 »