dartvm on android
DESCRIPTION
Yokohamapf25 nothingcosmosTRANSCRIPT
Dart VM on an x86based Android
Outline
1. Dart は流行ってない
2. DartVM 速い
3. Android で動くよ
4. 実演 2012/10/27 yokohama_android_pf_25
nothingcosmos <[email protected]>
プロフィール
HN:nothingcosmos ソフトウェアエンジニア (SI 系 ) Excel がともだち
22 回目、 23 回目に参加。
サイタマは遠い
android の vm 周りや、 native 周りに興味があります。
プログラミング言語 Dart
Web Programming Language Google が開発
2011/10 発表
2012/10 に M1 SDK release
人気度
TIOBE Programming Community Index
for October 2012
JavaScript 11 位
Dart 43 位
流行ってる?
日本では流行ってない。特に○○方面に dis られる印象。
型システムが残念には同意、だけど Java より全然良い。
DartVM
JIT コンパイルを搭載した Dart の処理系
Java に対する JavaVM みたいなもの。
対応プラットフォームは ia32/x86 そのうち ARM
Linux Windows Mac Android 対応
DartVM
V8 チームの人たちが作っている。
V8 の 10 倍高速に起動する。
V8 の 2 倍高速を目指す。
使われ方
ClientSide(WEB ブラウザ dartium, DartVM on Android)
ServerSide(DartVM)
WEB 業界のトレンド ( バトルロワイヤル )
DartVM on Android の仕組み
DartVMdart
X86 AndroidEmulator
/data/local/dart/dart/data/local/dart/hello.dart
(2) adb push
ホスト PCUbuntu12 x86
(1) DartVM を android向けにクロスビルド
hello.dart
(3) adb push (4) adb shell /data/local/dart/dart/data/local/dart/hello.dart
x86based Android Emulator
x86based Android Emulator
DartVM の Android 向けビルド
$ gclient config http://dart.googlecode.com/svn/trunk/deps/all.deps
$ gclient sync
$ echo ”target_os = ['android']” >> .gclient
$ gclient sync
$ echo ”#include <stdint.h>” >> /usr/include/stdio.h
$ tools/build.py m release os android dart
動かす、サンプル
$ adb shell mkdir /data/local/dart
$ adb push out/android/ReleaseIA32/dart /data/local/dart/dart
$ echo "main(){ print(\"Hello, world\!\");}" >hello.dart
$ adb push hello.dart /data/local/dart
$ adb shell /data/local/dart/dart /data/local/dart/hello.dart
実演
hello.dart fibo.dart isolate_test.dart isolate_fibo.dart ( ひとり isolate 停止しない ) read.dart (file 読み込み ) server.dart (HttpServer 起動 停止しない ) systemcall に trace 仕込んだ dart
DartVM の Android 向けファイル
runtime/vm debuginfo_android.cc gdbjit_android.h|cc os_android.cc virtual_memory_android.cc
runtime/platform utils_android.h|cc thread_android.h|cc
runtime/bin crypto_android.cc dbg_connection_android.h|cc directory_android.cc eventhandler_android.h|cc extensions_android.cc fdutils_android.cc file_android.cc platform_android.cc process_android.cc socket_android.h|cc utils_android.cc
DartVM の OS 抽象 I/Fruntime/vm/os.h static const char* GetTimeZoneName(int64_t seconds_since_epoch); static int GetTimeZoneOffsetInSeconds(int64_t seconds_since_epoch); static int GetLocalTimeZoneAdjustmentInSeconds(); static int64_t GetCurrentTimeMillis(); static int64_t GetCurrentTimeMicros(); static word ActivationFrameAlignment(); static const int kMaxPreferredCodeAlignment = 32; static word PreferredCodeAlignment(); static uword GetStackSizeLimit(); static int NumberOfAvailableProcessors(); static void Sleep(int64_t millis); static void Print(const char* format, ...) PRINTF_ATTRIBUTE(1, 2); static void PrintErr(const char* format, ...) PRINTF_ATTRIBUTE(1, 2); static void VFPrint(FILE* stream, const char* format, va_list args); static int SNPrint(char* str, size_t size, const char* format, ...) PRINTF_ATTRIBUTE(3, 4); static int VSNPrint(char* str, size_t size, const char* format, va_list args); static bool StringToInt64(const char* str, int64_t* value); static void InitOnce(); static void Shutdown(); static void Abort(); static void Exit(int code);
DartVM が呼ぶ systemcallruntime/vm/os_android.cc localtime_r() tzset() gettimeofday() getrlimit() sysconf(_SC_NPROCESSORS_ONLN) usleep() vfprintf() vsnprintf() va_start() va_end() strtoll() exit()
runtime/vm/virtual_memory_android.cc getpagesize() mmap() munmap() unmap() mprotect()
Linux と Android 向けファイルの違い
ほぼなし。
ときどき include や error_code の差分
intptr_t と int64_t
DartVM on Android の制限
ビルドできるホストは Linux のみ
x86 Android Emulator か、 Android NDK で動く。
他 CPU はこれから
今のところコマンドラインからしか操作できない。
Dart のライブラリに制限がある。
DartVM から Android の C や Java の I/F を使用不可能
x86based Android って速い?
Intel の new codegen 大改造パッチが投下
https://androidreview.googlesource.com/#/c/38941/beforeArchUtility.cppAssemble.cppCalloutHelper.hCodegen.hCodegenDriver.cppX86LIR.hia32 ArchVariant.cpp ArchVariant.h CallingConvention.S Codegen.cpp
afterAnalysisO1.cppAnalysisO1.hBytecodeVisitor.cppCodegenInterface.cppLower.cppLower.hLowerAlu.cppLowerConst.cppLowerGetPut.cppLowerHelper.cppLowerInvoke.cppLowerJump.cppLowerMove.cppLowerObject.cppLowerReturn.cpp
NcgAot.cppNcgAot.hNcgHelper.cppNcgHelper.hTranslator.hlibenc (from Harmony asm emitter dec/enc)
まとめ
x86based Android Emulator は速いかも
Chome 以外のブラウザで Dart はサポートされない。
Android に標準搭載されるかも。
詳細は
http://code.google.com/p/dart/wiki/Android