Clang Modules
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Clang Modules

on

  • 2,368 views

Modules is new feature of Xcode5/Clang-3.3.

Modules is new feature of Xcode5/Clang-3.3.

Statistics

Views

Total Views
2,368
Views on SlideShare
1,351
Embed Views
1,017

Actions

Likes
4
Downloads
6
Comments
0

6 Embeds 1,017

http://d.hatena.ne.jp 869
http://connpass.com 66
http://hatenatunnel.appspot.com 58
http://cloud.feedly.com 20
http://webcache.googleusercontent.com 3
https://twitter.com 1

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Clang Modules Presentation Transcript

  • 1. ClangのModules Cocoa勉強会 #62 / 2013-10-19 / 木村渡 Powered by Rabbit 2.1.1 and COZMIXNG
  • 2. Highlights of Xcode 5 Compiler Modules for system frameworks to speed build time Auto Link frameworks imported by code modules (...) "Whatʼs New in Xcode"
  • 3. Modules Xcode 5 (Clang 3.3)の新機能 iOS 7 or Mac OS X 10.9 C, Objective-C (C++ not ready)
  • 4. ぶっちゃけ、あんまり 気にしなくてよい Xcodeがよきに はからってくれる
  • 5. Modules コンパイルが速くなる(らしい) ある種のprecompiled header module単位でバイナリを生成 ASTをシリアライズしたもの(らしい) fragileがうんぬんは他の資料を見てね。
  • 6. Modules @import // including header file #import <Foundation/Foundation.h> #import <Foundation/NSString.h> // using Modules @import Foundation; @import Foundation.NSString; あっとまーく + import。 ヘッダファイル名でなくモジュール名を書く。 通常ヘッダファイル名とモジュール名は同じ。
  • 7. Modules Auto Link コード中に@import →必要なものを自動的にリンク。 リンクするライブラリやフレームワー クの指示が不要に。
  • 8. Modules Auto Linking clangを直接たたいてるなら、リンカ オプションが不要に。 -llib -framework f 標準の場所にないとき、-Iや-Fは必要
  • 9. 話すこと modulesとは (済み) module.map 試してみる clang-3.4での新機能 (の予定)
  • 10. module.map モジュールを定義するファイル。 これさえあればライブラリ、フレーム ワークがモジュール対応に。 module.mapの中身はテキスト
  • 11. module.map $ cd `xcrun --sdk iphoneos --show-sdk-path` $ find . -name module.map : ./System/Library/Frameworks/ Foundation.framework/module.m : ./System/Library/Frameworks/ StoreKit/module.map :
  • 12. module.map ./System/Library/Frameworks/ UIKit.framework/module.map : ./usr/include/module.map ./usr/include/objc/module.map 10.9は未リリースだから、iOS7のSDKにあるmodule.mapを見てみ よう。 フレームワークとinludeとヘッダファイルがあったような場所に module.mapが置かれている。
  • 13. Foundation.framework/ module.map framework module Foundation [system] { umbrella header "Foundation.h" export * module * { export * } module.mapの中身。詳しくはClangのドキュメント見てね。
  • 14. /usr/include/module.map module Darwin [system] { // Headers that are repeatedly inclu // assigned to any given module. exclude header "_structs.h" exclude header "sys/_structs.h" module cdefs { header "sys/cdefs.h" export * }
  • 15. /usr/include/module.map // C standard library module C { module complex { header "complex.h" export * } :
  • 16. "Module Map Language" まだまだ変わりそう。clang 3.4で予約 語も増えてる。 iOS7 SDKでは使われてない機能も。 config_macros conflict link モジュールとライブラリの名前ちがうときにlink使うぽい。
  • 17. "Module declaration" Name.framework/ module.map /* module map file */ Headers/ Frameworks/ Resources/ Name .frameworkのすぐ下にmodule.mapを置くようになっている。
  • 18. 使ってみる iOS 7.0 SDKを参考に、Mountain Lion にmodule.mapをつっこむ! framework module Foundation [system] { umbrella header "Foundation.h" export * module * { export * } }
  • 19. mod1.m / 今までのやり方 #import <Foundation/Foundation.h> int main (int argc, const char * argv[ @autoreleasepool { NSLog(@"Hello, modules!"); } return 0; }
  • 20. mod1.m / 今までのやり方 % clang mod1.m -o mod1 -framework Foundation # framework name ^^^^^^^^^^ % otool -L mod1 mod1: /System/Library/Frameworks/ Foundation.framework/ Versions/C/Foundation (...) :
  • 21. mod2.m / Modulesを使う @import Foundation; /* ^^^^ using modules */ int main (int argc, const char * argv[ @autoreleasepool { NSLog(@"Hello, modules!"); } return 0; }
  • 22. mod2.m / Modulesを使う % clang mod2.m -o mod2 -fmodules # no -framework ^^^^^^^^^ % otool -L mod2 mod2: : /System/Library/Frameworks/ Foundation.framework/ Versions/C/Foundation (...)
  • 23. #importを@importに読み替え % clang mod1.m -o mod1 -fmodules % ./mod1 2013-10-18 ...[] Hello, modules! # works fine! ソースコード中は#importなのにモジュールが使えてる。 リンクするフレームワークを-frameworkで指定してない→自動リン クが機能してる。
  • 24. autolinkを無効に % clang mod1.m -o mod1 -fmodules -fno-autolink # disable autolink ^^^^^^^^^^^^^ Undefined symbols for architecture x86 "_NSLog", referenced from: _main in mod1-dTLx89.o :
  • 25. Xcodeでの設定 CLANG_ENABLE_MODULES: YES → -fmodules CLANG_MODULES_AUTOLINK: NO → -fno-autolink
  • 26. ここまでのまとめ module.mapがあればmodulesが使 える #importも-fmodulesで@importと して解釈される →コード修正不要 Apple版でない、clang-3.3でも同様
  • 27. mod3.m / cache @import Foundation.NSObjCRuntime; /* ^^^^ using modules */ int main (int argc, const char * argv[ @autoreleasepool { NSLog(@"Hello, modules!"); } return 0; }
  • 28. mod3.m / cache % clang mod3.m -o mod3 -fmodules -fmodules-cache-path=./tmp % find ./tmp ./tmp ./tmp/B76TNZTEB88L ./tmp/B76TNZTEB88L/_Builtin_intrinsics ./tmp/B76TNZTEB88L/Foundation.pcm ./tmp/B76TNZTEB88L/modules.idx ./tmp/modules.timestamp
  • 29. mod3.m / cache % clang -module-file-info ./tmp/.../Foundation.pcm Information for module file './tmp/.../Foundation.pcm': Generated by this Clang: (clang-500. Language options: C99: Yes C11: No Microsoft extensions: No :
  • 30. mod3.m / cache % strings ./tmp/.../Foundation.pcm | grep ^NS NS,I NSs@ NSGreaterThanPredicateOperatorType NSURLRequest NSInvalidArchiveOperationException : シンボルも入ってるぽい。
  • 31. Problems modules do not solve Rewrite the world's code Versioning Namespaces Binary distribution of modules "Clang 3.3 documentation"
  • 32. clang-3.4 modules C++ support (experimental) compiler options -fmodule-maps, -fmodule-mapfile, ... module map lang private, extern, use
  • 33. clang-3.4 modularize clang-tools-extra generate module.map (r192703) ヘッダファイルからmodule.mapを生成する機能が追加された。
  • 34. Resources Clang documentation WWDC 2013
  • 35. 感想 ユーザ(開発者)があまり気を回さな くてもうまくいくよう、よく準備さ れてる まだまだ変わりそう ヘッダごとでなくmodule単位で生 成することでパフォーマンス稼いで る?
  • 36. 終 Powered by Rabbit 2.1.1 and COZMIXNG