RealBasic 是一款 Mac OS 和Linux windows 上的跨平台集成软件。
可是发现 他生成的可执行文件居然没 3.3mb ,就 一个 MsgBox("") 而已。
用exescope 打开 其生成的exe文件,导出中为一个叫 x86runhoudini.exe 的文件。
从这里,完全可以看出, 它只是一个 虚拟机而已。 一个在windows下的虚拟机, 把代码附加到这个所谓的可执行文件里 。 然后解释执行而已。
而vb6,是半虚拟机,可见 , realbasic 只是个欺骗者,
可是发现 他生成的可执行文件居然没 3.3mb ,就 一个 MsgBox("") 而已。
用exescope 打开 其生成的exe文件,导出中为一个叫 x86runhoudini.exe 的文件。
从这里,完全可以看出, 它只是一个 虚拟机而已。 一个在windows下的虚拟机, 把代码附加到这个所谓的可执行文件里 。 然后解释执行而已。
而vb6,是半虚拟机,可见 , realbasic 只是个欺骗者,
这个世界是很大的。
第一,REALbasic的代码的确是编译执行的,不是解释执行的,所有代码都被编译为本机的x86代码.
第二,REALbasic的程序比较大是因为静态链接了REALbasic的Framework,Windows上的Framework是用Win32API写的库.比如就一个MsgBox("") 来说,它并不是直接调用Win32API,而是调用框架包中的函数进行一些包装处理,最终桥接到Win32API.因此GUI程序最小也有3-4M,随后才随代码增加而增长
第三,x86runhoudini.exe并不是一个虚拟机,它是一个占位文件,这个文件可以在RB安装目录下的resources文件夹里面找到.换句话说,它是一个空白的PE32结构,REALbasic没有真正的PE和ELF链接器(Linker),编译后的x86原生代码和资源等被填入到这个占位文件中的程序和数据段中实现链接.
实际上我的公司去年承接了REALbasic PE和ELF链接器的开发,但在一些细节上有分歧,目前停滞,主要是REAL觉得这个占位文件用的也不错,不肯多花钱来重写连接器,更怕链接器重写后对现有的代码(主要是编译器代码)产生影响,会有一大堆相关的bug出来,软件质量各方面都会受到冲击.
不纯粹。
是不太好,不光不是让人觉得不太纯粹,而且也是RB不能编译动态链接库/共享库的原因——共享库的格式比较复杂和零活,总不能也做个空白结构随后填充吧。连接器的问题总有一天还是要解决的。
本来我还以为是刚开发出来、小打小闹的呢。