Your SlideShare is downloading. ×
0
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Clang Modules
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Clang Modules

2,436

Published on

Modules is new feature of Xcode5/Clang-3.3.

Modules is new feature of Xcode5/Clang-3.3.

Published in: Technology, Art & Photos
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,436
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
7
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

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

×