注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天地不仁,以万物为Googol!

天行有常,不以物喜,不以己悲……

 
 
 

日志

 
 

关于最近理解的一些东西的总结  

2007-11-17 00:04:15|  分类: 积累 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
先写写刚想通的东西吧。

关于C++的复杂性。都说C++复杂,那到底哪里复杂呢?从程序员的角度说,最基本的复杂在于语法。这种复杂不是对于学习者来说的,而是对于编译器来说的,也是对于一些代码分析器来说的。基本来讲,由于C++脱胎于C,这种non-LR的语法结构就成了不散的阴魂,再加上后期一些特性设计在语法上设计的失误,导致了现在没人乐意写C++的编译器和分析器。

举个简单的例子:
a < b > c

上面这句话,在C++里究竟表达的是什么?是a<b> c?还是(a<b)>c?不去取a的类型,是没可能知道的。也就是说,C++在做词法分析时(分析到"<"的时候),必须知道相关词法的语义(知道a在C++语法里的类型)。这就造成了词法分析与语法分析的混叠,导致C++的编译器十分难写。

这个问题同样存在于C,比如:
a * b = c

也因此,包括Java/C#/Obj-C等等一系列的C-like语法的语言,其编译器都比较难写。但由于C本身的语法很简单,加上对类型安全要求不够,实现个半吊子的C编译器还是很容易的(但要实现个符合ANSI C标准的,一样会死人)。

这点上,D语言很好的处理了模板语法的问题。由于!只在逻辑表达式里有效,且是个单目运算符,因此对于模板写:
a !( b ) c

在脱离上下文环境的情况下,是不会引起歧义的。

或者,我们真的该利用“|”来创造更多的括号了。

讽刺的是,对严格遵守LR规则的Pascal,普遍的批评是:死板!呆化!

再有,关于模板的必要性。

今天刚看到的八卦。传说当年C++ 98标准发布后,以几个日本嵌入式厂商(比如东芝啦,NEC啦,富士啦,日立啦)搞出来个Embed C++,目的是简化C++语法,并使其适合嵌入式编程领域。这个Embed C++大概在2000年左右通过该ISO标准。与C++的区别主要是:不支持模板,不支持多继承,不支持命名空间,不支持STL。(话说,某个潜水的,看着这个特像OBJ-C的特性列表吧?)

不过,过了一年,EC++就产生了各式各样的方言。这些方言无一例外,又重新引入了模板。(其他未包含的特性则有选择的进入了某几种方言。)理由是:模板可以产生效率更高,抽象更好的代码。最终,ISO怒了,估计日本那帮厂商自己也晕了,于是,在2003年C++标准修正时,正式废除了EC++。

由此可见,模板对于实现高性能强抽象的代码,是不可或缺的。Bjarne举了这么一个例子,将PortA2_T端口里的数据拷到一个buf里,足以说明问题:
unsigned char mybuf[10];
register_buffer<PortA2_T, Platform> p2;
for (int i = 0; i != 10; ++i)
{
    mybuf[i] = p2[i];
}
或者
register_access<PortA2_T, Platform> p2;
UCharBuf myBlock;
myBlock = p2;

模板本质上是让编译器来写程序,也就是:写一段抽象的代码来操纵一组类型,编译器会在编译时,根据模板的抽象代码和实际的类型,生成一段代码。C++ 0x将要引入的concept会对模板再度强化,使其抽象能力更强,并且能让编译器更早的约束程序行为并产生合理的错误信息。

SVG

好像计算机界什么都有过度设计的倾向。比如SVG最早作为图形显示的语言出现,到最后演变成了集显示,声音,交互,控制等的多媒体合集语言。不过这样也好,由于SVG良好的结构化,这是一个十分适于做界面描述的语言,而且这是独立于任何平台的,而且与CSS(用于实现skin),JS(简单逻辑),XSL(模型转化)都有良好的互操作性。如果一个平台上,应用程序都是用SVG来实现渲染的,估计这个平台的开发会变得异常容易。(前提是对SVG的解析速度够快)什么Flash,WPF,Java,C#,都去死去死吧~~~~~

最后,程序一定是写给人看的,但不是写给所有人看的。想要看程序,先要懂语言。不仅懂语法,还要懂语义。甚至,还要会很多的成语(惯用法)。
  评论这张
 
阅读(332)| 评论(8)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017