> 3. Non-LR Gramma. It's hurting the IDE community really. At first itNo. That can't be done.
> seems to be a innocuous problem. But I think it has everything to do
> with the fact that we, until now, still don't have a fast-and-acurate
> C++ parser. I know the reason behind it from you HOP-III paper. What
> I'm wondering is that is this going to change in the future? Will C++
> have a LR gramma of some sort?
Thing 是对象还是类的问题应该属于语义范围,不是语法。
可怕的是下面的这种语法。
a * b = c;
这句话即可能是变量声明和初始化的语法,也可能是个数学表达式加等号操作符。
这2者的语法树是不同的。必须结合上下文的语义来解释。
a**b;也有同样的歧义。究竟是变量声明还是解引用后做乘法呢?
由于c++可以在类的定义里写函数的实现,这就造成的语法分析到一半要应用语义分析的结果。但是由于语法还没完成,语义分析只能开个头,两者缠在一起,互相引用。
在模板出现之前,还不算太可怕,模板出现后,就更难分析了。
a<b,c>d怎么解析?
a<b::c,d>e(f,g).h * j::k;要参照多少上下文才能解析出来?
C++在引入模板后,到了要靠增加关键字来帮助语法解析的地步。那就是typename.
从程序员的角度来看,typename关键字纯粹就是多余的。
在 07-11-16,莫华枫<longsh...@gmail.com> 写道:
> 这句话即可能是变量声明和初始化的语法,也可能是个数学表达式加等号操作符。
> 这2者的语法树是不同的。必须结合上下文的语义来解释。
> a**b;也有同样的歧义。究竟是变量声明还是解引用后做乘法呢?
>
这个同上.
在 07-11-16,red...@gmail.com<red...@gmail.com> 写道:
还有要取消 ','表达式,顺带也取消C式强制类型转换,直接让 (x, ...) 成为
Tuple 字面值:
(int, double) record;
record[0] = 1;
record[1] = 1.1;
这下谁还需要 struct ?
世界和谐了....
在 07-11-16,李一楠<li_y...@163.com> 写道:
在 07-11-17,Googol Lee<goog...@gmail.com> 写道:
Jian Wang 写道:
在 2007-11-17六的 16:18 +0800,yq chen写道:
> 呵呵,我们喜欢用IDE。但是很多UNIX老牛不喜欢用IDE,认为IDE实际上是降低
不过小朋友里确实有盲目调试的.发现BUG后完全不思考就进行调试.调试时也没有方向,完全撞大运的方式,效率就非常低了.
在 07-11-18,wizard<klin...@gmail.com> 写道:
我现在用 D 开发, 没有 IDE, 调试时间也只占了一小部分, 考虑结构和编码的时
间较多, 编写测试代码的时间也较多(我这里的代码需要可靠性较高, 所以我的
unittest 除了做 api 测试, 还做白盒测试, 针对内部的实现, 将各种边界条件都
进行测试), 等这些都准备好了, 最后的调试时间实际上并没有多长, 因为测试代
码可以抓住绝大多数 bug, 指示的位置很确定; 程序进行了修改, 改得不对, 测试
代码也不会放过. 当然这些测试代码也需要不少的维护时间, 但是, 这是自己的安
全降落伞, 时间是不能省的.
如果有 bug, 测试代码, assert 都没有抓住的的话 --- 我的程序编译的时候有
控制, 哪个模块, 调试输出到哪个级别, 可以进行控制, 打开合适的输出, 然后喂
它一堆数据, 喂到 bug 出来, 再分析 log, 很快就可以找到头绪了.
如果这样都很难调试的程序, 如果编码质量不会太糟糕, 那么多半就是程序结构太
过复杂了.
象以前我曾经写过一个程序, 运行几万次可能有一次出现问题, 老是找不出问题所
在, 搞来搞去实在没有办法, 最后放弃重写.
这个程序失败的原因是: 设计的时候, 想要追求很好的效率, 对象之间很多调用都
是直接调用, 造成调用 & 回调关系太过复杂, 再夹杂多线程的同步加锁, 最后复
杂到我自己都想不清楚, 如果多线程的时候, 这个路径这样执行, 那个路径同时这
样执行, 会不会出现问题, 这又怎么能够保证质量.
后来就吸取教训, 不搞这么复杂的动态结构的程序, 要调用对方, 但是 context
太复杂了? 那好办, 记录到一个延迟调用的队列中, 等到 context 简单的时候再
调用, 性能 ? 如果这个延迟登记队列不做动态内存分配的话, 性能的降低不会太多.
之后似乎就不曾出现过焦头烂额的情形了.
Jian Wang 写道:
Gedit 功能还勉强凑合,最近出了一个 Symbol Browser 插件,可以把文档里的方
法、类都列出来,支持30多种语言,可惜没有D。
http://www.micahcarrick.com/11-14-2007/gedit-symbol-browser-plugin.html
但是 Gedit 差的功能还是太多,什么括号匹配之类的都没有,如果不介意KDE的话
可以试试 Kate,功能要比 Gedit 强不少。
在 2007-11-18日的 18:18 +0800,Atry写道:
vi还好吧,感觉看完那个tutorial以后就可以用了。
以后再慢慢扩展你所知道的命令。