自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lovetheme的专栏

关注编译技术,系统底层

  • 博客(24)
  • 资源 (2)
  • 收藏
  • 关注

原创 对"咱们怎么过冬"的思考

 在pongba发起的TopLanguage里看到有人发起了这样的帖子,有了一些想法,稍微作了一下整理,发到自己的空间上。 原帖及相关讨论可以看这里:我的观点可能会是比较老土,经济环境出现冬天,不能不当回事,也不能太当回事,作好份内的事,努力 工作,努力学习,努力积累就好。哪个行业更安全,是不是应该考虑进入那个行业,在职业选择的伊始是可以考虑的,但是对于已经入行的人

2008-12-27 21:05:00 608

原创 有关读书的一些思考

 在求知的过程中,我们经常会要面对这样,那样的诱惑。以读书为例,一部经典的好教材,想要把它读通,搞明白,弄扎实,除了在读的过程中理解作者想要描述的字面意思以外,往往还需要通过作大量的相关习题及实验来建立起更为扎实,深刻的认识,而捧着厚厚的一本书,人类心理潜在的占有本能又往往会驱使着自己以最快的速度将这部教材拿下,满足自己的成就感,于是在没有外人监督,没有外力监控的情

2008-12-27 21:05:00 993 1

原创 认知能力的瓶颈

 最近工作学习的过程中,总是感觉自己遇到了认知能力的瓶颈。比如说,设计一个复杂的系统,在设计的过程中,对目标域的具体问题的认知和理解,在达到了一定的程度以后,再想有更深一步的认识,就发现很困难了。想要获得对这项事物的细致全面的把握,似乎是件心有余而力不足的事情。而带着这种程度的问题认识,去设计问题的解决方案,总会有心里不踏实的感觉。这种情况下,自己的解决办法只能是通

2008-12-27 21:04:00 1141

原创 最近有了被掏空的感觉

 最近的工作过程中,有了那种被掏空的感觉。最近一次体验到这种感觉,还是将近一年前在 上一家公司的时候。记得去年差不多也是在这个时间,自己在 上一家公司负责一个项目的开发, 从项目初始的框架设计到具体的实现,全程作为主力参与,那时自己刚进公司不到半年时间,还是一个新兵蛋子, 负责这样的项目一下子就感觉到了压力。那段时间,晚上加班到10点以后是家常便饭,即便是周末,基本

2008-12-27 21:03:00 954

原创 工作进度6-语意处理模块

 最近在忙活语意层面的东西。      这部分内容的实现进度不像之前作语法处理模块那样顺畅。     一方面,自己以前的开发经验主要还是集中在语法方面,在语意方面的积累并不是很厚,这次又是重起炉灶,从头开发设计编译器,无论是在流程框架上,还是在实现细节上都需要花费不少时间去梳理,熟悉。     另一方面,从语法描述到语法树这个层次所涉及的变

2008-12-27 21:02:00 581

原创 有关表达式求值的一些思考

 最近在实现一个表达式的evaluator,具体来说,就是对表达式求值,算出最终的结果。目前的这个版本的evaluator只针对常量表达式,对变量表达式则不去处理。因为对于变量表达式,是无法在编译期间求出其最终结果的,只有等到执行阶段才具备算出结果的全部条件。Evaluator的实现机理并不太复杂,简单来说,就是一个递归下降的求值过程。如果把表达式的语法结构表征为一

2008-12-27 21:02:00 851

原创 有些事情,作起来要比想象中的容易

 记得去年8月份就曾经想自己动手设计一门语言,一开始的想法是先实现一门跟自己的目标语言特征有相似性的现存语言的编译器,在实现中积累对语言设计和实现的理解.记得当时选定了Ruby以后,就把C Ruby的源码下载下来,打印出其语法BNF范式. 后来就是一直在研读Ruby的源码,零零星星也花了些时间,因为总是感觉对C Ruby本身的实现理解的还不够通透,就一直没有真正开始自己的实作,在我的想

2008-12-27 21:01:00 1355

原创 一件事情,如果你不能说清楚,十有八九你就作不好

 记得有一次开会,我的头儿说了标题所写的这句话,自己深以为然。有过较多解决问题的经历的人可能会有这样的感觉,很多时候,面对一个问题,我们即使没有完全将之想清楚,也可以基于已有的经验给出一个能够work的解决方案,当然这种情况下给出的方案往往不是最优的。而即使给出了解决方案,很可能自己都未必能把自己给出的解决方案所基于的推理逻辑,清晰无误地阐述出来. 因为随着人的知识

