整理 | 屠敏
出品 | CSDN(ID:CSDNnews)
C# 发展多年以来,很多程序员喜欢用它来编写各种工具类软件。近日,向来奉行「Talk is Cheap,Show me the code」的程序员又开始了新一轮的“整活”,其中一位名为 Bartosz Korczynski 的软件工程师心血来潮地用 C# 重建了 16 年前被微软废弃的 Visual Basic 6(简称 VB6)IDE。
对他个人来说,最初只是出于兴趣,想要开发一个“有趣的玩具项目”。但没想到,项目刚搞定并在 GitHub 上开源(https://github.com/BAndysc/AvaloniaVisualBasic6)之后,便一举登上了 HN(Hacker News)的头条,引发了大量开发者的关注,甚至不少人留言,“希望这个被作者视为小玩具的项目能够持续下去,因为现在的我仍然必须定期与非常大的 VB6 代码库进行交互”。
用 C# 重构 Visual Basic 6
作者 Bartosz Korczynski 在 GitHub 上介绍道,这个项目被其命名为——“Avalonia Visual Basic 6”,采用 MIT 许可证,允许任何人免费使用、修改和分发相关软件。
只不过需要注意的是,此项目不具有任何商业目的,因为 Visual Basic 名称、图标和图形的所有权利均归微软公司所有。
最新复刻的 IDE 是基于 Avalonia 框架开发而成,这是一款开源、跨平台的 UI 框架,98% 的代码也是用 C# 语言编写的。类似于微软 WPF(Windows Presentation Foundation),Avalonia 专为 .NET 生态系统设计。与 WPF 不同的是,Avalonia 可以在 Windows、macOS、Linux、iOS、Android 上运行,甚至可以通过 WebAssembly 在浏览器里使用。
这也是当前 Avalonia VB 6 项目能在浏览器里运行的主要原因之一。
在浏览器里打开这款 IDE(https://bandysc.github.io/AvaloniaVisualBasic6/),还是让不少人感到惊喜,因为对比微软当初发布的 Visual Basic 6,这款重构后的 Avalonia Visual Basic 6 几乎有着相同的界面。
微软发布的 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 应用依然存在于一些传统业务系统中。
Bartosz Korczynski 如今复现了 VB6,也让人颇为兴奋。对此,外媒 Devclass 评价道,「如果 Bartosz Korczynski 或其他人能找到一种办法,让 VB6 应用能够跨平台运行,或者把它们迁移到 C# 语言中以方便后续的维护和功能扩展,市场上可能会有不少人感兴趣,因为目前依然有很多公司在使用这些旧应用。」
此外,也有开发者表示:
Bartosz Korczynski 的这种努力或许会为数百个遗留代码库带来新的活力。
这真是太疯狂了。我有太多的程序是用 VB6 编写的。VB6 是我精通的第一批编程语言之一——事实上,我在 20 多年前用 VB6 写的一些软件到今天还在我的工作站上运行。不过,VB6 的开发环境(IDE)在现代 Windows 上运行得并不顺畅——这个新项目可能为数百个遗留代码库的编辑和编译带来更便捷的途径。
真是酷。我几乎希望这不只是个玩具项目(不是对项目开发者施加压力,这只是我个人的愿望),因为我仍然需要定期处理一个非常大的 VB6 代码库。幸运的是,我们已经成功停止了新的 VB6 开发(是的,直到一两年前我们还在用 VB6 开发“新”项目),但我们仍然有很多遗留客户和代码需要维护。
面对开发者的热情评论,项目作者也对一些常见问题进行了解答:
问:Repo 链接?
答:https: //github.com/BAndysc/AvaloniaVisualBasic6
问:有网页版链接吗?
答:https: //bandysc.github.io/AvaloniaVisualBasic6/
问:哪些功能可以用?
答:可以创建窗体、编写 VB6 代码、运行程序、保存和打开项目,并生成项目(可以实际生成一个 .exe 文件!)。
问:为什么要做这个项目?
答:纯粹是为了乐趣和怀旧!这是个玩具项目,没有其他用途。
问:VB6 代码是编译成本地代码还是至少 IL(中间语言)?
答:不是,VB6 代码是解释执行的。不过运行时兼容 NativeAOT,因此当你“生成项目”时,会得到一个解释 Visual Basic 6 代码的原生 EXE 文件。
问:是否支持完整的 VB6 语言?
答:完全不支持。只支持一部分 VB6 的功能,但我计划增加更多的语言特性支持。
问:是跨平台的吗?
答:是的!界面是用跨平台的 Avalonia 做的,所以 Avalonia Visual Basic 6 也支持跨平台。
问:看起来很有趣,我可以贡献代码吗?
答:当然可以,欢迎 PR!
问:微软会起诉你吗?
答:微软,请不要这样 ;___;
参考:
https://www.reddit.com/r/dotnet/comments/1goevsy/comment/lwi00df/
https://devclass.com/2024/11/12/visual-basic-6-recreated-as-a-cross-platform-ide-in-modern-net-just-for-fun/
https://github.com/AvaloniaUI/Avalonia
https://github.com/BAndysc/AvaloniaVisualBasic6/blob/master/README.md
https://www.quora.com/Why-has-Microsoft-abandoned-Visual-Basic-6-in-favour-of-Visual-Basic-NET
热门跟贴