自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(259)
  • 资源 (4)
  • 收藏
  • 关注

原创 ruby049源码分析_string.c05.txt

ruby049源码分析_string.c05.txt今天有个头痛的玩意。matz实现了类似shell的tr命令。如echo "1234" | tr '12' 'ab'结果为:"ab34"但matZ先来一个结构体。struct tr { int last, max; char *p, *pend;} trsrc, trrepl;这什么玩意儿呀。我有些读不下去了。现在想来,还是年轻时脑袋灵活些。也许,我想,应该在大学中,当学生学完C,和数据结构这两门课程后,就应该鼓励他们读源...

2020-10-15 10:18:08 153

原创 ruby049_string.c分析03

ruby049_string.c分析03static VALUEFstr_rindex(str, args) struct RString *str; VALUE args;{ struct RString *sub; VALUE initpos; int pos, len; char *s, *sbeg, *t; if (rb_scan_args(args, "11", &sub, &initpos) == 2) { ...

2020-10-15 09:53:26 137

原创 ruby049_string.c源码分析2

今天接着分析ruby049中string.c这个源程序,刚才忽然想,如果我教学生学软件,我想,应该把ruby049的源码当成作业,让学生课余学着去读源码,并进行交流。我现在才开始读源码,是不是太晚了些。不多想了,开始正题。static charstr_next(s) char *s;{ char c = *s; /* control code */ if (c < ' ') return 0; /* numerics */ if ('0...

2020-10-15 09:03:45 147

原创 ruby049源码分析_string.c文件

ruby049源码分析_string.c文件昨天写了array.c的文件中各函数的解读,下班后,在床上就进行回顾。发现真正写一遍后,自己思维更清楚了。就是说,象一本书《59秒》所言,倾说无益,书写才有效果。把知识点自己写下来,自己理解得更深入了。所以今天接着来分析string.c文件,因为字符串我使用得也较多,算是稍微熟悉一些。一、初始化函数先看结构体struct RString { struct RBasic basic; UINT len; char *ptr;...

2020-10-14 08:49:38 154

原创 gawk1.01源码分析08

gawk1.01源码分析08还有一个小时就要干活了。一直在断断续续的读gawk101的源码,我原来一个同事,特别会写awk脚本,我比不上他。我想,我要超过他,就只能读源码了。在项目组干活时,有一天,我忽然想读开源的源码,我不太会搜索,请项目经理帮我找开源软件,他帮我找到了sed的源码,当时真时读得想吐,其中遇到getopt函数,根本就看不懂。于是我放弃了。后来,自己就找到了gawk101的源码。因为我对awk熟悉一些。我比较喜欢看书,因为perl的作者说,他是因为遇到一个问题,用awk解决不了,于是

2020-10-13 10:15:34 130 1

原创 ruby049源码解读之array.c文件

ruby049源码解读之array.c文件昨天半夜睡不着,就起床写了一博文,写完后,继续睡觉。感觉还是有些迷糊。晚上还是要好好睡才是。今天我接着说说array.c文件。我是在linux下读程序,但写文字还是在windows下。那个ubuntu下五笔输入法没弄好。这个程序中最末尾是Init_Array(){ C_Array = rb_define_class("Array", C_Object); rb_include_module(C_Array, M_Enumerable);...

2020-10-13 08:59:58 197

原创 浅谈如何阅读开源软件的源码----谈谈我读ruby049源码的体会

浅谈如何阅读开源软件的源码----谈谈我读ruby049源码的体会很长一段时间没有读源码,也没有更新csdn,但所幸的是,还是在断断续续的读。有时在网上找资料,发现,很少。有时,找来找去,还是只看到自己写的那些博客。而自己写的博客内容是很浅薄的。于是,心想,或许我来补充完整吧。网上读源码的人少,我来当第一人,把大家都带动起来。今天重点谈谈自己的一些思路。第一、用成长型思维读源码。前段时间看书,发现思维模式很重要,有人用成长型思维看问题,有人用固定型思维看问题。而读源码时,个人体会是,第一眼看到从官网上

2020-10-13 04:02:48 1298 1

原创 学着折腾树莓pi和51单片机

学着折腾树莓pi和51单片机树莓pi真是一个好玩意儿。基本上的功能都能实现,只是有些python的模块装不上,因为没有arm支持。像百度网盘也没有arm版本。但折腾起来很好玩。我安装了ssh,可以远程登陆,这样,树莓pi不用接显示器,通过笔记本连接上,然后就可以操作树莓pi,另外,如果想要图形界面,还可以安装vnc,真是很好玩的。我还试着弄一个samba,sftp,来把文件转来转去。另外,我原来买的单片机调试程序不好,于是买了和书配套的单片机,卖家送了光盘,把上面的程序一个一个调试,真是很爽。可惜.

2020-09-25 18:55:32 379

原创 读简单的源码1-6.c

读简单的源码1-6.c最近还是经常读gawk1.01,grep的代码,感觉grep的代码还是比较好读,毕竟比较简单,如果结合《精通正则表达式》来读,就基本上能理解了。但gawk就复杂了,要懂bison,如果不懂这个,你C语言来通,还是不能串起来。所以要补充编译原理的知识。最近还想读linux0.11的源码。感觉还是要把汇编搞通,才是。于是,手头就找些简单的代码来读。现在感觉,如果不看到代码,心里就有些慌。使用软件时,也希望能是开源的。这样,就更有控制的感觉。今天读了一段代码。感觉很是难懂。关键是其

2020-09-25 18:47:57 89

原创 coreutils4.5源码expand.c分析

coreutils4.5源码expand.c分析感觉这个代码真复杂。本来以为很简单的一个命令,就是把tab转为空格。但你看。echo -e "ab\td\tx" | ./expand -t 2 | od -cb0000000 a b d x \n 141 142 040 040 144 040 170 0120000010第二个tab只转为了1个空格。我以为是我看错了,又执行几次:echo -e "ab\td\tx" | ./expa...

2020-09-05 18:00:23 170

原创 coreutils4.5.1源码阅读读后感20200905

coreutils4.5.1源码阅读读后感20200905先把源码的长度进行排序,wc -l *.c | sort -n > source.txt并写到一个文件中,如图: 2 ls-dir.c 2 ls-ls.c 2 ls-vdir.c 7 md5.c 7 sha1sum.c 71 false.c 71 true.c 74 sync.c 82 pwd.c读代码时,打开这个文件,从长度最小的依次向...

2020-09-05 11:38:12 124

原创 coreutils4.5源码expr.c分析——漂亮的代码

coreutils4.5源码expr.c分析——漂亮的代码有一本书叫《漂亮的代码》,其中选择了一些写得漂亮的代码,重点加以分析,如只用30多行程序实现正则表达式。今天反复读expr.c,感觉这个代码写得真漂亮。比如:static char *inttostr (intmax_t i, char buf[INT_STRLEN_BOUND (intmax_t) + 1]){ uintmax_t ui = i; char *p = buf + INT_STRLEN_BOUND (intmax_t)..

2020-09-04 16:45:21 207

原创 coreutils4.5源码读后感20200904

coreutils4.5源码读后感20200904为了在vim下写代码,有时写好代码后,要保存,退出编辑器,回到命令窗口,再编译执行。为了不退出vim进行编译,我在网上找程序员vim配置文件,发现一个高人,总结了如下三句话:git clone https://github.com/chxuan/vimplus.git ~/.vimpluscd ~/.vimplus./install.sh真是超级爽。不过,如果要么直接在linux下读,要么在windows下读。如果你在win10下,进入ubuntu

2020-09-04 16:33:14 134

原创 coreutils4.5源码expr.c读后感20200903

coreutils4.5源码expr.c读后感20200903很长一段时间没有写博客了。因为很久一段时间没有读源码了。这两天,又开始读。感觉还是要从基础的读起,一下子读ruby0.49等编程语言的源码,哪怕是awk1.01的源码,都太复杂了。饭还是要一口一口的吃。原来还想用平板看代码,现在发现,还是要用笔记本看,因为读代码时,要调试,要编译,再进行测试,根据结果来验证自己的想法是否正确。当然,前期也可以只是看,但效果不是太理想。还是要手摸键盘,一边看,一边改代码,编译后,执行一把,才能看到效果。所以,

2020-09-04 16:31:50 133

原创 《python和pygame游戏开发指南》slidepuzzle.py源码分析

《python和pygame游戏开发指南》slidepuzzle.py源码分析今天看看slidepuzzle游戏,这个游戏象魔方一样,我可玩不来。上次看到一本人工智能书上,有如何求解的例子,用到了启发式算法。没看懂。这个程序呢?很粗暴,先把棋盘打乱,把移动的每一步记下来,要复原时,进行反向操作。根本就没有用人工智能。程序源码大致功能就是这样。当然具体实现有些麻烦。我有些不想看下去。为此,就打开电脑,用vim看,碰到子程序,就跳进去看。看代码,通过书来看,还真是不行。我把源代码放后面。# Slid

2020-07-13 16:58:57 365

原创 井字棋游戏tictactoe.py源码分析

井字棋游戏tictactoe.py源码分析现在的孩子喜欢玩游戏,今后我想,这样教育孩子,先让他在地上画线,然后用石头和他玩井子棋。当他有兴趣后,再提出和电脑玩井子棋。等他下赢电脑后,或者被电脑打败后,再提问,电脑是如何下棋的,它是如何想的?顺便再教他读源码,告诉他编程。因此,今天我再谈谈这个程序的逻辑。这个程序在书中也有解读,但我更喜欢自己去看源码。实在看不明白时,再去读作者的解释。我喜欢从程序执行的角度来分析程序的源码。这是一个对抗的游戏,作者是如何实现的呢?开始觉得很神奇,了解后,就觉得简单了

2020-07-12 19:15:39 301

原创 《python和pygame游戏开发指南》之memorypuzzle.py分析

《python和pygame游戏开发指南》之memorypuzzle.py分析前段时间学习C语言,感觉那玩意儿,太底层了。最近,感觉孩子们都爱玩游戏,因此,在想,要吸引他们的注意力,可能就要让他们玩游戏。因此,想,如何用电脑做游戏呢,为此,就用python,象那些前辈用basic做游戏一样,先让他们玩python写的小游戏,成功的吸引他们的兴趣,再慢慢的教他们python编程。这样慢慢的吸引他们走上正轨。如是,我就开始学python.我受了《程序员的呐喊》作者的影响,一直不太喜欢python,非常喜欢

2020-07-12 18:55:28 302

原创 《数据结构》线性表伪码变代码

《数据结构》线性表伪码变代码前几天读ruby049中,array.c时,发现和数据结构课本上的实现很像。于是今天就把严教授课本上的伪码输入到计算机中,进行了调试。代码如下:#define LIST_INIT_SIZE 100#define LISTINCE 10#include<stdio.h>#include<stdlib.h>typedef int El...

2020-03-24 11:32:08 376

原创 oz grep源码分析

oz grep源码分析今天在笔记本上折腾ubuntu18,真是很好玩。配置低的本上,装ubuntu,真划算。原来4G跑win10总是慢得不行,现在跑linux,感觉还是很快的。我在本子上读regex.c这个文件,一个地方卡住了。 for (p = pat; *p; p++) { lp = mp; switch(*p) { case...

2020-03-23 13:06:16 188

原创 分享我修改后的一些源码

分享我修改后的一些源码我有时觉得现在的时代真好。有电脑可以用,有书可以读。而且有那么多的开源代码可以供自己研究。我想,或许,这就是我们真正的天堂了。我原来学习时,偏重于读书,很少写代码,导致自己水平一直不高,现在我改变思路,以读源码为主,以写代码为辅助,再辅以之读书,感觉水平在慢慢上升。因此,我把自己觉得好的代码,就上传上去,让后来的人有一些帮助。因为有的人,可能没想过读源码,因为在win1...

2020-03-23 08:37:01 362

原创 如何在大脑中模拟代码运行

如何在大脑中模拟代码运行昨天,终于在笔记本上安装好了ubuntu,这次没有使用虚拟机。这样,可以在ubuntu中使用图形界面相关功能了。在win10下通过wsl使用ubuntu,不能使用图形界面,感觉功能很受限。心里一想起这事,就觉得很兴奋。但睡在床上,不想起床,于是就把自己读过的代码在大脑中进行回忆。我比较喜欢的是oz写的grep程序,因为有一本书《精通正则表达式》,这本书,讲得很透,我...

2020-03-23 07:53:31 504

原创 安装ubuntu18

安装ubuntu18前几天,因为执行编译后的ruby0.49后, 一旦执行,就报coredump错误,于是就想,因为在win10下,wsl一个ubuntu,因为生成不了core文件,于是想,还是在虚拟机下安装一个完整的ubuntu,再生成coredump文件,这样,调试一下,看到底是哪个地方去错了。我把一万多个警告错误好不容易去掉了。这要不能执行,真不甘心呀。网上有人说,win10下,可以...

2020-03-23 07:52:49 195

原创 《软件随想录》读后感

《软件随想录》读后感我特别喜欢买书,有时找遍京东,居然发现没有新出什么好的计算机书籍。真的。joel说软件这本书,我当时买的时间是2008年前后,现在重印了,于是趁着半价,就又购了一本。我买的是第一本,读起来,很有感触。尤其是谈到C语言字符串的处理,因为我读源码,被字符串处理弄得痛苦无比。像oz的grep中,regex.c中,对正则表达式进行解析,再用解析后的中间代码去进行匹配。总之,我快要被...

2020-03-21 17:30:38 170

原创 ruby.c源码分析

ruby.c源码分析代码编译不了,但生活还是要继续的。我今天就读ruby.c。我快速的浏览了一下文件。因为我执行时./ruby -vhelloworld01[hello] ruby - version 0.49 (18 Jul 94)yang@DESKTOP-V9HS3B6:~/ruby049/ruby$也就是说,-v参数是可以执行的。于是我去找了,并进行了修改。static ch...

2020-03-21 17:02:07 287

原创 读代码时,写测试代码验证自己的想法

读代码时,写测试代码验证自己的想法这两天为了编译ruby0.49,可是费尽了心思。后来,发现,为了再现编译中的错误,最好是自己写测试代码。一。gdbm调试因为ruby049中有一个文件dbm.c,为了编译它,需要安装gdbm。从来没有用过dbm。于是在网上学安装,并在网上找文件,再进行编译,等本地小程序编译后,再修改Makefile,dbm.c#include <unistd.h&...

2020-03-21 16:47:53 146

原创 ruby0.49编译

ruby0.49编译从前天开始,又开始编译ruby0.49,过程痛苦得不想说了。先是,dbm.c的编译。 老是出现找不到lgdbm-compat。我后来,干脆先写测试程序,在网上抄一个。再进行编译。还是报错。于是在网上找资料。于是重新安装gdbm。各种折腾。后来,发现编译时,我把下划线写成了减号。应该这样写 gcc t1.c -lgdbm -lgdbm_compat但安装时,可以这样...

2020-03-21 16:33:14 115

原创 ruby0.49编译问题

ruby0.49编译问题编译时,报了许多错,先解决其中之一。array.c: In function ‘ary_new2’:ruby.h:119:38: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]#define NEWOBJ(obj,type) type *obj = (t...

2020-03-19 21:01:39 156

原创 《程序设计实践》读后感

《程序设计实践》读后感昨天晚上读这本书,重点读数据结构这一章,也许是因为读gawk101源码有一段时间,在重读时,感觉作者写得真好。我重点放在书中的代码上,发现那些代码写得像珍珠一样,真是漂亮。作者写了链表,然后再写一个遍历链表的函数,因为遍历链表时,可能是要打印,可能是要统计元素个数,可能是要找某个元素。作者就把遍历链表时,要干的事用一个函数指针来表示,这个手法太漂亮了。就像schema中...

2020-03-19 20:37:24 201

原创 ruby0.49 array.c源码阅读

ruby0.49 array.c源码阅读我想,应该叫源码阅读,自己随心所欲的读。就像读小说一样。因为我比较喜欢ruby语言,读新版本的,代码量太大,不划算。为此,找了最早版本的。代码量少些。读array.c源码,今天基本上把代码过完了,而且基本都理解了。数组中,好像有三个重要的要素arr->len 存储数组中实际的元素个数,下标从0开始。arr->capa 存储数组中,目前分...

2020-03-19 20:27:29 96

原创 coreutils-4.5.1源码阅读

今天忽然想,我目前的功力去勉强读gawk1.01,ruby049的源码,都有些勉强,真的。因为涉及到编译器的许多知识。为此,还是读简单些的,如coreutils的源码。于是,我打开了coreutils,现在读的时候,我第一选择是想多读些文档,最好是帮助文件,但网上下载,太慢了。于是,忽然想,coreutils文件夹下应该也有的。于是,在doc文件夹下,果然发现了一个,有些长。但也能读。...

2020-03-18 16:17:39 406

原创 oz grep.c源码阅读有感想

oz grep.c源码阅读有感想我最早开始读源码,就是读了有一个人分析oz的grep.c源码的文章,我读了博客后,感觉不过隐,继续下载了oz的源码,自此,就再开始读coreutils等源码。但陆续读代码,其中grep.c中的正则表达式大体逻辑懂了,但其中关于位图的一些操作,一直没有弄明白。昨天,我想,再回过头来读grep.c的源码,开始下载,使用wget总是下载不了。于是,直接使用网页打开,再...

2020-03-18 15:03:04 176

原创 谈谈我读源码的心得

谈谈我读源码的心得为了搜索他人对gnugawk源码的分析成果,在百度上搜索,发现除了我写的一些东西,其它人没有写。于是,就重新操起了笔,自己接着写。我很久没上csdn,密码忘记了,上次登陆没进去。这次居然一次性还记起来了。首先,我想,还是读老版本的代码,性价比高。因为老版本的代码,解决了最核心的问题,从0到1,这是最根本的。但一个问题,老版本的代码编译不了,因为操作系统,编译器都不同了。于是...

2020-03-08 11:31:25 238

原创 gawk1.01源码分析——进行调试2

gawk1.01源码分析——进行调试2今天读代码时,发现我对awk2.c中如何生成解析树的过程还是很模糊。于是想上网搜索资料。发现没有。于是,心想,没人写,那我就再接着写吧。不指望有多少人看,就当成是把自己分析源码的心得、想法进行总结。就当写日记一样。以前读源码,因为编译不了,总是纸上谈兵,但读着读着,发现不行。因为我无法验证我的理解对不对?而且也没有人和我交流,那不行。还是要把程序编译成功...

2020-03-08 10:50:02 137

原创 gawk1.01源码分析——进行调试

gawk1.01源码分析——进行调试因为疫情之故,天天在家。前段天天读小说,后来,觉得,还是读源码,至少让精力有地方发泄。于是,又重新读源码。虽然很久没读,但发现,以前读过,现在再读,还是有种熟悉的感觉。但,发现光读代码,而代码跑不起来,没有感觉。还是要把代码编译,测试,再修改,再编译,执行后看修改是否产生的效果。因此,又捡起原来曾编译通过的代码。再开始。./gawk --version...

2020-03-08 10:27:35 92

原创 gawk awk3.c源码分析

gawk awk3.c源码分析本来昨天要完成的,昨天晚上睡得太早,就忘记了,今天打开电脑,第一件事,就是把这篇完成。这个文件主要完成一些内部函数的定义。先定义了一些外部变量,就于对应awk程序中的NF,FS,RS,NR,FILENAME,OFS,ORS,OFMT之类。inin_vars() 这个函数主要用于完成对NF,FS,RS,NR,FILENAME,OFS,ORS,OFMT变量的...

2019-12-22 08:59:54 160

原创 gawk awk1.c源码分析

gawk awk1.c源码分析今天接着读代码。前段时间迷上读网络小说,用kindle看小说,看得天昏地暗。读小说锻炼了阅读速度。星期五购买了几件打折的衣服。我要好好读代码,把购衣服的价值创造出来。言归正传。我用一台旧的笔记本不上网,只用于在上面写代码。因为上面只有gawk的源码,没有拷coreutils的源码,所以就读gawk的了。今天看的时候,感觉把这篇基本全部看懂了。个别细节也懂了。下...

2019-12-21 19:23:08 245

原创 coreutils5.0 tsort.c源码分析

coreutils5.0 tsort.c源码分析昨天很冷,没有写博客。今天太阳出来,开始写。我很喜欢看sort,comm,seq,diff,uniq之类的程序,因为其中用到一些算法,而且与内核关系不大,不象chown之类,需要调用系统调用,而我能系统调用不熟悉,因此,昨天就打开了tsort.c的源码,但读了一点就看书去了,今天接着看,感觉有点眉目了。因为我没用过tsort程序,于是百度一下...

2019-12-19 10:10:28 269 1

原创 coreutils5.0 paste.c源码分析

coreutils5.0 paste.c源码分析时间过得真快,一晃又到中餐时间了。我要赶紧再写一篇。先说paste的用法。paste -s把每个文件变成一行,再把两个文件合在一起。paste -s -d: a1 a2此时,a1中每一行末尾的\n用:来进行分隔。然后再看相应功能在程序中是如何实现的。先翻到main函数。serial_merge=0在getopt_long中,当分析...

2019-12-17 11:26:52 94

原创 coreutils5.0 unexpand.c源码分析

coreutils5.0 unexpand.c源码分析这个程序没有使用过。今天先测试一下用法。echo " bc haha " | ./unexpand | cat -t发现果然把空格转换成tab键了。而且,还有选项unexpand -a表示除文件行开头的空格转外,文件中间、末尾的空格也转为tabunexpand -t 4把连接的4个空格转为t...

2019-12-17 10:57:12 75

原创 coreutils5.0 split.c源码分析

coreutils5.0 split.c源码分析接着打开split.c,先测试一下用法。a.3的内容如下12345./split -l 3 a.3xaa123xab45看来,按行拆分好理解的。于是,我就找按行拆分的 方法。先从头到尾逛一下,翻到main时,先从getopt分析命令行参数中,找到如何分析-l发现,把行数存储到accum中,并split_type=t...

2019-12-17 10:00:44 98

ruby_049_3.tar.gz

这个代码我改了若干处,加个头文件呀,把以前可变参数函数的调用方法修改呀,甚至64位操作系统和32位操作系统中指针值不同等等, 到现在,这个程序也跑不起来。除了 ./ruby -v 较简单,可以执行,而像 ./ruby -e 'print("ok")' 就报core dump之类错误。 这个makefile我也修改了。我想哪怕一行行gdb,我也要把这个程序调通。实在不行,直接给matz写封信,请他帮助在ubuntu下调通。 另外,为了少报些错,我把gcc进行了降级,目前我使用的是ubuntu18.04 ,gcc-4.8,至于bison,make版本就无所谓了。

2020-03-23

gawk101_01.tar.gz

这个代码较长,6000行左右。但regex.c的不用细看。关键awk相关的几个程序。我对awk.y进行了修改,使之在命令行中的程序可以执行,就是 ./gawk -f file.awk 这种格式不行,你要把awk命令直接写在命令行上,如 ./gawk '{print "okok"}' 因为那个awk.y还有移进归约冲突。我还没搞定。 总之,从awk1.c慢慢看起。

2020-03-23

grep_oz.tar.gz

写得非常漂亮的grep实现源码,

2020-03-23

gawk1-01.tar.gz

修改后能编译成功的gnu gawk1.01源码,编译成功,真是幸福呀。 今天我想把代码传上去。让大家一起来研究伟人是如何写出如此好的代码的。太厉害了。 我进行修改后,立即能看到效果。 不过,我好像又染上了环境病,只想着如何把代码编译成功,而忘记了,最关键的是要读代码了。 还是仔细读代码吧。 还说一下,我的环境是:win10下uwp下安装ubuntu,安装gcc,bison

2019-11-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除