前言

本不想再刻意强调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,请让我点名表扬你!

VB/VBA,请让我点名表扬你相关推荐

  1. VB/VBA中实现数据库与文件的存取

    编程完成数据库与文件的数据相互存取 'VB/VBA中实现数据库中的文件存取 '示例数据库为ACCESS数据库,用SQL数据库的话,只需要改连接字符串 ' '********************** ...

  2. 近30所高校,获教育部点名表扬!

    本文来源:教育部官网 微言教育,编辑:募格学术 高校牵头建设了60%以上的学科类国家重点实验室.全国超过40%的两院院士集中在高校.更多高校深度参与国际热核聚变实验堆等国际大科学计划--十年来,高校不 ...

  3. Python取代VB/VBA,弄了个寂寞!

    谣言终于实践,而不一定终于智者! 1.最近一直比较忙,系列文章迟迟未开工,索性抽个小空弄些VB/VBA人士关心的几个争论,算是辟个谣吧.这年头,好酒也怕巷子深,谣言也粉上智者了.但是,毛主席说,实践是 ...

  4. 11.15-11.21【大学生Python学习】社区总结+优秀社区成员点名表扬技术书籍和CSDN定制背包奖励~

      欢迎每一位小伙伴的加入: 社区:大学生Python学习   文章目录: 11.15-11.21的社区总结: 优秀群成员点名表扬&&技术书籍和CSDN定制背包奖励: 排名第一位:[X ...

  5. VB/VBA的整数,你真的了解?

    前言 经过<VB的任性,从Variant开始 >.<变量,还有这些秘密 >和<VB的天地,横看成岭侧成峰 >的铺垫,似乎可以隐隐约约地感觉,VB变量背后肯定不是平常 ...

  6. opc client for php,使用vb/vba作为OPC client

    使用vba/vb做client可以使opc的访问变得简单,以下是基于excel的简单opc client代码: Option Explicit Public WithEvents MyOPCSvr A ...

  7. VB / VBA 自制二维码小工具

    现在二维码的使用越来越广泛了,广告.网址等等都用上了 从网上找了一个二维码的控件,自己做了个小工具. 二维码可以把一串字符,不管长短(没试过最长能多长),做成二维码图片 现在的的智能手机软件很多都有扫 ...

  8. VB VBA VBS有什么区别?

    VB和VBA本就是同宗的姐妹,只不过姐姐VB的功夫要比妹妹VBA历害些.不过姐姐只会单打独斗是女强人:妹妹却只会傍大款(例如Office).姐姐有生育能力,是真正的女人:妹妹却不会生崽(生成.EXE) ...

  9. VB/VBA的变量,竟还有这些秘密

    1.变量的意义 任何一门高级开发语言,都离不开变量.通过变量,编程语言才能搬运和表达我们的小心思.变量是机器指令语义化的第一步,却是高级开发语言进化的一大步. 2.变量的起源 在计算机编年史里的蛮荒时 ...

最新文章

  1. 232.用栈实现队列
  2. Button的使用(三):处理点击事件
  3. C++中getline()和cin()同时使用时的注意事项
  4. Python模块(8)-sklearn 简易使用教程
  5. 第2关:HDFS-JAVA接口之读取文件
  6. Google也是个人使用非商业?
  7. IJCAI2021论文:MEDA:一种为小样本文本分类设计的结合数据增强的元学习框架
  8. linux每天进步一点点-7月15日
  9. 使用SYUGI快速创建类似于Office XP/2003 界面风格的应用程序
  10. 设计模式:简单的鸭子模型(入门)
  11. 爱老虎油和你探索flash中的对象
  12. 年轻人住房实录:有人住进毛坯房,有人选择二手房
  13. 如何快速新建多个不同名称文件夹?
  14. Linux SPI 子系统(x86平台)
  15. OpenCore 版本升级后清除NVRAM
  16. Python 6个维度,数万条数据帮你揭秘房租大涨!
  17. DEFT: Detection Embeddings for Tracking论文解读
  18. 迅雷在下载网页视频时没有自动弹出提示,怎么办?
  19. dash dock安装 to_手动安装 Dash to Dock Gnome 扩展
  20. 博主已开启评论精选什么意思_win10拨号上网不能开启移动热点 解决方案

热门文章

  1. 模拟电子技术设计--简易函数信号发生器的设计与制作
  2. 浏览器使用默认端口9006连接TinyWebServer服务器连接不上?
  3. 微服务架构-分布式解决方案-110:基于canal整合kafka异步解决数据一致性的问题
  4. 入手python时踩过的坑——缩进篇
  5. C、C++、C#、Java、php、python语言的内在特性及区别
  6. mysql中删除数据库语句
  7. 排序评估指标——NDCG和MAP
  8. html中td内容不换行显示,html小技巧之td,div标签里内容不换行
  9. python基础编程
  10. easyui datagrid th标签列数字保留2位小数