开坑了...

来源:互联网 发布:广州java编程培训 编辑:程序博客网 时间:2024/06/15 00:40

前段时间初步完成了一个简易版yacc的编写,我原本以为这个东西会花费我三个月到五个月的时间,但是很不幸,没有,一个多月就吭哧吭哧写完了,代码量也不大,2000多行,即使自己实现一个正则表达式引擎来做词法分析,总体的代码量也不会超过5000行.

没有小型的项目支撑的话,日子真是太无聊了,光刷那些算法真的是很没有意思,所以最近一段时间准备再入一个坑,那就是实现一个简易的tcp/ip协议栈.

flag已经立好了,能不能完成,这是另外一回事,事实上,很早之前,我就想实现一个这个玩意了,所以去不少有名的开源协议栈看了看,看了看我就退缩了,一个协议栈附带了非常多杂七杂八的东西,源代码加起来1020M,光读这些源码就欲哭无泪了,就算是抄一遍也抄不过来,所以一直不敢动手.最近之所以要动手,是因为我基本上将编译器,os,解释器,网络编程全部过了一遍,不说多么精通,但是肯定是已经入门了的,毕业前可能一个比较遗憾的事情,就是没能写一个协议栈吧,所以就进来填坑了,即使我现在不写,按照我自己的尿性,我将来肯定也会写的,所以长痛不如短痛,干脆现在就开坑吧.

光给人练习使用的话,我期待协议栈的代码行数在1万行甚至更低,再复杂,我就没法掌控了,协议栈应该运行在用户态,这样我就可以调试了.协议栈只需要深入到链路层就可以了,再底层的东西,涉及到网卡驱动什么的,就不用管了,这样的一个协议栈,投入实际运行可能不太好,但是用来深入学习网络是最好不过了,特别对于一个使用tcp ip协议来构建应用的程序员来说.

大致搜索了一下,比较简单的协议栈实现有
kcp,uip,level-ip,4.4BSD-Lite2,lwip,其余还有一些,懒得去翻了,估计接下来的一段时间里,会一直翻这些代码的实现,抄也要抄出一个能够跑起来的协议栈.

我大概给这个小项目的时间为3个月左右,最迟希望到7月份底就能搞完,在ubuntu上跑起一个简易的协议栈.如果到那个时候弄不完的话,估计这个项目就要延迟了,要延迟到等我找到了工作再说,应该到明年毕业前是弄得完的.

你可能会问,你花这么多的时间干这些没有意义的事情干什么?没有人会用你写的东西,linux下的协议栈已经实现得够好了,你何必再折腾呢?把省下来的时间随便干点别的,不好吗?

我想说的是,人各有志吧,我只是觉得,我不找点事情来折腾的话,日子会过得非常无聊.世界上没有用的东西多了,往大了说,人类对于这个宇宙也是没有用的东西啊.

或许是我个人的脑回路有问题,身边的人都用java,大家都说java好找工作,我不知道为什么总抱着吃枣药丸的cpp不放.大家都不停地熟悉javaapi,框架,整天抱着web,android死磕,我居然不怎么感兴趣,还在玩一些几十年前的东西,算了,我就是条咸鱼,没多大的上进心,就这样吧.

===================

最后,吐槽一下cpp吧.

最近看了一下cpptemplate,本来是打算好好学一下模版的,但是一不小心看了一些这篇文章:c++模版元编程

虽然对模版的基本语法没有什么吃惊的,但是令我没有想到的是,这个玩意居然还可以玩函数式编程,虽然语法非常丑陋,可读性非常之差.

但是你还别说,真的有人拿这个玩意做了一些意想不到的事情,比如将正则表达式的检查挪到了编译期,而不是运行的时候,虽然很不赖,这样的话,运行的速度就可以加快了,因为在运行的时候可以省略错误处理这一步,但是就cpp模版这种丑陋的语法而言,不用想也可以知道,它的代码肯定非常难读.

所以我做了一个理智的决定,暂时还是不要走火入魔的好,玩模版函数式编程,那估计是几年之后的事情,在此之前,我用模版写一写容器什么的就好了,有时间在学一两门函数式语言,比如haskell,先练一练函数式编程的思想,几年之后,如果对c++那套丑陋复杂的模版语法有兴趣的话,再来入坑吧.

毕竟cpp的模版,是另外一门语言呢.

不知道为什么,现在有点不是很喜欢cpp了,现在先撑一段时间吧,将来有可能的话,转到java去吧.

0 0