dartvm on android

22
Dart VM on an x86-based Android Outline 1. Dart は流行ってない 2. DartVM 速い 3. Android で動くよ 4. 実演 2012/10/27 yokohama_android_pf_25 nothingcosmos <[email protected]>

Upload: nothingcosmos

Post on 02-Jul-2015

1.739 views

Category:

Documents


5 download

DESCRIPTION

Yokohamapf25 nothingcosmos

TRANSCRIPT

Page 1: DartVM on Android

Dart VM on an x86­based Android

Outline

1. Dart は流行ってない

2. DartVM 速い

3. Android で動くよ

4. 実演 2012/10/27 yokohama_android_pf_25

nothingcosmos <[email protected]>

Page 2: DartVM on Android

プロフィール

HN:nothingcosmos ソフトウェアエンジニア (SI 系 ) Excel がともだち

22 回目、 23 回目に参加。

サイタマは遠い

android の vm 周りや、 native 周りに興味があります。

Page 3: DartVM on Android

プログラミング言語 Dart

Web Programming Language Google が開発

2011/10 発表

2012/10 に M1 SDK release

Page 4: DartVM on Android

人気度

TIOBE Programming Community Index

for October 2012

JavaScript 11 位

Dart 43 位

Page 5: DartVM on Android

流行ってる?

日本では流行ってない。特に○○方面に dis られる印象。

型システムが残念には同意、だけど Java より全然良い。

Page 6: DartVM on Android

DartVM

JIT コンパイルを搭載した Dart の処理系

Java に対する JavaVM みたいなもの。

対応プラットフォームは ia32/x86  そのうち ARM

Linux Windows Mac Android 対応

Page 7: DartVM on Android

DartVM

V8 チームの人たちが作っている。

V8 の 10 倍高速に起動する。

V8 の 2 倍高速を目指す。

Page 8: DartVM on Android

使われ方

ClientSide(WEB ブラウザ dartium, DartVM on Android)

ServerSide(DartVM)

Page 9: DartVM on Android

WEB 業界のトレンド ( バトルロワイヤル )

Page 10: DartVM on Android

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

Page 11: DartVM on Android

x86­based Android Emulator

Page 12: DartVM on Android

x86­based Android Emulator

Page 13: DartVM on Android

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

Page 14: DartVM on Android

動かす、サンプル

$ 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

Page 15: DartVM on Android

実演

hello.dart fibo.dart isolate_test.dart isolate_fibo.dart ( ひとり isolate  停止しない ) read.dart (file 読み込み ) server.dart (HttpServer 起動 停止しない ) systemcall に trace 仕込んだ dart

Page 16: DartVM on Android

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

Page 17: DartVM on Android

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);

Page 18: DartVM on Android

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()

Page 19: DartVM on Android

Linux と Android 向けファイルの違い

ほぼなし。

ときどき include や error_code の差分

intptr_t と int64_t

Page 20: DartVM on Android

DartVM on Android の制限

ビルドできるホストは Linux のみ

x86 Android Emulator か、 Android NDK で動く。

他 CPU はこれから

今のところコマンドラインからしか操作できない。

Dart のライブラリに制限がある。

DartVM から Android の C や Java の I/F を使用不可能

Page 21: DartVM on Android

x86­based Android って速い?

Intel の new codegen 大改造パッチが投下

https://android­review.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)

Page 22: DartVM on Android

まとめ

x86based Android Emulator は速いかも

Chome 以外のブラウザで Dart はサポートされない。

Android に標準搭載されるかも。

詳細は

http://code.google.com/p/dart/wiki/Android