前言
本不想再刻意强调VB什么,怕说多了,成了误导。用与不用,其实都无需解释。但,既然在《互联的围城,已春暖花开,我却心向罗盘荒野 》中给了大家学习内化的承诺,又在《明比阅历浅,暗拼体力衰,指下讲武德,码上笑春风 》中立下了非IT的IT技术Flag,那就有责任把技术路线图给读者讲客观,讲清楚。我相信,无论是VB的爱好者,还是其他工具的使用者,都能从中受益。
1、在《以史为鉴,编程语言,启示录之系统觉醒 》中,已将编程语言的本质,来源和发展,以及与系统之间的关系,交代清楚。计算机开发语言,从低级到高级,既是发展,更是继承,但不是取代。现代计算机的冯.诺依曼结构,就决定了后来居上的每一种语言,都背负着前人的行囊。在市场的挑挑选选中,只不过收起了不合时宜的台面而已。
2、每种工具的诞生都有其历史使命,有自己的主场。每一种语言的诞生,又无不是站在前人的肩膀上,相互借鉴,突出重点。在《VB前传,从教学到游戏,再到系统,似乎每步都是精心设计 》中,回顾了BASIC的初衷,以及BASIC与个人PC、与微软Windows之间已被历史淹没的传奇。VB的舍生取义,不应当被嘲弄,她值得每个计算机从业者的尊重。
3、本篇将是VB背景系列的最后一篇,仅试图站在机器硬件和系统的背景上,更客观的讲述VB的适用场景,以帮助大家更正确地使用VB。除了VB使用者外,也适合C#,Python,Delphi等用户观摩。
一、理解VB的历史,仍是把握VB适用场景的关键
1、BASIC的初衷,适用无处不在
如果你理解Kemeny在1962年的DOPE中连字符串类型都不愿意给的时候,那么请停止对后来的VB说三道四。正是BASIC当年对Fortran 66、Algol60等进行了足够多的精简,才有今天计算机教育的广度和深度,这是BASIC及其继任者,牺牲专业性背后的担当。
正是立身于教育的Kemeny和Kurtz教授,不取分文,才让BASIC越走越远,更是为后来开源的做派提供了范本。其宽广的胸怀赋予BASIC和其继任者宽容的做派,仍是理解这门开发语言及其继任者的核心。
BASIC的愿景在于,开启普通人探索计算机的热情,这也为后继的VB奠定了最基本的适用人群和存世的意义。
担当、宽容、分享、普通人、探索的热情,是VB家族最大的适用场景。
2、微软接棒后的BASIC并非小儿科,简单易用的背后,却是极具创新和技术含量
BASIC对BOIS和其他硬件的操作能力,不仅胜任了早期计算机的操作系统,更是催生了文件系统,为后续磁盘和个人PC系统的诞生贡献了不可磨灭的力量。
从1980年到1991年,在与DOS系统长达十余年磨合下,BASIC不断蓄积力量。最终,以一己之力,让微软与IBM分道扬镳,独立支撑起微软的生态。在仅有64k的空间里,由普通人就能写出经典的星际旅行,彰显的可不仅是易用和好玩。此后VB又经历了与Windows的10余年的磨合,帮助微软打下了个人PC的天下。
在BASIC后近半个世纪里,林林总总的开发语言层出不穷,但再也找不到像BASIC那样一脉相承的简单易用。基于事实的平铺直叙容易,但富有哲学的提炼,却是难上加难。在继任者VB简单易用的背后,秉承的正是BASIC开创性的底层能力。
VB从1998年停更至今已二十几年,从停更后被继续维护至今的VBA,仅做了极少的改动。这不是说微软放弃了,而是的确没有什么需要改的了。这就是为什么VB的代码满天飞,VB本身却连只言片语,都是凤毛麟角。在专业人士当道的Linux里,至今也没有像VB那样的工具。要说没有东西,谁又会相信呢。
所以,VB最大的适用问题,恰恰在于深藏了自己。
3、VB的转身,成了功成名就后的幕后主使
Vb4.0时,计算机的世界格局已基本确定,VB对于微软系统的历史使命已完成。VB投入到VBA的怀抱,完成了华丽的转身。基于COM的Office和COM语言的VB,天造地设地走到了一起。
为Office服务,才是VB的战略核心。所以后续的5.0到6.0,其实更多的是磨合完善VB的服务能力,企业级快速开发只不过是继续保护生态罢了。6.0以后,Office站稳了,VB再次完成历史使命。
6.0时代,互联网已是下一个要角逐的市场。VB有太厚重的历史包袱,如果VB继续作为独立开发工具,是不利于竞争的。所以,.NET出现了,最后带有VB名字的VB.NET都未能幸免。这无关技术,从当年COM的名称的演替中,就可见一斑。
等所有生态,都稳了,微软终于官宣,不再支持VB的更新。而这时,已是VB6.0发布后第10个年头。奇怪的是,VB的真身VBA.dll,只经微小更新,就从32位时代,跨入64位时代。就如32位的PE结构,几乎原封不动的,就到64位的地界。32位与64位之间的那层窗户纸,谁也没有捅破。
VB的适用困境,在于战略转向下的市场宣传,而显得迷雾重重。
二、VB的止步,恰到好处
1、VB需要跨平台吗?
前面也说了,跨平台的事,交给VB就不合时宜了。是VB跨平台很难吗?回顾BASIC当年,从大型机、到小型机,再到微机,都是如何霸屏的!从1973年开始就拥有自己的解释器,这比1989年诞生的Python,和1995诞生的JAVA,早的可不是一星半点。要跨平台,你以为VB技术上做不到?那你以为.NET是哪来底气!只不过换阵地,也需要换名称罢了。
VB不需要跨平台,他只需要守好Windows上Office生态,就足够万夫莫开。跨平台的事,他的替身早就去干了。
2、VB不是面向对象的吗?
1992年的VB3.0就有对象变量了,VB用户熟悉的”.”后面那些自动化,这对象还不够漂亮?那时就支持的VBX和OLE,类模块,那叫瞎啊!竟然还有人说,VB不是面向对象的。JAVA诞生的那年,VB4.0就拥抱了COM,竟然也有人说VB不能做大型项目。
很多人,只被光鲜的术语所吸引,而不去思考技术的本质问题。OO的本质是什么?从01机器码,到助记汇编,再到高级语言,核心解决的是什么?计算机的发展历史可以告诉我们,是更便捷的人交互。
VB具有良好的封装性,对象变量又可以很好的传递这种封装,VB还有条件编译,这怎么看,VB都已拥有了OO的精髓。但在事件驱动机制下,VB更侧重于面向过程而已,这才是VB实用的精髓。有高效交互的视窗和事件驱动,我整那没用的类,不是吃饱撑着了么!
需了解VB里,面向对象的使用方法,请关注BtOfficer获取相应内容。
3、VB不是多线程吗?
很多人说VB是单线程的,多线程太不稳定,觉得很可惜。拜托,看看任务管理器的进程页里,在线程数一列里,VB产品的进程的线程数是1?谈论VB多线程的,连线程是什么,估计都是云里雾里吧。
大概你不知道,VB服务的Office,她的GUI线程需要安全。所以,VB将多线程藏了起来,不让你用而已。很多人在抱怨,同样是API创建线程,其他都很OK,唯独VB打死都不稳定。它没有健全的运行环境,能稳定才是怪事。
需要了解VB真正多线程机制的朋友,请关注BtOfficer获取相应内容。
4、VB没有指针吗?
读过《以史为鉴,编程语言,启示录之系统觉醒 》的网友就很清楚,从数数、打算盘时的手指,到计算尺的游标,再到电机时代的接电触针,最后到电子化时代的指针,可以看出指针是计算机硬件发展的必然的产物。在计算机的世界里,指针就是门票。
你要说VB没有指针,是可笑的。运行时的VarPtr函数,AddressOf操作符,就是指针显行的照妖镜。在VB任性的代码下,处处都躲藏着指针,仅仅不让顽皮的家伙找到而已。因为指针对VB的战略目标而言,实在太危险了。这跟JAVA一个道理,如果允许用指针,那培训几个月就上岗的货,给你埋的雷,JAVA项目输不起。但VB又比JAVA好,VB最终还是允许责任自负的人使用指针。
需要了解VB指针的朋友,请关注BtOfficer获取相应内容。
5、VB能搭上C/C++的车么?
很多人说VB的DLL是个冒牌货,不是标准的DLL。
首先,需要明白什么是标准的?有导出函数的那种?还是支持C调约的那种?其次,VB的DLL都是COM的,都有COM接口了,你还要什么导出函数!”.”后面的自动化,它不香么!最后,VB的调约都是标准调约。VB连变量都可懒得申明,C调约这种需要自己平衡堆栈的活,怎么可能入得了VB的法眼。更何况Win32API中绝大部分都是标准调约,非此调约的,也基本上是线程不安全的。
VB编译时设置导出参数即可导出函数, VB默认情况下关闭了该配置,因为有COM接口方便又安全。导出函数好看么?VB默认也不给你用指针啊!诸如很多Shell32.dll这样的系统组件,就是既有COM接口,又有导出函数,不知道算不算标准DLL!
6、在个人PC的Windows(X86)环境下,VB从不缺材料,VB有宽敞任性的客厅,也有Win32Api明亮的窗口
很多人说VB没有函数指针,很多系统未文档化的,未导出的函数不能使用,大大限制了VB的应用。AddressOf那个小短腿除了给回调API跑路外,而且还只能在标准模块中,VB用户是得不到一点实惠。
是的,VB对函数指针讳莫如深,对用户做的是很绝,因为MSVBVM60.DLL它自己要用。未文档化和未导出的系统函数,本来就不让你用,这是系统对所有语言一视同仁的隐藏。如同VB的指针,它最终还是允许责任自负人士使用的。为了保证任性的用户,提交给系统的参数,不危及到系统安全,它必须检查提交的参数。这也是很多破解VB的人,老是会在MSVBVM60.dll中打转的原因。
那VB也不能调用很多C调约的API呀,这个问题就有点深度了,跟函数指针一样,需要揭开VB的层层迷雾才能回答,这不是一句两句能够说的清楚的了。总之VB能使用系统提供的所有API,VB的适用性问题,其实就是WIN32API的问题。
需要了解VB导出函数、函数指针等的朋友,请关注BtOfficer获取相应内容。
7、VB编译的性能
这个很深度,我只说一句,VB的后端优化器,编译器和链接器与VC6同出一脉。需要了解的朋友,请关注BtOfficer获取相应内容。
8、VB的IDE堪称独领风骚
VB的IDE虽然外观花样不如现在很多编辑器,但是其解释执行的功能,已独领风骚好多年。源码级逐句调试修正的功能,对于写代码、调试代码而言,简直不要太爽。好用与否,自不必多说,谁用谁知道,这是其他IDE无法企及的高度。
从1973年第1代BASIC解释器,到1998年停更,历经25年的锤炼,后期维护至今又有20余年,这是其他解释器无法企及的临床实战经验。VBA语言经过针对性改造后,其IDE以整个Office的GUI为GUI,进行事件驱动,所有代码都运行在该GUI线程上,所以性能远胜其他解释机制。
有需要详细了解的朋友,请关注BtOfficer获取相应内容。
三、VB/VBA请让我点名表扬你
夜深了,暂时想起的就是这些,其他的以后在技术细节中介绍吧。我相信,这些点已足以说明,VB简单任性背后的不简单。看似没落背后,是强大的生命原力。这些应该足以让喜欢VB的人们,继续保持探索的热情,做出有价值的产品来。所以,VB/VBA,请让我点名表扬你!