微软新任 Visual C++ .NET 社区联络人专访






4.65/5 (7投票s)
Herb Sutter 已加入微软,担任其新的 Visual C++ .NET 社区联络人。阅读关于他是谁、他做什么以及我们心爱的 Visual C++ 未来将如何发展的报道。

由于 Herb 是微软的新成员,我利用了一些时间(好吧,是几个小时)来采访他,以便大家能了解他是谁、他做什么,以及我们心爱的 Visual C++ 究竟发生了什么。
Herb,您能否简单介绍一下您的背景,以及加入微软之前您在做什么?
我主要从事 C++ 的写作、教学和咨询工作,C++ 社区对我来说非常重要。顺便说一句,我将继续做这些事情;正是这种社区联系让微软觉得我是个合适的人选,他们也希望我继续这样做。
那现在具体是做什么呢?目前,我是 ISO/ANSI C++ 标准委员会的秘书,自 1997 年以来我一直积极参与该委员会的工作。我还撰写了四篇关于 C++ 的专栏,主要发表在 C/C++ Users Journal 上,我还是该杂志的半个编辑委员会成员,负责审阅和编辑其他作者的文章,并推荐发表和需要修改的内容。我与 Addison Wesley 出版社合作出版了两本 C++ 书籍:《Exceptional C++》和《More Exceptional C++》,目前正在创作另外两本,其中一本与 Andrei Alexandrescu 合作。我写的所有内容,除了书籍的最终定稿外,都会免费发布在我的网站 www.gotw.ca 上供公众阅读。自 1995 年 C++ 语言的主要新闻组 comp.lang.c++.moderated 成立以来,我一直是其版主。
同样,所有这些都将继续。新的是,我现在还将成为微软与所有平台上的 C++ 社区的联络人,而不仅仅是 Windows 平台,以保持 Visual Studio .NET 团队与社区的联系,并确保社区的需求能够融入产品。
是什么促使您决定加入微软?是他们说服了您,还是您主动联系微软?
我承认,如果是在两年前,那时微软似乎对标准 C++ 并不太感兴趣,那么加入微软的吸引力会小得多。但在过去的 12 到 18 个月里,我注意到微软的优先事项发生了真正的改变,他们恢复了参加委员会会议,开始为社区做出贡献,并在其产品的标准符合性方面取得了显著进展。令我们双方都高兴的是,我发现现在不仅现有 1998 年 C++ 标准的符合性对他们来说和我一样重要,而且他们也希望继续追踪刚刚开始开发的下一代 C++ 标准。
您在微软的角色是什么?
我的工作是作为微软与 C++ 社区的联络人。“社区”包括标准委员会、C++ 会议以及所有平台的开发者。毕竟,微软自然希望使其工具对所有人都有吸引力,即使是那些还没有使用它们的人,而符合性是实现迁移的重要一环。有许多原因,加上我个人原有的原因,促使我致力于实现当今的 C++ 标准并协助未来标准的开发。水涨船高,标准的符合性对每个人都有好处。
我希望在产品上留下显著的印记。所以现在我需要提前告知你们一件事,我想让它非常清楚,那就是“为什么”以及“何时”我会在产品完全符合当今标准之前就开始推动微软 C++ 的语言扩展。让我来解释一下,然后再阐述我的个人议程:
微软打算尽快 100% 符合标准 C++。就这么简单,毫无疑问。并非所有内容都会包含在下一个版本中,尽管许多符合性改进会包含在内。不可否认,还有一些追赶的工作要做,而且这一切不可能在一周、一个月或一个小版本更新中完成。但它会发生,并且会尽快发生。
话虽如此,让我告诉你们对我来说最重要的两类与符合性相关的特性,因为它们是 C++ 社区一贯告诉我的需求:我“必备”的特性组包括 100% 符合当前标准 C++(即 C++98)所需的一切。我的另一个“必备”特性组是社区非常清楚我们需要的关键扩展,但 C++98 中却缺失了,这通常只是因为疏忽或错误——是的,我们标准方面的人也是人,有时也会遗漏东西。其中一些只是明显的遗漏,它们肯定会以某种形式出现在下一版本标准(即 C++0x)中。
要点是:对我来说,这并不是两个列表,即你在完成第一个列表(C++98 符合性)的所有工作之前,就开始着手第二个列表(关键必要扩展)。对我来说,这些事情构成了一个列表,然后进行优先级排序,以便我们在每个版本中尽可能多地包含最重要的内容。这意味着你可以肯定,我会在产品中大力推动一些超出 C++98 的关键扩展,即使在我们完成所有 C++98 符合性工作之前,因为坦率地说,一些扩展对标准 C++ 社区来说比一些缺失的 C++98 特性更重要。我们肯定会完成所有 C++98 的内容,毫无疑问。但如果由我说了算,我们将按对全球 C++ 社区最有益的顺序进行——这是我被赋予的在微软内部推广的职责,那就是尽快交付全球社区所需的东西。
举个具体的例子:Visual Studio .NET(Visual C++ 版本 7.0)目前还不支持 C++98 标准中的“export”关键字,也不支持 C++98 标准中没有的 typedef 模板。(正如我稍后会指出的,其他人也还没有这两个特性。)在每次设计会议上,我都会据理力争,要求先将 typedef 模板添加到产品中,然后再支持“export”,因为 typedef 模板更为重要。尽管 typedef 模板不在 C++98 中,但这只是一个糟糕的疏忽;我不知道世界上有哪个专家不同意 typedef 模板是明显需要的,而且比“export”更需要。另一方面,截至我们今天的采访,世界上还没有一个已发布的 C++ 编译器支持“export”(微软并非孤例!)社区对此也并不热切呼唤。Edison Design Group 及其被许可方 Comeau 的编译器支持“export”处于测试阶段,并将很快上市,我认为这很好,但如果你让我坐下来,把“export”和 typedef 模板放在我面前,我每次都会选择 typedef 模板,即使它们不是官方的 C++98 标准,因为像 Boost 和 Loki 这样的关键社区库确实会从中受益;嗯,标准本身就必须进行那种奇怪的 allocator::rebind 技巧,只是因为我们没有 typedef 模板,而标准甚至这么说了!这比“export”重要得多。当然,我们也会支持“export”,但要循序渐进。
请不要误会,我当然不是在推销大量扩展,当然也不是任何没有明确需求和社区共识的东西。当我向微软提议这些功能时,我会在与世界上顶尖专家讨论过它们的重要性以及应如何规范之后才会这样做;我讨厌半生不熟的自制错误特性,我当然不是在追求这些。我正在推动的是一小部分经过精心选择和精心实现的扩展,这些扩展是社区所渴望的,并且不是专有的,而是相反:我们已经知道这些特性将肯定或很可能出现在 C++0x 中,并且我们希望所有编译器供应商都能提供。标准委员会有时可以很有创造力,但它主要应该标准化现有实践;我想通过提供这些关键的未来特性的“现场现有实践”,帮助微软帮助标准。事实上,通过尝试谨慎地运用微软的产品作为领导者,我个人希望推动整个社区在所有编译器和平台上前进,因为其他产品也受到鼓励去实现它们,这将使无论使用谁的工具的每个人都受益。
坦率地说,如果由我说了算,那么人们会问:“为什么微软在下一版 VS.NET 中加入了扩展 X,而他们还没有完成 C++98 的符合性?”我希望他们会问这个问题,因为如果他们问了,就说明我完成了我的工作。别担心,完整的 C++98 符合性,包括“export”和所有东西,都在加速进行,而且毫无疑问会完成。但如果由我说了算,我们将按照最能服务社区的顺序来完成这个统一的 C++98 和 C++0x 标准前特性的愿望清单,因为社区优先级是我在公司内部被赋予去推动的。
作为“社区项目经理”,您会直接参与社区吗?以何种方式?您会为社区和微软自身提供更直接的联系吗?我可以将我从读者那里收到的所有“如何在 C++ 中实现 X”的问题转给您吗?拜托?
是的,很多,是的,不,哦,拜托不要,即使您说“请请”也不行。咳咳。说真的,虽然有些问题可以,但至少要让人们先阅读 C++ FAQ (www.parashift.com/c++-faq-lite) 和我的网站 (www.gotw.ca),看看是否已经有公认的答案。
我的工作是了解社区想要什么。这就是为什么我将继续在会议上与与会者交流和倾听,在我的独立咨询中,在公开的新闻组上,在与我的专栏和书籍读者进行电子邮件交流时,以及在与顶尖大师和其他供应商在标准会议上的咖啡和晚餐交流中,以及我已经在做的所有其他事情。
C++ 开发者从微软那里得到的关注度仍然不如 VB.NET 或 C# 开发者。您希望改变这种情况吗?如何改变?
直到最近,这种情况可能更为明显。在过去六个月里,我看到了一些变化,我期待着看到更多。毫无疑问,微软正在投入 C++,无论是内部还是外部。敬请期待微软通过为平台无关的社区库做出贡献以及其他方式进一步参与社区。
您认为 C++ 在 .NET 世界中扮演什么角色?
C++ 仍然是 .NET 生态系统中最强大的语言,也是编写商业 Windows 应用程序最多的语言。这种情况在短期内不太可能改变。
您认为 C++ 的总体未来如何?
C++ 仍然保持相关性,占据主导地位,并被广泛且持续增长地使用。C++ 标准和标准化过程也继续保持相关性——自 1998 年第一个标准发布以来,委员会成员和参与度有所增加,最近我们参加 ISO 会议的国家比以往任何时候都多。通常,当一个标准完成后,委员会进入维护模式时,情况会相反——公司会停止派人,因为毕竟他们都有自己的工作要做。但在这里不同:即使在我们进入多年的维护模式期间,ISO/ANSI 的成员资格也从未如此强大,而且所有供应商,包括微软,都在那里积极致力于刚刚开始的下一代 C++0x 标准的开发。
C++ 的托管扩展收到了许多开发者的冷淡回应。您认为微软可以做些什么来使 MC++ 对典型的 C++ 开发者更具吸引力?
首先,MC++ 需要支持更多标准 C++ 的功能。还有(我该如何礼貌地说)更多的重叠空间。我想,这够含蓄了。团队正在努力解决这些问题。我认为 .NET 对 C++ 有好处。
您真的相信 .NET 对 C++ 有好处吗?为什么?
是的,我相信。我希望它能做出有价值的贡献,甚至可能超越 Windows 平台。
举个例子:在标准委员会和标准化过程中,自 C++98 通过以来,我看到了一些三个关键的反复出现的问题和愿望:a) “关于标准化线程支持怎么样?”;b) “关于将 C++ 编译到 JVM 怎么样?”;以及 c) “关于一个可移植的 GUI 库,一些有助于教学的基础东西呢?” 我认为 .NET 提供了所有这三个以及更多东西,并且使它们可供 C++ 程序使用,这一点非常有趣。特别是在我完全不知道我会加入微软之前很久,我就认为 .NET 是“更好的 JVM”(当然还有更多)。如果我们能在“托管 C++”和“标准 C++”之间实现更好的融合,而这是整个团队,尤其是 Stan Lippman 正在努力实现的目标,那么这一切将变得非常有趣,也许有一天,如果 C++ 委员会需要其中的任何部分,我们就能提供一些有用的标准技术。我这是以“委员会成员”的身份说的,而不是以“微软人”的身份说的。毕竟,这种可能性正是让我对参与微软并看看我能为委员会和社区做出什么贡献感到兴奋的想法之一,因为像其他人一样,我一直在寻找这些相同问题的答案,而这里有一项技术(在 ECMA 和即将到来的 ISO 中)正在标准化,而且它与 C++ 兼容!好吧,至少与很多 C++ 兼容。不过,我们还得看看进展如何。我认为现在还不能提交;我们几乎需要能在 .NET 上运行几乎所有的标准 C++,才能有一个委员会感兴趣的概念验证起点。这是一个目标。我们希望在力所能及的范围内做出贡献。
但是所有平台的 C++ 开发者都想要这些东西——线程、在虚拟机上运行、一个托管的 GUI 库。Windows 平台开发者今天已经拥有了很多,我知道 Visual Studio .NET 团队正在努力做得更好,这样您就不必牺牲太多标准 C++ 的内容来获得这些好处。
为什么 C++ 开发者应该对微软为 C++ 所做的工作感到兴奋?
除了我刚才提到的 .NET 相关内容,我认为它有可能帮助 C++ 语言本身,微软也致力于为 C++ 社区做出更多、更频繁的贡献。我的工作的一部分是确保微软在研究部门开发的内容能够更频繁地公开提交给 Boost 等社区库,以便所有平台的开发者都能从中受益。我们正在为此努力。抱歉,我得去和一些律师谈谈这件事;马上回来。
C++ 社区有多大?
这取决于您如何计算,但我看到的最可靠数据表明,全球开发者社区约为 950 万人,而使用 C++ 的约占 300 万。顺便说一句,在几乎所有我见过的研究中,这都远远领先于 Java,通常是 1.5:1 或 2:1 的比例。而且,顺便说一句,C++ 还在适度增长。所有这些都是在没有积极营销的情况下实现的,再次顺便说一下。关于 C++ 灭亡的报道,嗯,“被夸大了”。
是什么让 C++ 社区区别于其他类型的开发者?
C++ 开发者需要强大而且知道如何使用它。我一直认为你应该为工作选择最好的语言,我已经在专业领域使用了数十种语言。根据您如何计算语言,我去年可能在专业领域使用了大约十二种语言。那些希望编写高效、精简、快速代码的人往往会选择 C++,因为它能够用强大的代码完成工作,而不会牺牲效率。
那些想要成熟、稳定的编译器和工具的人往往会使用 C++,因为它已经存在了很长时间,而且工具和库非常丰富且可靠。根据我所见的最佳数据以及我作为开发者和访问其他开发者公司的顾问的经验,涉及超过几个屏幕的商业客户端应用程序开发、大多数类型的服务器端软件以及大多数类型的库,都比使用其他语言更常使用 C++ 来完成。
C++ 未来将如何发展?微软在其中扮演什么角色?
即将到来的 C++0x 标准将大力强调对库的补充,而不是对核心语言的修改。预计会看到一些经过精心挑选的核心语言扩展,例如 typedef 模板,但不会有像模板和异常当年那样重大的根本性变化。另一方面,在标准库中,确实会增加许多扩展,从显而易见的低成本内容,如基于哈希的容器和线程支持,到可能像虚拟机模型或基本 GUI 库这样大的东西,以及介于两者之间的许多有用内容。要大致了解您可能会看到的内容,请查看 Boost (www.boost.org),尽管我必须补充一点,我们在委员会中正在寻求整个社区的意见,不要认为 Boost 有什么内部稳操胜券的机会。
与其他的 C++ 供应商和专家一起,微软将继续作为 ISO/ANSI C++ 委员会的积极参与者,贡献其专业知识,以帮助制定和完善改进未来 C++0x 标准的提案。如果委员会认为其技术或研究可以帮助 C++ 语言的发展,它也希望贡献自己的技术或研究。微软现在致力于支持社区,并成为积极的参与者和贡献者。
C++ 目前有什么动态?有什么最新八卦?
C++0x,兄弟!这是一个全新的标准!或者,至少,当我们完成后它将是。再给我们几年时间,它现在才刚刚开始。在最近一次标准会议上,于 2001 年 10 月举行,我们已经开始审议第一批潜在的 C++ 标准库增补。共有七个提案,从线程支持到基于哈希的容器,它们都是相当独立的、小型的开始(好吧,线程的那个确实不小)。还有很多令人兴奋的东西在路上;这仅仅是个开始。我最近开始为 C/C++ Users Journal 写一篇名为“The New C++”的新专栏,将涵盖这些主题,实际上已经详细介绍了上述许多内容——请查看我出版页面 (www.gotw.ca/publications) 上标记为“TNC++”(专栏的缩写名称)的链接。
无论关于 C++ 光明未来的陈述有多少,悲观主义者总是利用这些陈述得出 C++ 已死的结论。您将如何回应这些悲观主义者?
我最近读了一篇 C++ 人士的采访,当被问及 C++ 社区的规模时,他说了类似的话:“这取决于如何计算,但我看到的最可靠数据表明,全球开发者社区约为 850 万人,而使用 C++ 的约占 300 万。这远远领先于 Java 在几乎所有我见过的研究中,通常是以 1.5:1 或 2:1 的比例。而且,再次顺便说一下,C++ 仍在适度增长。所有这些都是在没有积极营销的情况下实现的。关于 C++ 灭亡的报道,嗯,“被夸大了。”
我认为他说得有道理。