厉害了 C# 重构 16 年前被废弃的 Visual Basic 6 IDE
C# 发展多年以来,很多程序员喜欢用它来编写各种工具类软件。近日,向来奉行「Talk is Cheap,Show me the code」的程序员又开始了新一轮的“整活”,其中一位名为 Bartosz Korczynski 的软件工程师心血来潮地用 C# 重建了 16 年前被微软废弃的 Visual Basic 6 IDE。最初只是出于兴趣,想要开发一个“有趣的玩具项目”。但没想到,项目刚搞定并在 GitHub 上开源(https://github.com/BAndysc/AvaloniaVisualBasic6)之后,便一举登上了 HN(Hacker News)的头条,引发了大量开发者的关注,甚至不少人留言,“希望这个被作者视为小玩具的项目能够持续下去,因为现在的我仍然必须定期与非常大的 VB6 代码库进行交互”。
用 C# 重构 Visual Basic 6
作者 Bartosz Korczynski 在 GitHub 上介绍道,这个项目被其命名为——“Avalonia Visual Basic 6”,采用 MIT 许可证,允许任何人免费使用、修改和分发相关软件。Avalonia Visual Basic 6 构建基于 NET 8.0 或 NET 9.0 以上。
只不过需要注意的是,此项目不具有任何商业目的,因为 Visual Basic 名称、图标和图形的所有权利均归微软公司所有。
最新复刻的 IDE 是基于 Avalonia 框架开发而成,这是一款开源、跨平台的 UI 框架,98% 的代码也是用 C# 语言编写的。类似于微软 WPF(Windows Presentation Foundation),Avalonia 专为 .NET 生态系统设计。与 WPF 不同的是,Avalonia 可以在 Windows、macOS、Linux、iOS、Android 上运行,甚至可以通过 WebAssembly 在浏览器里使用。
这也是当前 Avalonia VB 6 项目能在浏览器里运行的主要原因之一,浏览器版本需要9.0版。
在浏览器里打开这款 IDE(https://bandysc.github.io/AvaloniaVisualBasic6/),还是让不少人感到惊喜,因为对比微软当初发布的 Visual Basic 6,这款重构后的 Avalonia Visual Basic 6 几乎有着相同的界面。
Avalonia Visual Basic 6
功能上也大同小异,Avalonia Visual Basic 6 拥有:
可视化设计器(Visual Designer):提供了图形化的拖拽式界面设计器,开发者可以直观地布局应用程序界面,无需手写界面代码,类似于传统 VB6 的界面设计体验。
支持 VB6 格式的项目保存与加载:项目可以按照 VB6 兼容的格式保存和加载,确保使用者可以轻松地进行项目的存储和再次编辑。只不过当前浏览器中运行时,Avalonia VB 6 无法加载或保存项目。
运行项目:此 IDE 允许开发者直接在设计环境中运行项目,测试应用程序的基本功能和界面效果,使开发过程更为高效。
支持部分 VB6 语言特性:尽管语言支持还不完全,这个项目提供了一定的 VB6 语言兼容性,使得开发者可以使用经典的 VB6 语法编写应用程序。
这些功能让该项目不仅可以复刻 VB6 开发体验,还能够更好地适应现代跨平台开发需求。
对此,也有开发者尝试借助 Avalonia VB 6 在 Mac 上运行 Visual Basic 6 IDE,其表示,「我们在 Apple Silicon 的 Mac 上编译并运行了这个项目,看着熟悉的界面重现出来,让人又感叹又觉得恐怖。感叹的是它模仿得真像,几乎和原版一模一样。恐怖的是,仿佛看到当年 VB 6 的种种限制:用在大项目时,代码容易变成“意大利面条”式的混乱代码。」
借助 Avalonia VB 6 在 Mac 上运行 Visual Basic 6 IDE 的实现
不知你是否也有这样的记忆?
项目作者:复现只是为了好玩与怀旧
之所以开发这个项目,Bartosz Korczynski 表示,“如果重现老旧的用户界面可以算是一种爱好,那这就是我的爱好…开发这个项目纯粹就是好玩和怀旧!这是一个玩具项目,没有其他用途”,但殊不知他的这个爱好同时解决很多人的痛点问题。
回看 Visual Basic 6 (VB6) 的发展,其整个历程充满了创新与挑战。它是微软在 1998 年推出的一款可视化编程工具,是当时非常流行的开发环境之一。
作为经典 VB 系列的最终版本,VB6 的到来象征着一种简单、高效的应用程序开发方式的巅峰。最初,Windows 桌面应用开发要求开发人员具备复杂的 C 或 C++ 编程技术,以及对 Windows API 的深入了解,而 VB 则彻底改变了这一点。
VB6 拥有图形用户界面(GUI)和快速应用开发(RAD)系统。通过简单的拖放操作,开发者可以快速创建窗口、按钮、文本框等控件,直观地设计应用界面。同时,这款 IDE 也以简易的图形用户界面和对数据库的支持(如 ADO 和 DAO)闻名,尤其适合开发商业应用。
正因此,VB6 当时一经发布,便迅速受到开发者青睐,特别是在企业软件开发领域,被视为易于上手的高效开发工具。
遗憾的是,微软在 2002 年发布了 VB.NET 对 VB6 带来了巨大的冲击,前者是基于 .NET 框架而非传统的 Windows API 构建,且语言语法和 VB6 存在显著差异,导致 VB6 应用程序很难直接迁移到 VB.NET。这一改变使部分开发者感到失望,因为他们需要投入大量精力重写代码。
论及微软为什么非要放弃 VB6,而选择 Visual Basic .NET?
前微软高级科学家 Daniel Tallentire 早些时候在问答社区 Quora 做过回应,其表示:
“.NET 解决了 VB6 存在的许多底层问题。微软不想维护太多不同的语言,最终 VB.NET 占了上风。
我能想到的一些具体问题包括:
DLL / OCX 问题——在部署甚至开发时,DLL 或 OCX 文件常常出现问题,可能由于 OCX 文件损坏,或系统上的 Office 安装出现问题,导致某些功能无法正常工作。
项目文件中的二进制组件——表单文件中包含无法用于源码管理的二进制组件。如果你使用了错误版本的 .frx 文件,必须回退并重新做 UI 更改。
表单、类、对象和单例——这些问题虽然可以解决,但 VB6 的面向对象编程(OOP)实现不够清晰,导致表单和内存管理经常出问题。
线程处理——VB6 没有可行的多线程支持。”
在这些原因驱使下,微软愈发专注于 .NET 平台,VB6 的开发生态逐渐式微,社区也逐步转向支持更现代的编程语言和框架。最终,微软在 2008 年 4 月 8 日停止支持 VB6 IDE,将其降级为旧版。微软 VB 团队仍然通过其在受支持的 Windows 操作系统上的“It Just Works”程序保持对 VB6 应用程序的兼容性。
仍有大量的 VB6 遗留程序和代码存在于现实项目中
时至今日,VB6 已经停用了多年,但不容忽视的是仍有大量遗留应用和忠实用户在依赖 VB6,且至今 VB6 应用依然存在于一些传统业务系统中。
Bartosz Korczynski 如今复现了 VB6,也让人颇为兴奋。对此,外媒 Devclass 评价道,「如果 Bartosz Korczynski 或其他人能找到一种办法,让 VB6 应用能够跨平台运行,或者把它们迁移到 C# 语言中以方便后续的维护和功能扩展,市场上可能会有不少人感兴趣,因为目前依然有很多公司在使用这些旧应用。」
国内为什么只有 toC 或 toB ,鲜有高手玩家开发 IDE 技术工具型软件
鲜有高手玩家开发 IDE 技术工具型软件,如 IDE 技术工具型软件Visual Studio、JAVA、Python、JetBrains、MathWorks、Altium Designer(PCB 电路板设计)、CADENCE(芯片设计EDA)。阿里、字节、京东、腾讯、斗鱼、抖音、拼多多、金山办公都是基于 toC 或 toB 的应用平台。
1、 toC 或 toB 等面向客户应用或互联网应用市场需求大、效益短平快、容易快速构建和上市获利以及市场推广
2、 IDE 技术工具、PCB 设计、EDA 芯片设计等,甚至涉及底层的完全独立自主的操作系统,硬件内核构建存在重重壁垒。都具备开发难、周期长、回报周期长、获利难、推广难。
3、硬件内核制约软件生态的技术积累和人才发展,起步晚,技术积累没有国外成熟,很少有核心底层的开发,大多都是基于应用层开发。
总之,硬件和软件的框架都是基于国外长期积累和发展下搭建的技术竞争体系
特别注明: 所有涉及 linux/Uinx 开源系统的衍生系统都不是真正具备完全独立自主的国内操作系统,硬件涉及 linux 内核指令集(如CPU固件是 linux 内核指令集,只能运行 linux 类系统)。