采访 Microsoft 新任 Visual C++ 架构师 Stanley Lippman






4.42/5 (7投票s)
Stanley Lippman 谈论 Visual C++ .NET 的未来
Stanley Lippman 在 C++ 语言和整个 C++ 社区拥有悠久的历史。他是 C++ 的首批用户和实现者之一,曾在 Bell Laboratories Foundation Project 师从 Bjarne Stroustrup 工作,是 Walt Disney Feature Animation 的首席软件工程师,并撰写了《C++ Primer》等许多广受欢迎的书籍。
Stanley 最近加入微软,担任 Visual C++ 的架构师,于是我与他进行了一次谈话,了解他对 Visual C++ 的过去、现在和未来的看法,以及他个人为 Visual C++设定的目标。首先,我的目标是为我们 C++ 开发者提供一个明确的答案,关于未来将会有什么。我们很多人都在想,我们的技能在 .NET 世界里是否仍然有价值?C++ 是否会被限制在 win32 开发?微软是否会兑现其追求 C++ 标准的承诺?
需要记住的是,Stanley 是 Visual C++ 语言的架构师——而且是新上任的——因此像 MFC、ATL、WTL 这样的库以及 Visual Studio 这样的工具都超出了 Stanley 的职责范围和经验。因此,本次访谈集中在大多数开发者一直在问的问题上:Visual C++ 的未来是什么。
首先,我问 Stan 是什么吸引他来微软工作。
Stanley 的背景是 Unix,并且他针对许多不同的平台进行过开发。显然,有些平台比其他平台容易。当谈到 .NET 时,Stanley 绝对喜欢它背后的理念。“这个框架很棒,丰富而有趣。”Stanley 曾在一些平台上工作过,在那里即使是像多线程这样简单的概念都极其难以实现,因此拥有一个全面的基类库,提供全面的多线程模型,并且可以使用您选择的任何 .NET 语言进行访问,这一点非常重要。
Stanley 最初对 Visual C++ 在 .NET 中的定位只有有限的认识,但在进一步研究后,他惊喜地发现 C++ 并没有被排除在 .NET 之外,实际上它是 .NET 的一等公民语言。
那么,您认为 Visual C++ 的未来是什么,作为新任架构师,您的目标是什么?
Stanley 对未来非常明确:“我相信 Visual C++ 有一个光明的前景”。他已经会见了 Visual C++ 团队,并说他们有着不可否认的热情和活力。他的目标很简单:“我希望 Visual C++ 成为首选的 C++ 实现”。Stanley 的个人目标是让 C++ 开发者选择 Visual C++,不仅仅是因为工具和平台,更是因为它是 C++ 标准的卓越实现。
编译器合规性
在 C++ 合规性方面,Stanley 承认最新版本(Visual C++ 7.0)尚未完全达到目标,但底层实现的重大工作意味着向更全面合规的实现迈进是触手可及的。他将大力推进合规性,尤其是在模板方面。
尽管 Visual C++ 7.0 没有 Stanley 希望看到的全套功能,但他表示这仍然是微软发布的最合规的 C++ 实现。它并不 100% 完美,但仍然是一个出色的编译器,对标准具有高度的合规性。仍存在问题的领域已在 VS.NET 文档的“Visual C++ 中的标准合规性问题”一文中进行了全面记录。
微软的目标是拥有一个“具有竞争力的合规”编译器——这意味着它不会 100% 合规。ANSI/ISO 标准中有一些特性(例如应用于模板类的‘export’关键字)将不会被实现,因为微软认为它们晦涩难懂,并且在此阶段只是理论上的。然而,微软正在努力确保 Visual C++ 能够编译 Boost、Blitz、Loki 等最流行的库,以及完全合规的 STL 版本。重点在于允许编译流行库的合规级别,而不是 100% 合规。
微软 C++ 产品经理 Nick Hodapp 也补充说,虽然高度合规性绝对是一个非常重要的目标,但微软不会以牺牲代码生成质量或健壮性为代价来实现极端的合规性。然而,在最近的实验室测试中,他们在合规性测试中仍然击败了几个流行的编译器。
我们什么时候能看到下一版本?
Stanley 笑着用他自己的话来说,如果由他来决定,他会每周发送更新邮件,但像质量控制和流程这样的琐事,对于像 Visual C++ 这样复杂的东西来说,是必须遵守的。随着最新版本将于 2002 年 2 月左右发布,他希望在同年晚些时候能发布编译器的更新,但不确定是否可能。他一定会争取尽早更新。Nick Hodapp 也证实了这一点,他说 VC7 的更新很可能在明年可用。微软正在研究明年发布编译器更新的最佳机制,该更新将侧重于合规性功能。
许多 C++ 开发者认为微软正在为了 C# 等新语言而将 Visual C++ 置于次要地位。
Stanley 希望 C++ 在 .NET 中的作用比现在更大。目前,托管 C++ 的最大优势是作为一种过渡语言。您可以将原生应用程序迁移到 .NET 框架,或在原生应用程序中使用 .NET 组件,但它还不是开发完全托管应用程序的首选语言。
对于即将发布的 Visual C++ .NET (VC7),微软专注于实现互操作性功能。VC7 拥有所有托管语言中最优的互操作场景,并且能够在一个映像中同时包含托管和非托管代码。他们还专注于生成 MSIL 的优化技术——结果是 VC7 是唯一生成优化 MSIL 的编译器。在未来的版本中,微软将专注于 ANSI/ISO 合规性(为托管/非托管代码启用更多功能),以及使 Visual C++ 与 C# 功能对等的功能——例如 WinForms。Visual C++ 将被定位为 .NET 的高性能系统语言。
模板支持和泛型编程是必须的,微软非常热衷于为 ASP.NET 和 WinForms 实现 codeDOM 支持。有了这些新增功能,Stanley 认为 Visual C++ 将成为 .NET 框架的首选高性能程序员语言——以补充其目前作为非托管开发首选语言的角色。即使没有目前正在追求的模板支持,Stanley 也认为 Visual C++ 是那些需要比 C# 或 VB.NET 更多功能的人的唯一合适语言。
Stanley 接着祝贺微软正在从以企业为中心转变为一个更以开发者为中心的企业。为此,他将更加努力地向开发者开放公司,并希望微软能更积极地响应开发者社区。微软以推动创新而闻名,但如果走得太快,不仅会脱离标准,还会脱离开发者的需求,这其中存在危险。Stanley 将努力确保微软更多地倾听开发者社区的声音,同时确保更高的标准合规性。
C99 规范中的新功能等
在将 Visual C++ 扩展以支持 C99 规范中的新功能方面,Stanley 表示这些是相关标准机构的问题。人们越来越担心 C 和 C++ 之间出现裂痕,C++ 不再是前者的超集。微软的目标是实现最符合标准的应用,因此如果 C++ 标准更新以包含新功能,微软将努力在 Visual C++ 中实现它们。
微软添加新功能的做法是,这些功能是否
- 在其他编译器可以构建的代码中使用,或者
- 这些功能是否足够吸引人,以至于显而易见客户想要它们。
微软不会仅仅因为在标准中规定了某项功能就实现它。当人们需要它们并且它们有益时,他们才会实现它们。
给我们的信息?
信息是,Visual C++ 绝对是活跃且充满活力的,并且在 .NET 世界中拥有非常光明的未来。Stanley 的目标是使编译器达到与其他所有编译器在简单性、趣味性和合规性方面进行比较的基准。它应该易于使用、用途广泛、令人愉悦,并且当开发者想到 C++ 时,应该首先想到它。C++ 合规性的持续改进以及对 ASP.NET 和 WinForms 的未来支持,将确保 Visual C++ 成为 .NET 和原生开发的*首选*高性能语言。
至于开发者是否会转向 C# 而非托管 C++ 的问题,Stanley 认为从 VB 转到 C# 的比例会比从 C++ 转到 C# 的比例更高。C++ 是更优越、更通用、并且是 .NET 中唯一可用的优化编译器。