2008-12-27 21:00:00 1016

原创 感受到了积累的效应

 上午写程序写的很high,一时间势如破竹,几乎将词法模块剩下的东东全部作完了,特别是有几个涉及到串处理的模块,原本以为会花一些时间才能作完,结果很快就搞定了。更happy的是感受到了自己编程能力的提升。记得以前写程序的时候,一涉及到手写串处理的code,自己就会有一点点头皮发麻的感觉,因为那时总感觉串处理比较琐碎,涉及到的边边角角的地方比较多,往往有思考起来不能穷尽各种逻

2008-12-27 20:59:00 721

原创 使用m4来模块化管理语法文件

 使用yacc/bison编写语法文件的时候,经常遇到的一个问题就是在一个语法文件中包含了太多规则,以至于文件的尺寸变得异常庞大,显得很难看。一个普通语言的语法文件,加上语义动作和相关处理函数,尺寸在5000行以上并不是什么稀罕事,这在软件设计来说是一件让人难以忍受的事情。毕竟,面对这么大的一个文件,无论是阅读还是维护,都不是一件让人舒心的体验。以前在Cadence

2008-12-27 20:59:00 1764

原创 早起干活

 前一段时间睡得一直比较晚,早晨睁眼就得8:30,再收拾收拾,路上耽搁一下,到公司基本上都是9:30以后,有的时候甚至直逼10点。结果就是感觉上午还没干什么事情,就开始吃午饭了。整个一个白天天下来,似乎都没作多少事情,于是晚上就总想晚走一会儿,多干点事情,晚走的结果又导致睡得较晚,形成一个很容易让自己疲惫的反馈环。有些人喜欢晚睡晚起,擅长夜战,我则恰恰相反。所以决定

2008-12-27 20:57:00 862

原创 有关语法数据库Clone的设计方案

 最近有这样的需求:需要为自己设计的语法数据库GDB( Grammar DataBase)提供Clone机制的支持,具体来说,就是给定一个GDB语法树TreeA,希望能够复制出一份跟TreeA内容一模一样的语法树TreeB,TreeB除了内容跟TreeA一模一样外,跟TreeA不存在任何依赖关系,即使删除了TreeA,也可以正常访问TreeB中的内容。这样的一个功能

2008-12-27 20:49:00 641

原创 对一个数据转换模块的设计思考

 上周一直在设计语法层到语意层的转换模块。在目前我参与设计的这个系统里,语法层面和语意层面采用的是两套不同的数据结构的,为了便于描述。我将语法层面的数据结构称之为GDB(Grammar Database),将语意层面对应的数据结构称之为SDB(Semantic Database)。引入GDB的主要目的是为了解决文本形式的源文件描述到易于程序处理的描述形式的转换。具体

2008-12-27 20:48:00 715

原创 有关软件架构设计 的思考

 最近在重构设计。这一回自己吸取了之前的教训,在想清楚整个设计的架构之前,一直没有动手写太多实际的code,更多的时候是用伪码来描述验证自己的设计思想。花了三天的时间,在一条设计道路上不断地思考,尝试,最终发现并不太可行,于是改换另一个思路继续进行设计,经过一天时间的设计,发现这个思路也存在一定的缺陷,及至今天,才算是基本确定下来整体设计的框架。如果自己这一

2008-12-27 20:47:00 722

原创 设计杂感

 最近在设计一个Identifier的Resolver,通俗来说,这个Resolver要完成如下功能:1。对语句,表达式中出现的ID进行解析,判断该ID是否存在相应的定义。2。对存在定义的ID,要校验引用处对该ID的用法是否与其定义处的语意相兼容。比如说,对一个浮点变量执行移位操作,在语法上是合法的,但是在语意上则通常不允许了。这件事情说起来并不太复杂,主要涉及到的

2008-12-27 20:46:00 600

原创 软件设计过程中的诱惑

 在软件设计的过程中,我们经常会面临这样的诱惑:在工作过程中,突然出现了一个问题如鲠在喉,阻塞住了当前整个的工作进度,而同时,你立刻能够想到一个快速搞定该问题的方案,这种情形下开发人员,很容易就会受到快速解决问题的诱惑,快速地给出fix,然后继续推进到后面的内容,维持那种开发过程中酣畅淋漓的快感。但是在开发过程中,不可避免会经常性地遇到问题,如果经常性地给出

