A Wand Makes Your Ideas Come True

0%

本系列的上一篇文章中,我们实战了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这些概念是如何演进的。

阅读全文 »

本文记录了笔者在工作中遇到一个真实场景,在堆内存超过16G,堆对象过亿情况下,以真实案例带领读者感受不同参数设置情况下Go的GC性能变化。

阅读全文 »