SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Vivado hls勉強会4(axi4 master)
Vivado hls勉強会4(axi4 master)Vivado hls勉強会4(axi4 master)
Vivado hls勉強会4(axi4 master)marsee101
 
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」直久 住川
 
Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16tomoaki0705
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovyirof N
 
LLVM overview 20110122
LLVM overview 20110122LLVM overview 20110122
LLVM overview 20110122nothingcosmos
 
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方FPGAアクセラレータの作り方
FPGAアクセラレータの作り方Mr. Vengineer
 
ACRiウェビナー:岩渕様ご講演資料
ACRiウェビナー:岩渕様ご講演資料ACRiウェビナー:岩渕様ご講演資料
ACRiウェビナー:岩渕様ご講演資料直久 住川
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなしMITSUNARI Shigeo
 
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)Shin-ya Koga
 
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」marsee101
 
Dive into RTS - another side
Dive into RTS - another sideDive into RTS - another side
Dive into RTS - another sideKiwamu Okabe
 
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Kazuo Asano (@kazuo_asa)
 
2021 10-12.linx device-tree
2021 10-12.linx device-tree2021 10-12.linx device-tree
2021 10-12.linx device-treeShin-ya Koga
 
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCYoshifumi Kawai
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Uehara Junji
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All ThingsUnityTechnologiesJapan002
 

Tendances (20)

Vivado hls勉強会4(axi4 master)
Vivado hls勉強会4(axi4 master)Vivado hls勉強会4(axi4 master)
Vivado hls勉強会4(axi4 master)
 
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
 
Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovy
 
LLVM overview 20110122
LLVM overview 20110122LLVM overview 20110122
LLVM overview 20110122
 
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方FPGAアクセラレータの作り方
FPGAアクセラレータの作り方
 
バグベアード入門
バグベアード入門バグベアード入門
バグベアード入門
 
ACRiウェビナー:岩渕様ご講演資料
ACRiウェビナー:岩渕様ご講演資料ACRiウェビナー:岩渕様ご講演資料
ACRiウェビナー:岩渕様ご講演資料
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなし
 
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
 
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
 
Dive into RTS - another side
Dive into RTS - another sideDive into RTS - another side
Dive into RTS - another side
 
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6
 
2021 10-12.linx device-tree
2021 10-12.linx device-tree2021 10-12.linx device-tree
2021 10-12.linx device-tree
 
PYNQ祭り
PYNQ祭りPYNQ祭り
PYNQ祭り
 
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
 
Pynq祭り資料
Pynq祭り資料Pynq祭り資料
Pynq祭り資料
 
Takep lpc1114-190614
Takep lpc1114-190614Takep lpc1114-190614
Takep lpc1114-190614
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 

En vedette

Droid con 2012 bangalore v2.0
Droid con 2012   bangalore v2.0Droid con 2012   bangalore v2.0
Droid con 2012 bangalore v2.0Premchander Rao
 
AdReaction - Ghana
AdReaction - GhanaAdReaction - Ghana
AdReaction - GhanaKantar
 
It's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking ModernizrIt's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking ModernizrMichael Enslow
 
Why Is It Always Volume Before Price?
Why Is It Always Volume Before Price?Why Is It Always Volume Before Price?
Why Is It Always Volume Before Price?Kantar
 
Media pitch chris & luke
Media pitch chris & lukeMedia pitch chris & luke
Media pitch chris & lukesalesianas2011
 
Size finder
Size finderSize finder
Size finderT N
 
Template chinese version
Template chinese versionTemplate chinese version
Template chinese versionDdloveaa Chan
 
6 oct esport i valors
6 oct esport i valors6 oct esport i valors
6 oct esport i valorsxaviruiz74
 
Musica E Sport Roma
Musica E Sport RomaMusica E Sport Roma
Musica E Sport Romavivifris
 
Changing Channels with Confidence - Nigeria 2013
Changing Channels with Confidence - Nigeria 2013Changing Channels with Confidence - Nigeria 2013
Changing Channels with Confidence - Nigeria 2013Kantar
 
Signa designer residences
Signa designer residencesSigna designer residences
Signa designer residencesNorman Garcia
 
Sii. .Cz.Prezentace.2010.Small
Sii. .Cz.Prezentace.2010.SmallSii. .Cz.Prezentace.2010.Small
Sii. .Cz.Prezentace.2010.SmallJerryFishlet
 
Lecture 10 basic tools of finance
Lecture 10 basic tools of financeLecture 10 basic tools of finance
Lecture 10 basic tools of financeGale Pooley
 
Real Estate Market Report | Magnolia Tx
Real Estate Market Report | Magnolia TxReal Estate Market Report | Magnolia Tx
Real Estate Market Report | Magnolia TxTanya Lavoie Bugbee
 

En vedette (20)

Droid con 2012 bangalore v2.0
Droid con 2012   bangalore v2.0Droid con 2012   bangalore v2.0
Droid con 2012 bangalore v2.0
 
310 lecture 10
310 lecture 10310 lecture 10
310 lecture 10
 
AdReaction - Ghana
AdReaction - GhanaAdReaction - Ghana
AdReaction - Ghana
 
It's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking ModernizrIt's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking Modernizr
 
PPL Local roots-global reach 0711
PPL Local roots-global reach 0711PPL Local roots-global reach 0711
PPL Local roots-global reach 0711
 
