查看: 51  |  回复: 0
VB6 VB/VBA的解释器为何不能跨平台?
楼主
发表于 3月21日 16:36

1、VB/VBA的解释器,才是真正继承BASIC衣钵的那一脉。大家或许对1970年代的BASIC风靡一时有所耳闻,仔细想想,那时可是大中型机当道的时代。世界上主要的操作系统,都才刚开始有想法,几乎还是一机一码的时代,为何BASIC能够独领风骚?其实,最根本的原因,便是DEC为了让BASIC在各大机器上运行,放弃了编译机制,而改用解释机制。  

解释器,今天叫虚拟机,可以保证在靠近人的这一端,以不变的姿态(比如源码编写和提交)应万变(不同类型的机器平台)。看看今天的JAVA、Python、.NET,就知道这是一顶好的设计,应该说BASIC也算是解释型语言的鼻祖了,可为何没能在今天的跨平台编程界留下一席之地呢?不仅其子孙VB/VBA成了业界黑户,而且在其他平台上也没能出现旗鼓相当的选手,这是为何呢?

2、回顾历史,『机缘巧合和时势造英雄』应当最为贴切。BASIC的简单易用,极大降低了计算机的使用门槛,这是它在各大机器上受欢迎的外在驱动力。而内在的,就需要程序员为各类不同的机器编写解释器,以便用户能在不同机器上以近乎相同的方式进行使用。那时的计算机硬件制造,算是百花争鸣的时代,有很多厂商都在生产,因此写解释器的生意供不应求,甚至成为一个细小的行业。

和他的伙伴,恰好处于这样的环境,写解释器成为轻资产创业的不二之选。应当说,微软的基因里一开始就是要处理不同平台的需求,对于跨平台绝对是有很深的理解的。只可惜,那时硬件性能未跟上,业界对于解释机制视若过街老鼠,对其性能表现嗤之以鼻。或许是微软认清了现实,也或许是PC的头部(英特尔)开始形成,微软于1983年,给出了编译版的BASIC。

但并未获得IBM的认可,具体原因已无从查证。IBM强迫英特尔将芯片的生产销售许可授权给AMD,让英特尔亲手扶植了一个强大的竞争对手。或许大家可从这件事里看出些端倪,那就是IBM更希望客户或供应商处于充分的竞争环境,而不是拥有垄断地位来增强对IBM的议价能力。

随着DOS系统越来越不能胜任,1989年微软开始与IBM合作研发OS/2,为放弃DOS做准备。1991年,全鼠标驱动的BASIC随Windows3.0发布,微软也最终与OS/2分道扬镳。从这里,其实可以看出大家各有各的想法,只不过微软的野望更大而已,IBM终究不过是微软壮大的营养来源。

3、JAVA崛起后,准确地说是互联网崛起后,微软的种种应对,应当都是围绕当初的野望展开的。从早期的.NET的伪跨平台,到后来的Win8霸屏的企图,微软一统江湖的心思不再躲躲藏藏。如果对PE结构有了解的细心人,就会发现,PE结构早就将微软的雄心暴露无遗了。

PE是Windows上可执行程序文件的格式,比如各种应用程序的EXE/DLL/OCX/SYS等文件,就是该采用的该结构。不得不承认,从16位到32位,再到今天的64位,PE结构极具前瞻性。大家总是很奇怪微软的兼容能力为何如此变态,甚至疑问那得堆多少屎山啊。其实,人家在架构时,早就算计了,好吧!PE结构从32到64几乎没有变动,所以64位Win上的32位应用才能左右逢源。

看看具体的,IMAGE_FILE_HEADER中的Machine,用于标识应用程序适用的CPU类型,好家伙:IntelX86和IA64系列、MIPS系列、Alpha、SH系列、ARM系列、IBM PowerPC系列、AMD系列,几乎市面上能看到的CPU都包含了。

再来看看IMAGE_OPTIONAL_HEADER32的Subsystem,用于标识应用程序运行的操作子系统,有OS/2的身影,也有Posix、CE、EFI、XBOX的身影,更别提Win11里的Linux子系统了。

从这些痕迹,大概就能判断出,微软的Windows其实想做成操作系统的母系统。

4、所以,JAVA的一处编写,处处编译运行的跨平台,在微软的字典里,她其实是看不上的。微软要的,是一处编译,到处运行的大一统。或者说,微软压根就认为,跨平台是系统的事,而非应用程序层面的事。

看看在这一概念下,微软干了些什么?微软在Win10出了ARM版,完美兼容Office等Win32应用,VB/VBA也可以运行在ARM芯片上。微软在Win11出了Linux版,前两天微软再次宣布会在Win11中全面优化Win32,相信不久Win32应用就可以跑起来了。

所以,VB/VBA的解释器,就不太可能出海!很多事情,也就可以得到解释了。


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2024 MaNongKu.com