最近不知道各位有没有到MS的网站上面看,在VS的页面里面有一个.NET的十个必用工具的Post。这个Post里面介绍的好几个工具都确实非常有用,比如说Reflector、NUnit、Regulator等等。

说起来真巧,这里面介绍的Reflector最近就被我检查出一个Bug,这个Bug在查看Microsoft.WindowsCE.Forms.dll里面的_SIPWnProc函数,翻译出来的C#代码竟然是:
internal PAL_ERROR _SIPWnProc(IntPtr hwnThis, WM wm, int wParam, int lParam)
{
     if (this.EnabledChanged == null)
     {
           return PAL_ERROR.Handled;
     }
     this.EnabledChanged.Invoke(null, EventArgs.Empty);
}
竟然有可能没有返回值,这个Bug出现在4.0.7.0的版本。在反馈的email发出之后,作者跟我联系了,说最新的4.0.7.0版本没有这个问题。我但是不知道我用的已经是4.0.7.0了,还say sorry了。然后我立刻就发现这个问题,马上又给他发了一封信,后来没过多久就出现了4.0.8.0的版本了。
其实有时候还是直接用ILDasm比较让人放心,至少不会有很多逻辑性的错误。(我还试过用Reflector看Terrarium的程序的时候崩溃掉了,看的是一个import dll的函数,也不知道目前是否有修正。)

