码迷,mamicode.com
首页 > 其他好文 > 详细

vb,我想对你说,垃圾

时间:2014-07-02 07:47:30      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:style   java   使用   数据   问题   代码   


最近做一个项目是vb方面的,vb6.0写的程序,除了分析底层,也写了程序,觉得vb确实不靠谱。vb写小程序还是可能。计算量一大,就不行了。

vb解析型语言效率低,用了很多msvbvm函数,不停地穿越到vbvm虚拟机函数,效率很低,比如for循环,就用了__vbaVarForInit初始化for循环和__vbaVarForNext更新循环变量因子,不过这个没什么,就是效率低一点吧。我用vb写了一个循环计算,运行一两次没问题,运行了多次以后,循环因子已经走到结束了,可是没有更新,继续不断循环,结果导致程序卡死,这就是很多人用 vb写程序会卡死的原因,我深入分析调试,发现确实是__vbaVarForNext没有同步运行,循环因子没有增加从而退出循环。为什么会导致这样呢,难道是因为多核多线程导致__vbaVarForNext没有同步更新循环因子?最后代码加入循环结束不更新特别处理才避免无限循环。真正的编译型语言,循环只用一个临时变量记住,更新后跳回开始地方,而不是穿越到虚拟空间。

接着就是类型定义不靠谱。vb变量不需要定义类型,即使定义了也没用,只有在传递参数的时候才强制类型不通过,而定义了一个a=2,这个没有问题,但是定义一个c=&H88888,就会曝出溢出错误,可是我在前面一定定义了long类型,为何还溢出呢?深入底层发现,它会调用一个__vbaI2I4函数,就是把H88888从4字节整数转换成2字节整数,所以报出错误。如果两个大的整数相乘,远远大出4字节整数,这时候报出错误,没有办法了,还不知道怎么写代码,因为后面要处理比特位,需要整数,如果转换成浮点数,又不知道怎么转换回整数做位处理,vb浮点数不能位处理。在c语言溢出直接截掉超过的字节就可以了。我觉得这里的dim定义类型就是个摆设。


最后很多功能用vb实现简直太难了,甚至不可以做到。不说这个I2I4转换让人无法大整数赋值,就是浮点数转换成4字节整数,就很难了,我也没搞定。只有用c语言实现,其实是这样的

float Time =84729.06;
DWORD pEcx,*pDWord;
pDWord=(DWORD*)&Time;
pEcx=*pDWord;

pEcx就获得了84729.06浮点数4字节内存数据。vb可以用memcopy似乎也可以实现,不过总是太麻烦。就说前面溢出整数,用浮点实现没问题,再转回整数不知道怎么做。

VB搞了很久,没办法,只好用vc写,结果程序很简单就写完了。最重要的是,即使用vb写完了,如果计算量一大,就会出现程序卡死现象。

vb编辑器还经常是一行代码没改好就弹出语法报错,按确认都受累了。有点类似易语言。

通过这个项目,我想对vb说,你很垃圾。现在似乎没有vb了,而是vb.net,但是vb.net又引入200个关键字,人们还是对他有意见。

内存操作c/c++最强,类库强大语法清晰的是java/c#,文本处理可能是perl,网页和数据库处理最快捷是php,做界面最容易应该是delphi/c++builder。

但是vb什么都不是,只能做界面处理和简单计算,否则你会生不如死,早早放弃好。


vb,我想对你说,垃圾,布布扣,bubuko.com

vb,我想对你说,垃圾

标签:style   java   使用   数据   问题   代码   

原文地址:http://blog.csdn.net/sinox2010p1/article/details/36230521

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!