@hanting003
2017-03-15T17:26:14.000000Z
字数 3042
阅读 840
VS2017与微软技术的“新常态”(一):编程语言与工具体系
VS2017于2017年3月7日如期发布了,这也许是3月技术圈的最重要新闻之一。时值Visual Studio二十周年之际,全新的VS17不负众望、诚意满满,证明了自己绝非不痛不痒的年货式更新,具有颇多看点和干货。更重要的是,新版VS折射出了微软对于业界技术趋势的最新思考,以及拥抱开发者社区的全新姿态。新任CEO纳德拉执掌公司后,似乎的确给微软带来了巨大的思维方式的改变——用一句时髦的话来说,整个微软的技术栈及其工具体系已逐渐进入了一个良性的“新常态”。本系列文章试图通过梳理看似碎片化的诸多特性和更新,从不同视角入手来观察和讨论Visual Studio乃至整个微软技术栈的基因变化。本文先从Visual Studio 2017的编程语言与工具体系谈起。
编程语言及其工具体系
众所周知,VS的当家语言是C#。C#现已是一门支持多种范式的主流编程语言,历久弥新,在世界范围内拥有众多拥趸。新版Visual Studio按照惯例带来了全新的C#语言版本C# 7,新增了Out变量(Out variables)、元组值类型(Tuples)、引用返回(Ref locals and returns)、本地函数(local functions)等特性(具体可参见 [1])。C# 7的演化思路很清晰,是在C#6的基础上带来稳健的增量更新,使代码更为简练,可读性和可维护性更强,进一步巩固了C#主流编程语言的地位。
最值得一提的新特性,恐怕要数模式匹配(pattern matching)了。这一标志性的函数式编程范式引入C#后,巧妙地融入了原有的is关键词和switch语句,可在诸多场合大幅简化繁琐的变量声明和类型转换,凸显业务逻辑本身。(示例?)与此同时,我们还能够看到C#语言团队的谨慎和克制——因为原本模式匹配本可以做得更加深入,如加入match关键词和类型分解(destructuring)等高级特性,但C#团队最终选择了避免激进变化,采用了更温和更稳健的策略。这样的一种克制,对于C#这样具有较重历史负担和大量遗留代码的语言来说,是一种对庞大的用户基数负责任的态度,也降低了众多C#开发者学习和升级的门槛。
C#众多新特性的背后,离不开Roslyn编译平台的坚定支撑。历经数年孵化的Roslyn使用C#实现了一个现代的C#编译器,现在已能完全替代原有的C++实现,真正走向了成熟。(历史?)任何语言的生命力源于一个开放的、架构良好的、可维护的编译器code base。开源的Roslyn做到了这一点。像前面提到的模式匹配的类型分解,其实在Roslyn平台上实现并不困难,甚至已经有了相关分支和代码(?)因此,全新出发的Roslyn平台,是C#后续良好快速发展的保证,我们对C#的未来应当充满信心。
Roslyn带来的另一个好处是强大的编译器API和元数据暴露能力,也在VS2017中得以体现:生产效率辅助。在VS2017的工具演示中(?)我们可以看到,最常用的查找所有引用("Find All References")的结果得到了良好的格式化和语法高亮,还支持更多的展现选项;Ctrl+.的智能提示组合键也变得更加强大,覆盖了更多场合,相信其背后都来源于Roslyn的加持。之前类似的feature可能需要通过第三方商业工具(如JetBrains的Resharper)才能拥有,而现在已经能够在Visual Studio中直接内置了。
Typescript是微软近年来的另一个重大投入,由C#之父 Anders Hejlsberg亲自掌舵,可以理解为Javascript语言的一个超集。Typescript的设计和发展的思路紧紧围绕两点:一是引入可选的强类型体系和机制,以提供强大的编译期检查和智能提示;二是全面拥抱乃至提前实现ECMAScript标准,使得众多开发者可以第一时间尝鲜,不必等待浏览器的内置支持,而对标准的遵循也使得开发者的学习成本得以摊薄。这两个正确的设计决定让Typescript具备了鲜明的强类型生产力特征,同时又能和Javascript和Node.js的已有社区成果深度兼容。因此,Typescript一经推出就广受欢迎,在近年不断获得关注和采用。如与Angular2框架的深度合作(?link),堪称微软与谷歌开源技术合作的破冰之旅。
毫无疑问,VS2017自然内置了最新的Typescript 2.2版本。除去在Visual Studio中开发和编辑Typescript代码的丰富体验外,基于Typescript的核心能力和强类型生态,Visual Studio 2017还全新打造了Javascript Language Service(原开发代号"Salsa")来支撑在新版VS中的Javascript tooling体系。换句话说,微软基于Typescript的能力打造了为Javascript开发服务的语言基础设施,类似Roslyn对于C#的基石作用,使得VS中Javascript相关的智能提示、代码导航、代码重构等体验取得了大幅改进。之所以相关能力可以跃升,基于Typescript的静态代码分析引擎功不可没,它替换了老旧的利用动态执行获取信息的Intellisense引擎 。Javascript编辑时上下文中的静态类型信息既可以来自Typescript强类型生态定义(.d.ts定义文件,?DefinitelyTyped),也可以来自社区常见的JSDoc,这是又一个亮点。
此外,Typescript近期版本还不断地加强了对JSX的原生语言级别支持(JSX自Typescript 1.6版本开始引入),从面向React.js的JSX一直到为React Native优化的JSX支持,倾听社区声音的Typescript非常接地气 ,体现了对流行框架的支持和融合。
微软技术栈中的其他语言,也在Visual Studio 2017中得到了更新,如F#和Visual Basic。篇幅所限,此处就不再展开赘述。但这两个语言的发展策略已经非常明确,F#提出要成为具备最佳工具生态支持的现代函数式编程语言,而Visual Basic将一定程度停止对C#的简单克隆,着重思考和发展自己的特色。
最后,伴随着新生的Visual Studio 2017一起陆续走到前台的同门兄弟,还包括开源、跨平台、多语言支持的轻量级开发环境Visual Studio Code以及由Xamarin Studio发展而来的Visual Studio for Mac,它们都已是Visual Studio大家庭里的重要成员。前面文中提到的C#、Typescript等语言的新版本和新特性,得益于相应语言基础设施的开放性和模块化,也都可以在VSCode和VS for Mac中找到并使用。例如Visual Studio Code中完善的C#支持,是通过一个巧妙的被称为Omnisharp Server的后台Http服务进程实现对代码结构的实时解析和智能提示,而站在Omnisharp背后的正是Roslyn。
新时代下的VS家族已经完成布局,以Visual Studio 2017领军,形成了一个开发生态的阵列。"Any Developer, Any App, Any Platform",这是Visual Studio和微软的新口号,让我们拭目以待。
在之后的系列文章中,我们将继续探究Visual Studio 2017及其涉及的技术热点与话题。