另外一个Regulator就更让我觉得还是自己写东西比较安全。虽然说这个东西好像挺好的,但是实际上我还是觉得他没有脱离写正则表达式的繁琐和重复性的工作。而让我感到更加吃惊的是,我的一个工作得非常好的正则表达式,竟然在他那里出错了,不知道为什么。这个正则表达式就是我上一次提供的.NET CF程序源代码级优化器的第一阶段的表达式,主要就是去除代码里面的注解、字符串等可能会引起错误理解的部分。这个表达式如下:
(?>/(?>/(?:[^\n])*|\*(?>\*(?![^/])|[^*])*\*/)|(?=[@""'])(?>@(?>\s|/(?>/(?:[^\n])*|\*(?>\*(?![^/])|[^*])*\*/))*""(?>""""|[^""])*""|""(?>\\.|[^""])*""|'(?>\\.|[^'])*')|(?<Catchable>(?:(?>\\.|[^@""'/#]|/(?![*/])))+)|(?>(?<Catchable>#endif(?>\s)*//(?>\s)*NACC|#if(?>\s)+ACC(?>\s)+(?>/(?>/(?:[^\n])*|\*(?>\*(?![^/])|[^*])*\*/)|(?=[@""'])(?>@(?>\s|/(?>/(?:[^\n])*|\*(?>\*(?![^/])|[^*])*\*/))*""(?>""""|[^""])*""|""(?>\\.|[^""])*""|'(?>\\.|[^'])*')|[^#]|#(?!else(?>\s)*//NACC))+#else(?>\s)*//(?>\s)*NACC)|(?<Catchable>#)))+

……很夸张吧?我不知道像这种级别的东西如果用Regulator怎么才能够设计出来,反正我用的是另外一种技术来做的,这个技术以及我所用的软件我下一次再介绍。大家可以试一下,这个表达式在Regulator里面会出现什么样的情况?输入可以是任何C#源代码,输出里面的Catchable组里面的所有内容拼起来之后就是已经去掉了注释和字符串的内容(还去掉了#if ACC到#else //NACC之间的内容)。可是在Regulator里面却出错了,出错的信息说")"这个符号不足,我也不知道这个问题到底是我用错了呢,还是Regulator有问题。关于这个问题,我也给Regulator的support去信了,给了一个FeedBack,不知道是否在最新的版本里面有所修正呢?我所使用的是2.0.3.0的版本。(最让我感到搞笑的是,FeedBack里面检测到的引用竟然是.NET CF的版本,而不是.NET Framework的版本。到处都是1.0.5000、1.0.3333,好好玩哦,不知道是不是他发现我用.NET CF比较多呢?)

写到这里,我就觉得正则表达式的构造还是用我自己写的那个软件比较放心,而且能够比较轻松的构造出比较复杂的内容。上面的那个还不是最长的,至少加速器里面的第二步骤所用到的正则表达式就有783个字符(上面那一个有516个字符)。像这么复杂的东西,如果要用Regulator这样的工具去创造(注意是创造,而不是有人指点你怎么去做),真是不可想象的一件事情。

不知道有没有人想知道我的那个正则表达式的编写器有什么“优点”呢?这个东西和上面的The Regulator相比较有什么最大的区别的?这个就恕我留下来卖个关子了。

还是自己写的东西比较放心相关推荐

  1. 牛人,多看看他们写的东西

    计算机大师 Donald E. Knuth(高德纳) 算法大师,我最崇拜的计算机科学家,没有之一!不认识高爷爷的人别说自己是学计算机的.<The Art of Computer Programm ...

  2. 8年了,开始写点东西了

    大家好,我是若川.最近组织了源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列> ...

  3. 新人报道,写的东西还请大神们多指导!也希望能让和我一样的同事少走弯路。...

    大家好!我刚工作,经验还很有限,写的东西都是自己在工作过程中遇到的问题,花了很多时间来解决之后的一些总结,可能比较浅显也比较简单,有什么不足的地方还请大家指正,有好的方法也欢迎大家留言,小生先谢过啦! ...

  4. 还是觉得应该动手写点东西....

    哎,说来惭愧来博客园已经一年多了,博客里面的文档近95%都不是自己写的.都是在网上找到直接看过一遍之后,就复制粘贴发表了.一年多来一直都是这样,似乎没有觉得有什么不对的地方. 直到最近我真正的思索下面 ...

  5. 科研|诺奖得主本庶佑: 不要相信论文里写的东西,《自然》《科学》这些杂志上的观点有九成是不正确的...

    本庶佑:真正一流的工作往往没有在顶级刊物上发表 日本医学家,2018年诺贝尔生理学或医学奖获得者本庶佑 关于选择 我做了这么多年研究,一直都觉得做研究很快乐.我从没有感到痛苦而想要放弃研究的时候.不过 ...

  6. 一些牛人榜样,多看看他们写的东西(后续整理牛人的blog等)

    一些牛人榜样,多看看他们写的东西(后续整理牛人的blog等) 分类: 1.2.1.1 职业规划 1.2.1 政法经管 1.2.1.2 行业知识2012-06-27 22:51 5832人阅读 评论(0 ...

  7. 一些牛人榜样,多看看他们写的东西

    计算机大师 Donald E. Knuth(高德纳) 算法大师,我最崇拜的计算机科学家,没有之一!不认识高爷爷的人别说自己是学计算机的.<The Art of Computer Programm ...

  8. 给自己定个小目标:每天写点东西

    现在很是浮躁,很少能够静下心来写点东西,更多的是被网络的数据洪流侵蚀着,找不到方向. 互联网时代,我们缺的不是各种各样的资源,而是互联网中海量的资源涌入到我们身边,让我们不知道如何去选择.很多信息从我 ...

  9. 第一次写点东西,希望是个好的开始

    先弄个标题看看吧 Hello CSDN 背景介绍 总得写点技术相关的 补充几条apk打包优化配置 Hello CSDN 第一次在CSDN写点东西,其实不是自愿的,而是没有办法,那天看到鸿洋大神转的一句 ...

最新文章

  1. python计算文件中字母出现次数_python – 计算文本文件中字母的频率
  2. Leangoo看板协作工具“免费版”和“企业版”差异
  3. [转]C#综合揭秘——细说多线程(上)
  4. CentOS常用到的查看系统命令
  5. python三元表达式求值_python 三元表达式的 列表推导式 生成器推导式
  6. bzoj 1046: [HAOI2007]上升序列【dp+二分】
  7. linux安装CacheCloud
  8. stm32F4xx中文参考手册
  9. Android夜间模式原理
  10. 使用命令行强制注销远程登录用户
  11. 9 个美观大气的后台管理系统(收藏备用)
  12. 干货|对于软件产品质量的一些思考
  13. html邮箱代码怎么写_如何制作一个简单的HTML登录页面(附代码)
  14. android 双SIM卡检测是否可用和信号强度
  15. 小白前端自制红警登陆界面(试水前端)
  16. 什么是银行卡实名认证接口?
  17. uniapp中修改input里的字体颜色
  18. MP4Box使用一二例
  19. 创建线程:pthread_creat() 函数介绍
  20. axios的响应拦截器 - 错误统一处理 / 获取数据繁琐

热门文章

  1. ios 关于block传值报错
  2. Juniper SRX IPsec *** base route CLI
  3. 建设有竞争力的APP开发团队
  4. bootstrap -- css -- 表格
  5. Dom4j和Xpath(转)
  6. 推荐抓虾在线RSS阅读
  7. APP启动原理,APPdelegate程序状态解析
  8. mac terminal
  9. 从配置说tomcat和nginx调优
  10. 不使用加减乘除法,完成两个数的加法