Compiling Objective-C Using the Visual Studio 2015 C++ Code Generation that Builds Windows, SQL, .Net, and Office

Download this episode

Download Video

Download captions

Download Captions

Description

This session covers the nuts and bolts of several key innovative compiler and runtime technologies we will be delivering in Visual Studio 2015 and its updates. New investments in the compiler and runtime space include: Improved optimization and auto-vectorization, /Guard secure code generation, incremental whole program compilation, and new asynchronous C++ code generation.

For more information, check out this course on Microsoft Virtual Academy:

Day:

2

Session Type:

Breakout

Code:

3-610

Room:

Room 3014

Embed

Format

Available formats for this video:

Actual format may change based on video formats available and browser capability.

    The Discussion

    • User profile image
      Thomas Derling

      Awesome talk. Extra credit to Jim Radigan for the indepth presentation (which I miss at most Build presentations)!

    • User profile image
      Puppy

      If you can compile C++ with Clang/C2, does this mean that we have completely MS-ABI-compatible compiler-as-a-library available now?

    • User profile image
      John Randolph

      A bit late, isn't it? Apple developers are moving to Swift in droves. Obj-C code is legacy at this point, just like Win32.

      -jcr

    • User profile image
      wef

      @John Randolph, MS's focus is to port existing IOS apps to Windows, most of the existing IOS app is in Obj-C, Swift can be addressed later

    • User profile image
      Chris Hatton

      As a professional iOS Developer, neither myself nor my colleagues consider ObjC 'legacy'.
      I like Swift as a language and am interested in it; but it still lacks many features - most notably reflection.
      Also the bridging between Swift and many frameworks which use pointers for performance e.g. CoreVideo is nightmarishly complicated. Swift is nice and concise for simple 'wrap a webservice' type Apps, but for more complex work ObjC still reigns.

    • User profile image
      John Randolph

      Chris, as an old NeXT developer who has been using Obj-C since 1989, I can count the number of times I actually needed to go traipsing through the runtime on one hand, so the limited support for reflection in Swift is really a red herring.

      As for handling pointers in Swift, it's really not that tricky. Examples of wrapping C pointers in Swift classes abound on StackOverflow and GitHub.

      >neither myself nor my colleagues consider ObjC 'legacy'.

      Heard that before.. Does the word "Carbon" mean anything to you?

      -jcr

    • User profile image
      wollnyst

      Great talk, great news...

      Is the ObjC compiler just applying for universal or for Win32 as well.

      So can I access MFC etc to provide a classical Windows UI and have XP compatibility?

    • User profile image
      Eric S

      Cool–both Objective-C support and better C++ interop with clang!

    • User profile image
      dougcarter

      Hi Jim, excellent work!

      I'm so excited I just downloaded VS 2015 RC but don't see any project templates for Obj-C. Did I misunderstand? Is this not yet available?

      Thanks,
      DJ

      (former Phoenix dev)

    • User profile image
      felix9

      @John Randolph: wrt Swift, please listen carefully to the end of Q&A section

      @dougcarter: not there yet, apply here https://dev.windows.com/en-US/uwp-bridges/project-islandwood

    • User profile image
      sosihui

      @John Randolph

      I hate Swift - it is tacky and ugly.

      On the other hand, Objective-C is beyond maturity. It is on par with C++ in terms of polish. So, I agree with Chris, Objective-C/C++ for the win!

    • User profile image
      Slipp Douglas Thompson

      @John Randolph: Objective-C isn't legacy because Swift is considered to many to not yet be stable— the current release, 1.2, adjusted the syntax further in a not-fully-backwards compatible manner.  Apple's approach looks to be similar to Ruby's— a lot of things shifted around throughout 1.0-1.9, and have settled since 2.0.  Regardless of what Apple intends to do, Apple's holding no bars regarding the still-changing nature of Swift.  This is probably one main reason why Microsoft isn't jumping to implement it.

      However, Swift is just a language— the API remains the same, and the runtime is (almost) the same as Objective-C's.  There's little reason why a Swift-to-Objective-C intermediate compiler couldn't be written.  And there's little reason for companies settled in Objective-C to use Swift for anything but brand-new projects. It's a nice, simpler syntax (IMHO), with a bunch of coding productivity enhancements that look a lot like Boost C++'s extensions (Boost smart pointers especially), but it's not a game-changer.  Every Obj-C programmer should be able to jump into Swift quickly, and Swift-only programmers wouldn't have too much trouble with Obj-C (assuming they also know the nuances of plain-C).

    • User profile image
      Hakime

      What I am going to say is surely provocative but I am going to say it anyway because I don't like dishonest people. In engineering like in science, I consider that it is important to properly and clearly acknowledge someone else work when taking and using the work done by other people. And obviously the two speakers in this session can't or don't want to do that. This happens two times during the presentation for each speaker respectively, that is:

      - The first speaker mentions the use of Clang for compiling Objective C and C++ without nowhere in its slide a mention indicating where Clang comes from or even a link to Clang/LLVM project web site. I know that most people have at least heard about Clang but you can't just say that you use the product even being open source without any mention or acknowledgement of the work done that came to produce Clang. The speaker even while confusingly speaking about compiler technologies almost makes sound that Microsoft has anything do with Clang. Now I suspect that Microsoft is not really comfortable in acknowledging that it's using a compiler originally designed by Apple in order to save its mobile operating system but this is then just a childish and immature attitude.

      - The same attitude prevails with the second speaker which at some point is speaking about providing support for Objective C blocks and ARC. Without again any indication on where this comes from. Of course that they can provide blocks and ARC support, Clang gives them for free. And in fact blocks and ARC being designed and implemented by Apple, the speaker must have mentioned that they use Apple implementation because this is what they are doing. I really don't understand this attitude of not properly acknowledging the source of what they are using. One must be fair, Apple developed it, made it open source, and Microsfot is using it now. That's ok, just acklongedge the people who have done the work that you are using.

      Then concerning the API support, again the second speaker was also not clear. What Microsoft is doing here is really implementing copyrighted APIs and that brings the question on whether Apple will like that (I guess they are not really happy seeing Microsoft messing up with their APIs) but also the question on why? Is Microsdoft so desesperate to attract developers (and users) to its mobile platform that it ended up using large resources to reverse engineer iOS APIs instead of trying to develop an attractive solution on its own?

      Concerning Swift, I don't really agree about some above comments about the language, the language is of course very young but calling it only useful to warp web services is laughable at best. In fact it really departs from Obective C in so many good ways, and this is a big fan of Ojective C telling you that.

      But when it comes to the support of swift by Microsoft, th really question is how. Microsoft had basically nothing to do to support Objctive C, they got everything for free by using Clang as the front end compiler. Apple has not yet I believe made available the source code of Clang that compiles swift so will Mcrosoft wait for that to happen? Or will they implement their own support of Swift in Clang knowing that an implementation already exists (and I believe that Apple will open source it at some point)? I don't really see Microsoft implementing itself support for Swift given that the language is still in moving shape and that Objective C is still heavily used by iOS developers.

    • User profile image
      flav3r

      one of the best damn talks EVER !

    • User profile image
      copernicus

      While you may be honest Hakime, your complaints just got rightly addressed by Peter Bright

      [... without nowhere in its slide a mention indicating where Clang comes from or even a link to Clang/LLVM project web site]

      They didn't because everyone in that room are professional developers who don't need (or want) LLVM to be defined to them. Just as they don't want or have the remotest need for them to post a link to the LLVM site (?!).  Nobody there would need this, this is silly, and besides, it's a google search away. Anyways, the main thing is your mistaken judgements in the first place, see Bright's response.

    • User profile image
      Bob Bradley

      Hello,
      Every time I try to sign up for the Islandwood preview, I get the following: "Unfortunately something went wrong. Please try again." Please help!
      Thanks,
      Bob

    • User profile image
      HajimeK

      @Bob Bradley:I have the same situation no matter with browsers.

    • User profile image
      Herm

      Is there a way to manually update clang?
      The current version in RC 2015 is clang 3.1, and I would need clang 3.4.

    • User profile image
      Tom

      Can someone please answer me this question. After I compile objective-c would I be able to use it to build any .net application (WPF desktop application for example) or would that only work with Universal App on Windows 10?

    • User profile image
      Carl Mossman

      John Randolph, you're not an old NeXT developer. You're not fooling anybody.

    • User profile image
      Roma

      Does this awesomeness supports SpriteKit ?
      One more question:

      I would like to build a Windows (not mobile app).
      And I want to use NSDictionary NSKeyedArchiever inside it
      to be compatible with my existing OS X app that works with images,
      is it possible ?
      (I understand that AppKit is not implemented can I mix windows development with foundation objects ?)

    Comments closed

    Comments have been closed since this content was published more than 30 days ago, but if you'd like to continue the conversation, please create a new thread in our Forums, or Contact Us and let us know.