Why Is It Always Volume Before Price?
Why Is It Always Volume Before Price?Why Is It Always Volume Before Price?
Why Is It Always Volume Before Price?
 
Media pitch chris & luke
Media pitch chris & lukeMedia pitch chris & luke
Media pitch chris & luke
 
Size finder
Size finderSize finder
Size finder
 
Template chinese version
Template chinese versionTemplate chinese version
Template chinese version
 
6 oct esport i valors
6 oct esport i valors6 oct esport i valors
6 oct esport i valors
 
Musica E Sport Roma
Musica E Sport RomaMusica E Sport Roma
Musica E Sport Roma
 
Natsumesoseki kokoro
Natsumesoseki kokoroNatsumesoseki kokoro
Natsumesoseki kokoro
 
Ogrody wertykalne
Ogrody wertykalneOgrody wertykalne
Ogrody wertykalne
 
Media movie1
Media movie1Media movie1
Media movie1
 
Changing Channels with Confidence - Nigeria 2013
Changing Channels with Confidence - Nigeria 2013Changing Channels with Confidence - Nigeria 2013
Changing Channels with Confidence - Nigeria 2013
 
Signa designer residences
Signa designer residencesSigna designer residences
Signa designer residences
 
Sii. .Cz.Prezentace.2010.Small
Sii. .Cz.Prezentace.2010.SmallSii. .Cz.Prezentace.2010.Small
Sii. .Cz.Prezentace.2010.Small
 
Media Presentation33
Media Presentation33Media Presentation33
Media Presentation33
 
Lecture 10 basic tools of finance
Lecture 10 basic tools of financeLecture 10 basic tools of finance
Lecture 10 basic tools of finance
 
Real Estate Market Report | Magnolia Tx
Real Estate Market Report | Magnolia TxReal Estate Market Report | Magnolia Tx
Real Estate Market Report | Magnolia Tx
 

Similaire à DartVM on Android

2014 dart flight school in Tokyo
2014 dart flight school in Tokyo2014 dart flight school in Tokyo
2014 dart flight school in Tokyonothingcosmos
 
CMake multiplatform build-tool
CMake multiplatform build-toolCMake multiplatform build-tool
CMake multiplatform build-toolNaruto TAKAHASHI
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMFAtomu Hidaka
 
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携Tomoaki Shimizu
 
Windows 8時代のアプリ開発
Windows 8時代のアプリ開発Windows 8時代のアプリ開発
Windows 8時代のアプリ開発信之 岩永
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築yaegashi
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 
C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml ssuser3a4b8c
 
181106 02
181106 02181106 02
181106 02openrtm
 
Firefox DevTools
Firefox DevToolsFirefox DevTools
Firefox DevToolsdynamis
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力Keiji Ariyama
 
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編Mr. Vengineer
 
ふつうのLinuxプログラミング
ふつうのLinuxプログラミングふつうのLinuxプログラミング
ふつうのLinuxプログラミングShuhei KONDO
 
はじめてのpostmarketOSインストール Windowsタブレット #kagolug Beginner for install postmar...
はじめてのpostmarketOSインストール Windowsタブレット  #kagolug  Beginner for install postmar...はじめてのpostmarketOSインストール Windowsタブレット  #kagolug  Beginner for install postmar...
はじめてのpostmarketOSインストール Windowsタブレット #kagolug Beginner for install postmar...Netwalker lab kapper
 
Circle ci and docker+serverspec
Circle ci and docker+serverspecCircle ci and docker+serverspec
Circle ci and docker+serverspecTsuyoshi Yamada
 
Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Yuki Higuchi
 

Similaire à DartVM on Android (20)

2014 dart flight school in Tokyo
2014 dart flight school in Tokyo2014 dart flight school in Tokyo
2014 dart flight school in Tokyo
 
CMake multiplatform build-tool
CMake multiplatform build-toolCMake multiplatform build-tool
CMake multiplatform build-tool
 
Source Code of Dart
Source Code of DartSource Code of Dart
Source Code of Dart
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
 
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携
 
Windows 8時代のアプリ開発
Windows 8時代のアプリ開発Windows 8時代のアプリ開発
Windows 8時代のアプリ開発
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml
 
181106 02
181106 02181106 02
181106 02
 
Firefox DevTools
Firefox DevToolsFirefox DevTools
Firefox DevTools
 
Cuda
CudaCuda
Cuda
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
Let's play with Goldfish
Let's play with GoldfishLet's play with Goldfish
Let's play with Goldfish
 
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
 
ふつうのLinuxプログラミング
ふつうのLinuxプログラミングふつうのLinuxプログラミング
ふつうのLinuxプログラミング
 
はじめてのpostmarketOSインストール Windowsタブレット #kagolug Beginner for install postmar...
はじめてのpostmarketOSインストール Windowsタブレット  #kagolug  Beginner for install postmar...はじめてのpostmarketOSインストール Windowsタブレット  #kagolug  Beginner for install postmar...
はじめてのpostmarketOSインストール Windowsタブレット #kagolug Beginner for install postmar...
 
Circle ci and docker+serverspec
Circle ci and docker+serverspecCircle ci and docker+serverspec
Circle ci and docker+serverspec
 
Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.
 
Code Pack の話
Code Pack の話Code Pack の話
Code Pack の話
 

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