從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,開始是繁雜的,隨着時間的發展,人們形成了印象,才化繁爲簡。這種過程一直在發展,這也是扁平化的由來,信息被壓縮,如此而已。

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