狠狠撸

狠狠撸Share a Scribd company logo
Dart?VM?on?an?x86?based?Android


Outline
1.?Dart は流行ってない
2.?DartVM 速い
3.?Android で動くよ
4. 実演
                        2012/10/27?yokohama_android_pf_25
                  nothingcosmos?<nothingcosmos@gmail.com>
プロフィール
   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 の仕組み
ホスト PC
Ubuntu12 x86


                                           X86 Android
                                           Emulator
   (1) DartVM を android
   向けにクロスビルド                               /data/local/dart/dart
      DartVM                               /data/local/dart/hello.dart
       dart                 (2) adb push


                (3) adb push               (4) adb shell
                                           /data/local/dart/dart
               hello.dart                  /data/local/dart/hello.dart
x86?based?Android?Emulator
x86?based?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                   runtime/bin
 debuginfo_android.cc         crypto_android.cc
 gdbjit_android.h|cc          dbg_connection_android.h|cc
 os_android.cc                directory_android.cc
 virtual_memory_android.cc    eventhandler_android.h|cc
                              extensions_android.cc
runtime/platform              fdutils_android.cc
 utils_android.h|cc           file_android.cc
 thread_android.h|cc          platform_android.cc
                              process_android.cc
                              socket_android.h|cc
                              utils_android.cc
DartVM の OS 抽象 I/F
runtime/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 が呼ぶ systemcall
runtime/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 を使用不可能
x86?based?Android って速い?
    Intel の new?codegen 大改造パッチが投下
     https://android?review.googlesource.com/#/c/38941/
    before                        after
    ArchUtility.cpp               AnalysisO1.cpp
    Assemble.cpp                  AnalysisO1.h
    CalloutHelper.h               BytecodeVisitor.cpp
    Codegen.h                     CodegenInterface.cpp
    CodegenDriver.cpp             Lower.cpp
    X86LIR.h                      Lower.h            NcgAot.cpp
    ia32                          LowerAlu.cpp       NcgAot.h
      ArchVariant.cpp             LowerConst.cpp NcgHelper.cpp
      ArchVariant.h               LowerGetPut.cpp NcgHelper.h
      CallingConvention.S         LowerHelper.cpp Translator.h
      Codegen.cpp                 LowerInvoke.cpp libenc (from Harmony asm em
                                  LowerJump.cpp      dec/enc)
                                  LowerMove.cpp
                                  LowerObject.cpp
                                  LowerReturn.cpp
まとめ
   x86based?Android?Emulator は速いかも
   Chome 以外のブラウザで Dart はサポートされない。
   Android に標準搭載されるかも。
   詳細は
    http://code.google.com/p/dart/wiki/Android

More Related Content

DartVM on Android

  • 1. Dart?VM?on?an?x86?based?Android Outline 1.?Dart は流行ってない 2.?DartVM 速い 3.?Android で動くよ 4. 実演 2012/10/27?yokohama_android_pf_25 nothingcosmos?<nothingcosmos@gmail.com>
  • 2. プロフィール  HN:nothingcosmos  ソフトウェアエンジニア (SI 系 )?Excel がともだち  22 回目、 23 回目に参加。  サイタマは遠い  android の vm 周りや、 native 周りに興味があります。
  • 3. プログラミング言語 Dart  Web?Programming?Language  Google が開発  2011/10 発表  2012/10 に M1?SDK?release
  • 4. 人気度  TIOBE?Programming?Community?Index for?October?2012  JavaScript?11 位  Dart?43 位
  • 5. 流行ってる?  日本では流行ってない。特に○○方面に dis られる印象。  型システムが残念には同意、だけど Java より全然良い。
  • 6. DartVM  JIT コンパイルを搭載した Dart の処理系  Java に対する JavaVM みたいなもの。  対応プラットフォームは ia32/x86? そのうち ARM  Linux?Windows?Mac?Android 対応
  • 7. DartVM  V8 チームの人たちが作っている。  V8 の 10 倍高速に起動する。  V8 の 2 倍高速を目指す。
  • 8. 使われ方  ClientSide(WEB ブラウザ dartium,?DartVM?on?Android)  ServerSide(DartVM)
  • 9. WEB 業界のトレンド ( バトルロワイヤル )
  • 10. DartVM?on?Android の仕組み ホスト PC Ubuntu12 x86 X86 Android Emulator (1) DartVM を android 向けにクロスビルド /data/local/dart/dart DartVM /data/local/dart/hello.dart dart (2) adb push (3) adb push (4) adb shell /data/local/dart/dart hello.dart /data/local/dart/hello.dart
  • 13. 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
  • 15. 実演  hello.dart  fibo.dart  isolate_test.dart  isolate_fibo.dart?( ひとり isolate? 停止しない )  read.dart?(file 読み込み )  server.dart?(HttpServer 起動 停止しない )  systemcall に trace 仕込んだ dart
  • 16. DartVM の Android 向けファイル runtime/vm runtime/bin debuginfo_android.cc crypto_android.cc gdbjit_android.h|cc dbg_connection_android.h|cc os_android.cc directory_android.cc virtual_memory_android.cc eventhandler_android.h|cc extensions_android.cc runtime/platform fdutils_android.cc utils_android.h|cc file_android.cc thread_android.h|cc platform_android.cc process_android.cc socket_android.h|cc utils_android.cc
  • 17. DartVM の OS 抽象 I/F runtime/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);
  • 18. DartVM が呼ぶ systemcall runtime/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()
  • 19. Linux と Android 向けファイルの違い  ほぼなし。  ときどき include や error_code の差分  intptr_t と int64_t
  • 20. DartVM?on?Android の制限  ビルドできるホストは Linux のみ  x86?Android?Emulator か、 Android?NDK で動く。 他 CPU はこれから  今のところコマンドラインからしか操作できない。  Dart のライブラリに制限がある。  DartVM から Android の C や Java の I/F を使用不可能
  • 21. x86?based?Android って速い?  Intel の new?codegen 大改造パッチが投下 https://android?review.googlesource.com/#/c/38941/ before after ArchUtility.cpp AnalysisO1.cpp Assemble.cpp AnalysisO1.h CalloutHelper.h BytecodeVisitor.cpp Codegen.h CodegenInterface.cpp CodegenDriver.cpp Lower.cpp X86LIR.h Lower.h NcgAot.cpp ia32 LowerAlu.cpp NcgAot.h ArchVariant.cpp LowerConst.cpp NcgHelper.cpp ArchVariant.h LowerGetPut.cpp NcgHelper.h CallingConvention.S LowerHelper.cpp Translator.h Codegen.cpp LowerInvoke.cpp libenc (from Harmony asm em LowerJump.cpp dec/enc) LowerMove.cpp LowerObject.cpp LowerReturn.cpp
  • 22. まとめ  x86based?Android?Emulator は速いかも  Chome 以外のブラウザで Dart はサポートされない。  Android に標準搭載されるかも。  詳細は http://code.google.com/p/dart/wiki/Android