从Visual Studio 14 CTPs说起 顶 原

今日早上打开开源中国网站,突然发现Visual Studio 14 CTPs发布了。便立刻下载起来。好家伙ISO镜像都有4GB,想想也是,开发工具都是巨象,你要知道SVN checkout GCC的源代码都是若干GB,编译GCC,磁盘至少得有10GB以上空间,step1 2 final,编译LLVM 10GB很正常的,况且编译出来后,就只有tools+自带的STL,或者没有,SDK,好吧,在Windows上那不完整不好用。不过以前Visual Studio只有2GB的,Visual Studio有越做越大的趋势了么?当我下载下来,便释然了,Visual Studio 14 CTPs ISO镜像里面有Windows Phone 8,8.1的SDK,Visual Studio 2012的编译器 Windows 8,8.1的SDK,当然重点还有Visual Studio 14的IDE,Tools,一应俱全,如果是正式版,并且你需要在Windows上开发Windows Windows Phone 以及使用Xamarin开发Android iOS应用,你可以删除其他开发工具,以前版本的Visual Studio。如果你想不可救药的支持Windows XP的开发,放心在packages\XPSupport文件夹下依然有XP Support的工具链供你选择,但是我不建议你这么做,如果你喜欢Windows请抛弃XP,如果你不喜欢Windows,请不要留恋XP。

如果你不想安装Visual Studio 14 CTPs,但是又想体验新的工具,如何做?事实上,Visual Studio ISO镜像中,绝大部分组件都是使用Windows Installler XML,也就是.msi文件,系统内置的msiexec可以解压msi安装包,命令格式如下:msiexec.exe /a "msi地址" /qb Targetdir="解压地址",也许你会说,没必要那么麻烦,命令行太麻烦了,这里介绍一个工具,基于Win32开发的ExtractMSI,封装msi解压命令,支持文件拖拽,所以免去了很多麻烦。下载地址:http://pan.baidu.com/s/1szHIn,记得下载后杀毒软件先扫描是否有毒。如果觉得好就给本文来32个赞吧。

在Visual Studio 14 CTPs镜像的packages\VisualC目录中,就是Microsoft C/C++ Compiler 19的目录,有编译器(amd64,amd64_arm,amd64_x86,x86,x86_amd64,x86_arm),对于平台的Library,Header,以及ATL,MFC的Header,Library。以及dll。哎,实话跟你们说ATL,MFC的这个版本3月25代码就定型了。和Visual Studio 2013的貌似差不多。如果你用Beyond Compare 之类的工具比较发现,改动的都是安全性的。差别较大的应该是CRT,msvcrxx.dll已经没有了,msvcpxx.dll还在,在Visual Studio 14 CPTs中,msvcr140.dll不存在,取而代之的是appcrt140.dll desktopcrt140.dll vcruntime140.dll,我建议你尽管用Dependency Walker 去了解这些组件的依赖,我劝你使用mt把Dependency Walker 的样式改成Vista样式。mt.exe –manifest MyApp.exe.manifest -outputresource:MyApp.exe;1

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="HuxizeroStudio.OjRun.app"/>
   <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="6595b64144ccf1df"
          language="*"
        />
    </dependentAssembly>
  </dependency>

</asmv1:assembly>

我们可以看到依赖vcruntime140.dll 依赖appcrt140.dll,desktopcrt140.dll依赖appcrt140.dll,Windows 8推出了Windows RT,而Windows RT的C/C++是Native的,我们可以推测appcrt140.dll是Windows App和Windows Desktop应用的公共部分,也就是说二者都可以使用,而desktopcrt140.dll则是Desktop专用的。那么vcruntime140.dll呢?

在Microsoft Visual Studio 14.0\VC目录中有个文件夹crt,子文件夹src,里面有appcrt140.dll desktopcrt140.dll 以及vcruntime140.dll的主要代码,在vcrumtime文件夹发现一个文件名特别pureMSILcode.cpp,vcruntime140.dll应该是支持clr的,但是可以肯定的是vcruntime140.dll没有clr头,能够使用PE Explorer反汇编,用IDA Demo反汇编也是如此。crt的代码质量非常不错,可以自己去围观。

vccorlib140.dll是Windows RT的core library,依赖appcrt140.dll vcruntime140.dll,msvcp140.dll(msvcp140.dll是C++的运行时库包含STL),但是msvcp140.dll依赖了vcruntime140.dll 和desktopcrt140.dll 和appcrt140.dll,问题就在于desktopcrt140.dll被简介引入了,如何隔离这是存在的一个问题。