2008-12-27 20:46:00 869

原创 对一个正确的设计作优化 要远比 把一个过度优化的设计调正确 容易

 注:标题看起来可能有点拗口.实际上是从一句代码优化相关的英文引申出来的:It would be much easier to optimize a right program than to make an over-optimized program right.最近在实现一个用于打印语法树内容的Visitor类,实现的过程中发现了之前自己设计的语法树结构存在不少的冗余,引发了

2008-12-27 20:45:00 774

原创 软件设计随感

 最近在作的事情是为语法规则制定相应的数据结构,并将二者集成起来。这个环节的工作在难度上来说并不是太大,但是复杂度却不算小。因为涉及到的语法规则非常多,相关的数据结构也数量庞大,粗略统计了一下,现在为语法数据结构引入的类已经有60多个了,涉及到的代码量也有5k行之上,虽然每个类的描述并不复杂,但这么多类,之间难免有相互包含,继承的关系,在设计过程中要将这些类的关系,描述记在

2008-12-27 20:43:00 640

转载 有关软件模块化设计的思考

 对软件设计来说,我倾向于让一个系统中的各个子模块满足高内聚,低耦合的特质.如果耦合不可避免,那么我期望这种耦合一定是要通过一层统一的抽像接口来完成的,没有约束的任由模块之间纵横交错,互相调用和影响,只会让模块的复杂度变成乘方,依赖关系变强. 这种复杂度和依赖关系的增加既会带来更多的潜在bug风险,也会增加日后代码维护的难度及工作量.但在现实的开发中,却经

2008-12-27 20:42:00 1567

原创 fwrite和ofstream文件输出效率上哪个更快?

 直觉告诉我,fwrite在速度上应该会更快一些。毕竟ofstream这样的c++输出流,通过引入了虚函数,简化了程序员的编程逻辑,提高了安全性,但是也由于引入过多抽象层带来了相应的性能开销。为了佐证我的想法,特地写了一个小程序来测试了一下,最终验证了我的揣测。C程序代码如下:#include #include #include double calcP

2008-12-27 20:41:00 4812

原创 C++中定义派生类之前需要看到基类的定义实体

 在C++中定义一个从基类base派生出来的类derv,需要在定义base之前确保编译器能够看到base的定义实体,即...    // base的类定义要出现在此处class B: public base {...};如果仅仅是在定义derv之前声明一下base,如下所示:class base;class derv : public base

2008-12-27 20:39:00 1915

原创 一道C++模板题

 昨天在TRW2000的作者刘涛涛的blog上看到了一道c++模板题,一时兴起,就作了起来。题目如下:#include #include typedef unsigned char BYTE;typedef unsigned char * PBYTE;class LZF{public:     int num;     LZF(): num(

2008-12-27 20:38:00 643

原创 C++中平台无关整数类型的表示

 最近写程序,需要用到平台无关的32位/64位整数类型,如果直接使用int或long来表示的话,需要考虑到在32和64位平台上的差异。如通常的32位编译系统中,int的宽度是32位,long也是32位,long long则是64位。而64位编译系统中,int的宽度是32位,long是64位了,long long也是64位。我们当然可以自己来使用typedef定义平台

2008-12-27 20:37:00 1651 1

原创 Visitor模式浅谈(1)

最近的开发工作中有这样的需求: 在语法分析阶段建立好的语法树上作一些操作。概括起来,大致有如下一些需求:1. 将语法树对应的内容再打印出源码级表示,以协助调试,验证系统正确性。2. 遍历语法树,对语法元素作语法正确性的检查。3. 遍历语法树,转换生成后端所需的数据结构。4. 。。。。。。抽象来看,这些内容几乎都涉及到这样的要求: (1) 遍历 语法树 (

2008-12-27 20:36:00 660

Large Scale Non-parametric Bayesian Inference

并行化Bayesian无参推断的文章。对并行机器学习感兴趣的同学可以看看

2014-11-07

C++ 语言标准 2003

C++的ISO标准2003版 从标准层面详细说明了C++和方面的特性。 对于想深入了解C++的程序员有一定的帮助。

2009-04-20

空空如也

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

TA关注的人

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