第3話 最速ハチロク伝説
コンピュータの進化とプログラミング言語コンピュータの進化とプログラミング言語 近年 CPU が高速化 マルチコア化 それを生かすプログラミング言語処理系 IE9 では GPU も利用 Lightweight Language の登場 スクリプト言語でも高速に動作 Perl, Ruby, Python, PHP, ActionScript … JavaScript 高速化バトル勃発 Chrome の v8 エンジンの公開( 2008 年)
各ブラウザの JavaScript エンジン Microsoft Internet Explorer JScript Chakra ( IE9 ) Google Chrome v8 Mozilla Firefox SpiderMonkey TraceMonkey JagerMonkey ( 3.7 ) Apple Safari ( WebKit ) JavaScriptCore SquirrelFish SFX Nitro Opera 世界最速 Carakan ( 10.5 )
JavaScript エンジンの速度比較 SunSpider benchmark の結果( Safari )
TraceMonkey: JavaScript Lightspeed Brendan's Roadmap Updates
Safari vs. Firefox vs. Chrome 2. Mozilla's Dromaeo benchmark (Windows) 1. SunSpider benchmark (Mac OS X)
量質転化の法則量質転化の法則 量が質に転化するとき 量を積み重ねることで質的な変化が起こる瞬間 頭の良くない奴(プログラム)でも、 量をこなせば質に転化することがある コンピュータの処理速度が向上 “ 賢い ” 枝狩りアルゴリズム 昔は CPU の速度が遅く、メモリの量も少なかった “ 単純な ” 総当りアルゴリズム 単位時間あたりに処理できる情報量が増えたため 現在再注目されている
Z80 エミュレーター jsMSX The first MSX emulator 100% written in Javascript Console: Booting jsMSX Starting RAM slots Starting VDP Starting PSG (No Sound) interrupt=0,ticks=59666 cpu ticks/interrupt, cpu clock=3.58 MHz MSX ready to go. Load ROMs and hit [start].
JavaScript = Web2.0 時代のマシン語? Ajax, Web OS, Thin client… mobile browser
これからは JavaScript が 世界を支配する!
市場調査市場調査 JavaScript が好き/嫌いな人 (挙手!) "~が好き""~が嫌い"好きな人 JavaScript3,220,000230, % Perl18,80066, % Ruby20,30052, % PHP42,300172, % Python118,00029, % Google調べ:
JavaScriptが好かれる理由 勝手にベスト3 インデントが自由(強制されない!) 変数名も自由(Unicode文字も使えるよ!) ECMA-262, ISO/IEC 16262, JIS X 3060 で既に規格化されてるよ!(国際標準) ようするに JavaScript かわいいよ JavaScript
Javascript: ゚ ω ゚ノ = / `m ´ )ノ ~ ┻━┻ //*´ ∇` */ ['_']; o=( ゚ー゚ ) =_=3; c=( ゚ Θ ゚ ) =( ゚ー゚ )-( ゚ー゚ ); ( ゚ Д ゚ ) =( ゚ Θ ゚ )= (o^_^o)/ (o^_^o);( ゚ Д ゚ )={ ゚ Θ ゚ : '_', ゚ ω ゚ノ : (( ゚ ω ゚ノ ==3) +'_') [ ゚ Θ ゚ ], ゚ー゚ノ :( ゚ ω ゚ノ + '_')[o^_^o -( ゚ Θ ゚ )], ゚ Д ゚ノ :(( ゚ー゚ ==3) +'_')[ ゚ー゚ ] }; ( ゚ Д ゚ ) [ ゚ Θ ゚ ] =(( ゚ ω ゚ノ ==3) +'_') [c^_^o];( ゚ Д ゚ ) ['c'] = (( ゚ Д ゚ )+'_') [ ( ゚ー゚ )+( ゚ー゚ )-( ゚ Θ ゚ ) ];( ゚ Д ゚ ) ['o'] = (( ゚ Д ゚ )+'_') [ ゚ Θ ゚ ];( ゚ o ゚ )=( ゚ Д ゚ ) ['c']+( ゚ Д ゚ ) ['o']+( ゚ ω ゚ノ +'_')[ ゚ Θ ゚ ]+ (( ゚ ω ゚ ノ ==3) +'_') [ ゚ー゚ ] + (( ゚ Д ゚ ) +'_') [( ゚ー゚ )+( ゚ー゚ )]+ (( ゚ー゚ ==3) +'_') [ ゚ Θ ゚ ]+(( ゚ー゚ ==3) +'_') [( ゚ー゚ ) - ( ゚ Θ ゚ )]+( ゚ Д ゚ ) ['c']+(( ゚ Д ゚ )+'_') [( ゚ー゚ )+( ゚ー゚ )]+ ( ゚ Д ゚ ) ['o']+(( ゚ー゚ ==3) +'_') [ ゚ Θ ゚ ];( ゚ Д ゚ ) ['_'] =(o^_^o) [ ゚ o ゚ ] [ ゚ o ゚ ];( ゚ ε ゚ )=(( ゚ー゚ ==3) +'_') [ ゚ Θ ゚ ]+ ( ゚ Д ゚ ). ゚ Д ゚ノ +(( ゚ Д ゚ )+'_') [( ゚ー゚ ) + ( ゚ー゚ )]+(( ゚ー゚ ==3) +'_') [o^_^o - ゚ Θ ゚ ]+(( ゚ー゚ ==3) +'_') [ ゚ Θ ゚ ]+ ( ゚ ω ゚ノ +'_') [ ゚ Θ ゚ ]; ( ゚ー゚ )+=( ゚ Θ ゚ ); ( ゚ Д ゚ )[ ゚ ε ゚ ]='\\'; ( ゚ Д ゚ ). ゚ Θ ゚ノ =( ゚ Д ゚ + ゚ー゚ )[o^_^o -( ゚ Θ ゚ )];(o ゚ー゚ o)=( ゚ ω ゚ノ +'_')[c^_^o];( ゚ Д ゚ ) [ ゚ o ゚ ]='\"';( ゚ Д ゚ ) ['_'] ( ( ゚ Д ゚ ) ['_'] ( ゚ ε ゚ +( ゚ Д ゚ )[ ゚ o ゚ ]+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ( ゚ー゚ )+ ( ゚ Θ ゚ )+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ (( ゚ー゚ ) + ( ゚ Θ ゚ ))+ ( ゚ー゚ )+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ( ゚ー゚ )+ (( ゚ー゚ ) + ( ゚ Θ ゚ ))+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ((o^_^o) +(o^_^o))+ ((o^_^o) - ( ゚ Θ ゚ ))+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ((o^_^o) +(o^_^o))+ ( ゚ー゚ )+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+(( ゚ー゚ ) + ( ゚ Θ ゚ ))+ (c^_^o)+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ー゚ )+ ((o^_^o) - ( ゚ Θ ゚ ))+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ( ゚ Θ ゚ )+ (c^_^o)+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ( ゚ー゚ )+ (( ゚ー゚ ) + ( ゚ Θ ゚ ))+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ (( ゚ー゚ ) + ( ゚ Θ ゚ ))+ ( ゚ー゚ )+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ (( ゚ー゚ ) + ( ゚ Θ ゚ ))+ ( ゚ー゚ )+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ (( ゚ー゚ ) + ( ゚ Θ ゚ ))+ (( ゚ー゚ ) + (o^_^o))+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+(( ゚ー゚ ) + ( ゚ Θ ゚ ))+ ( ゚ー゚ )+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ー゚ )+ (c^_^o)+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ( ゚ Θ ゚ )+ ((o^_^o) - ( ゚ Θ ゚ ))+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ( ゚ー゚ )+ ( ゚ Θ ゚ )+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ( ゚ー゚ )+ ( ゚ Θ ゚ )+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ((o^_^o) - ( ゚ Θ ゚ ))+ (o^_^o)+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ( ゚ー゚ )+ (o^_^o)+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ((o^_^o) +(o^_^o))+ ((o^_^o) - ( ゚ Θ ゚ ))+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ (( ゚ー゚ ) + ( ゚ Θ ゚ ))+ ( ゚ Θ ゚ )+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ((o^_^o) +(o^_^o))+ (c^_^o)+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ Θ ゚ )+ ((o^_^o) +(o^_^o))+ ( ゚ー゚ )+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+( ゚ー゚ )+ ((o^_^o) - ( ゚ Θ ゚ ))+ ( ゚ Д ゚ )[ ゚ ε ゚ ]+(( ゚ー゚ ) + ( ゚ Θ ゚ ))+ ( ゚ Θ ゚ )+ ( ゚ Д ゚ )[ ゚ o ゚ ]) ( ゚ Θ ゚ )) ('_'); alert("Hello, JavaScript")
aaencode って役に立つの? さまざまなフィルタの回避に ! 攻撃コードを書くときの難読化として 書いて楽しい、見て楽しい ! コードリーディング重要 !! 愛の告白に ! いまどきの若い女の子にも 抵抗なく受け入れてもらえる♡
でも …
JavaScript は そんなに速くない → 最速を目指して
最速伝説 ハチロク
BATTLE 3 : Downhill
Quiz: これは何をするプログラムでしょう? Answer → MS-DOS 16bit COM mov ah, 09h mov dx, "Hello, World" int 21h
86 binary Writing 8086 binary only with symbols 記号だけで書く! No alphabet letters [a-zA-Z] No numerical letters [0-9] Of course, No letters other than US-ASCII 使えるのは 32 種類の記号だけ !"#$%&'()*+,-./:; Base32 エンコーディング 16bit COM 形式 "MZ", "ELF" のようなファイルヘッダなし
記号のみで 16bit 8086 自己書き換え 使える演算子が限られる SUB ( ADD 演算は使えない … ) AND レジスタ間のコピーが簡単にできない PUSHA POP BX 自己書き換え Base32 デコードして実行バイナリを メモリ上に動的生成して実行( JIT っぽい)
スタック上に任意の数値を置くスタック上に任意の数値を置く AND AX, 2240 AND AX, 4022 SUB AL, 7e SUB AL, 25 SUB AL, 21 PUSHA POP DI C 7E 2C 25 2C F AX == 0x003C Push 8 registers Pop 7 times, "0x3C 0x00" are left on stack Expand code on stack " ` _
JavaScript で x86 アセンブラを書く
改造車 AA86
顔文字系 記号 プログラミング
顔文字系プログラミングのススメ ソースコードがいつも笑顔! (^_^; 癒される! (^_^; 読みにくいコードで職を守る! (^_^; 純粋に楽しい! (^_^; Fun of the programming
記号プログラミングのススメ 使用するのは記号 32 文字のみ !” #$%& ’ ()-=^~¥| ` @ { [ ] } ; + : * <>,. / ? _ | スペース、タブ、改行も使わない メリット インデントに悩む必要なし 1,2,3,4,8 スペース、 1 タブ派の人も安心 変数の命名に悩む必要なし _ __ ___ ____ _____ ______ _______
37一生涯 顔文字プログラマー 宣言一生涯 顔文字プログラマー 宣言 たとえ、アルファベットのキーが壊れても、 記号のキーだけあればプログラミングできる!
all your base32 are belong to us (^_^)/
39 ご静聴ありがとうございました