至于Visual C++的新特性,在MSDN Blogs C++中有文章介绍 Visual Studio “14” CTP  以下是C++的特性


  • Generalized lambda capture
  • User-defined literals in the language and standard library
  • Completed noexcept
  • Inline namespaces
  • Thread-safe "magic" statics
  • Unrestricted unions
  • Includes November 2013 compiler CTP features
  • Null forward iterators
  • quoted()
  • Heterogeneous associative lookup
  • integer_sequence
  • exchange()
  • get<T>()
  • Dual-range equal(), is_permutation(), mismatch()
  • tuple_element_t
  • Filesystem "V3" Technical Specification (TS)
  • Library Issues
  • <chrono> fixes
  • Minimal allocator fixes
  • C99 library features
  • __restrict
  • Improved diagnostics
  • The /Wv flag
  • Compiler software updates:
  • Refactored C Runtime (CRT)
  • stdio performance
  • Object file size reductions
  • Debug checking fixes
  • Debugger visualizers
  • Native memory diagnostics

在以上C++的特性中,我觉得有几点非常令人期待,第一是实现了Microsoft Visual C++ Compiler Nov 2013 CTP的所有新的功能,还进一步扩展了C++11/C++14的支持,比如说完整的noexcept,,noexcept一直是开发者迫切希望Visual C++支持的,还有就是大修了CRT,Refactored ->重构,以前的msvcrxx.dll从此不复存在,msvcrxx.dll“职权不清晰”在Windows RT推出之后确是需要充分变革支持Windows RT。还有一些如Filesystem(这个是TR是技术报告的意思,TR接纳的库以后可能成为标准库的一部分)v3,微软的C++编译器在标准化上真正的做出了努力。这其中还包括C99的完善。修复了以前编译器的Bug,不过作为CTPs不建议在生产环境中使用,至少得等到RC版本释放才建议使用。

Visual Studio CTPs在C#、VB.NET上试用了Roslyn编译器,F#的编译器也升级了,ASP.NET支持ASP.NET vNext,前阵子开源的那个,ASP.NET vNext的.NET Framework提炼出一个.NET Core Framework,如果要尝鲜可以在虚拟机中安装。

不过.NET Framework 依然是4.5.1,可能在今年底晚些时候释放Visual Studio 14的更新的预览版,与2015年最终释放。我们可以预测在2015年应该是Windows 9发布的时候Visual Studio 2015也就是Visual Studio 14发布,为什么没有13,西方人就是不喜欢13。

贴图


下图是基于C++ 使用WTL Direct2D DirectWrite 编写的Native的USB启动盘制作软件,使用MVC模型,多线程,名称空间。


最近几个月,微软给开发人员的感觉就是眼前一亮。我觉得这至少是一个好的开始。这几天比较火的是Swift,Swift是LLVM之父Chris Lattner开发的,如果还不让你们觉得好那就对不起观众了。语言和开发工具总是在不断的变革,你用的方便便是好的。正如C#,.NET的粉丝,他们看到了希望,因为他们的工具在变得越来越符合他们的口味,C++开发者也应该满足,新的库和工具让你们支持其软件的基石,别忘了Swift在LLVM的支持下牛逼哄哄,该为现代的C++感到自豪,我一直在D社区说,dmd的老式代码不足难以支撑D语言的繁荣,ldc也不能果断的抛弃对dmd依赖。那是数字火星时代的技术在支持,C++的圣战早已被人淡忘,如果要发展D语言不是像LLVM的用C或者C++写现代框架来实现D语言,就是用D语言自举自身。Embarcadero C/C++(Borland C/C++的继承者)的64位产品都在使用LLVM的代码,LLVM如日中天,给了GCC很大的压力,GCC正在转向C++实现现代的编译器,这种竞争是乐于看到的,不仅需要看到开发工具的竞争,语言的竞争,平台的竞争,唯有竞争才有动力去革新,因循守旧,跟不上时代的变化,迟早落败,IE6便是如此,到IE12依然在填坑。UI的变革玩玩是众说纷纭,OS X 10.10的扁平化出来之后,如同Windows 8 时同样被人吐槽,UI的发展总是将现实的物体搬上LED,开始是繁杂的,随着时间的发展,人们形成了印象,才化繁为简。这种过程一直在发展,这也是扁平化的由来,信息被压缩,如此而已。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章