Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPerKaigi 2019
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
memory
PRO
March 29, 2019
Programming
14k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHPerKaigi 2019
memory
PRO
March 29, 2019
More Decks by memory
See All by memory
pnl で簡易的に作る PHP ネイティブアプリケーション
m3m0r7
PRO
0
34
セグメントとターゲットを意識するプロポーザルの書き方 〜採択の鍵は、誰に刺すかを見極めるマーケティング戦略にある〜
m3m0r7
PRO
1
1.1k
PHP で mp3 プレイヤーを実装しよう
m3m0r7
PRO
0
470
PHP でエミュレータを自作して Ubuntu を動かそう
m3m0r7
PRO
2
240
AI 時代だからこそ学ぶべき PHP の基礎
m3m0r7
PRO
7
2.5k
JVM の仕組みを理解して PHP で実装してみよう
m3m0r7
PRO
1
630
コードゴルファー道
m3m0r7
PRO
0
650
ChatGPT とつくる PHP で OS 実装
m3m0r7
PRO
3
550
事業観点から見る技術的負債の返済
m3m0r7
PRO
4
1.3k
Other Decks in Programming
See All in Programming
今さら聞けない .NET CLI
htkym
0
170
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
800
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
3.3k
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
760
AIエージェントで 変わるAndroid開発環境
takahirom
2
760
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
1.1k
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
2.7k
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
160
メールのエイリアス機能を履き違えない
isshinfunada
0
200
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
200
Google Apps Script で Ruby を動かす
kawahara
0
120
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
380
Featured
See All Featured
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
620
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
380
Designing for Performance
lara
611
70k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Code Reviewing Like a Champion
maltzj
528
40k
Amusing Abliteration
ianozsvald
1
240
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
230
Practical Orchestrator
shlominoach
191
11k
First, design no harm
axbom
PRO
2
1.2k
So, you think you're a good person
axbom
PRO
2
2.1k
Transcript
PHP Ͱ JVM ʹೖ͢Δ - ༧උࣝฤ - PHPerKaigi 2019 2019/03/29
ΊΓʔ(@m3m0r7) લ ࠲
ͩΕʁ ΊΓʔ(@m3m0r7) Ͱ͢ɻ ը૾ ϋϜελʔքͷఱ Lily ͪΌΜͰ͢ɻ ϫλγϋϐʔΤΠνϐʔνϣοτσΩϧ גࣜձࣾ GameWith
ͱ͍͏ձࣾͰಇ͍ͯ·͢ɻ
༧උࣝฤͰ͢͜ͱ લ ࠲
༧උࣝฤͰ͢͜ͱ • 16ਐͷܭࢉํ๏ʹ͍ͭͯ • signed / unsgined ͳܕʹ͍ͭͯ • double
float ͳͲͷුಈখͷܭࢉํ๏ʹ͍ͭͯ • ΤϯσΟΞϯʹ͍ͭͯ
16 ਐͷܭࢉํ๏ લ ࠲
ܭࢉํ๏͝ଘͷํ✋ લ ࠲
ͦ͏Ͱ͢Ͷɺ dechex / hexdec / base_convert ؔͰ͢ લ ࠲
ஊͰ͢ લ ࠲
16ਐͷܭࢉํ๏ • 10ਐ͔Β16ਐͷܭࢉํ๏ԼهͷࣜʹͯΊΒΕ·͢ 0xFF = (16 - 1) * 16^1
+ (16 - 1) * 16^0 = 255(10) 1ܻ͔Βܻ͕૿͑Δͨͼʹ1,2…Nͱ૿͍͖͑ͯ·͢ɻͭ·Γɺ0xFFFFͷ ߹ԼهͷΑ͏ʹͳΓ·͢ɻ 0xFFFF = (16 - 1) * 16^3 +(16 - 1) * 16^2 + (16 - 1) * 16^1 + (16 - 1) * 16^0 = 65535(10) 16͔Β1ΛҾ͍͍ͯΔͷɺ։࢝͢Δࣈ͕0͔Β࢝·ΔͨΊͰ͢ɻA10, B 11, … F15ͱ֮͑ͯ͠·͍·͠ΐ͏ɻ
16ਐͷܭࢉํ๏ • PHPͰܭࢉ͢Δʹʁ ͜Μͳܭࢉਖ਼Γͨ͘ͳ͍ɻϓϩάϥϚςΟοΫʹղܾͰ͖ΔͳΒղܾ͢Δʹӽ ͨ͜͠ͱͳ͍Ͱ͢ɻ • 10ਐ͔Β16ਐʹ͢Δ <?= dechex(255) ?>
• 16ਐ͔Β10ਐʹ͢Δ <?= hexdec(‘0xFF’) ?> <?= base_convert(255, 10, 16) ?> <?= base_convert(‘0xFF’, 16, 10) ?>
ͱͬͯ؆୯Ͱ͢Ͷ લ ࠲
signed / unsigned ͳܕʹ͍ͭͯ લ ࠲
ͱ͜ΖͰɺPHPer ͷΈͳ͞Μ͕ ͝ଘͷܕԿͰ͠ΐ͏͔ લ ࠲
JVM Ͱܕ͕૿͑·͢ લ ࠲
PHP͔Βݟͯ૿͑ͨܕ • boolean • int (4 byte) • string •
float • ࣮࣭ float ͷ double • byte (1 byte) • short (2 byte) • long (8 byte) • Ψν float (4 byte, ୯ਫ਼ුಈখ) • Ψν double (8 byte, ഒਫ਼ුಈখ)
ଟݴޠΛѻͬͨ͜ͱͳ͍ํ ೃછΈ͕ͳ͍͔͠Ε·ͤΜ લ ࠲
JVM ্ͷ֤ܕʹ͍ͭͯ લ ࠲
֤ܕʹ͍ͭͯ - byte • signed byte (ූ߸͖ byte) • -128(10)
ʙ 127(10) ͕ ූ߸͖ byte ͷൣғͱͳΓ·͢ɻ • 16ਐͰ 0x00 ʙ 0xFF ·ͰͰ͢ɻ • ਖ਼ͷ 0x00ʙ0x7F, ෛͷ 0x80 ʙ 0xFF ͱͳΓ·͢ɻ • unsigned byte (ූ߸ͳ͠ byte) • 0(10) ʙ 255(10) ͕ූ߸ͳ͠ byte ͷൣғͱͳΓ·͢ɻ • 16ਐͰ 0x00 ʙ 0xFF ·ͰͰ͢ • ਖ਼ͷͷΈͰ͢ɻ
֤ܕʹ͍ͭͯ - short • signed short (ූ߸͖ short) • -32768(10)
ʙ 32767(10) ͕ ූ߸͖ short ͷൣғͱͳΓ·͢ɻ • 16ਐͰ 0x0000 ʙ 0xFFFF ·ͰͰ͢ɻ • ਖ਼ͷ 0x0000ʙ0x7FFF, ෛͷ 0x8000 ʙ 0xFFFF ͱͳΓ·͢ɻ • unsigned short (ූ߸ͳ͠ short) • 0(10) ʙ 65535(10) ͕ූ߸ͳ͠ short ͷൣғͱͳΓ·͢ɻ • 16ਐͰ 0x0000 ʙ 0xFFFF ·ͰͰ͢ • ਖ਼ͷͷΈͰ͢ɻ
֤ܕʹ͍ͭͯ - int • signed int (ූ߸͖ int) • -2147483648(10)
ʙ 2147483647(10) ͕ ූ߸͖ int ͷൣғͱͳΓ· ͢ɻ • 16ਐͰ 0x000000 ʙ 0xFFFFFF ·ͰͰ͢ɻ • ਖ਼ͷ 0x000000ʙ0x7FFFFF, ෛͷ 0x800000 ʙ 0xFFFFFF ͱͳ Γ·͢ɻ • unsigned int (ූ߸ͳ͠ int) • 0(10) ʙ 4294967295(10) ͕ූ߸ͳ͠ int ͷൣғͱͳΓ·͢ɻ • 16ਐͰ 0x000000 ʙ 0xFFFFFF ·ͰͰ͢ • ਖ਼ͷͷΈͰ͢ɻ
֤ܕʹ͍ͭͯ - long • signed long (ූ߸͖ long) • -9223372036854775808(10)
ʙ 9223372036854775807(10) ͕ ූ߸͖ long ͷൣғͱͳΓ·͢ɻ • 16ਐͰ 0x00000000 ʙ 0xFFFFFFFF ·ͰͰ͢ɻ • ਖ਼ͷ 0x00000000ʙ0x7FFFFFFF, ෛͷ 0x80000000 ʙ 0xFFFFFFFF ͱͳΓ·͢ɻ • unsigned long (ූ߸ͳ͠ long) • 0(10) ʙ 18446744073709551615(10) ͕ූ߸ͳ͠ long ͷൣғͱͳΓ· ͢ɻ • 16ਐͰ 0x00000000 ʙ 0xFFFFFFFF ·ͰͰ͢ • ਖ਼ͷͷΈͰ͢ɻ
͓ؾ͖ͮͷํ͍Δ͔Ε·ͤΜ લ ࠲
ͦ͏ɺPHP ͰܭࢉͰ͖ͳ͍ࣈ͕ ؚ·Ε͍ͯΔͷͰ͢ લ ࠲
Ͱେৎ લ ࠲
ͦ͏ gmp ؔͳΒͶ લ ࠲
PHP ͰܭࢉͰ͖ͳ͍Λܭࢉ͢Δ • PHP Ͱ unsigned long ͷΛܭࢉͰ͖ͳ͍͕ɺ gmpؔ Ͱܭࢉͤ͞Δ͜ͱՄೳɻྫ͑
<?= gmp_strval(gmp_add(PHP_INT_MAX, PHP_INT_MAX));" ?> • ݁Ռ 18446744073709551614 ͱͳΓ·͢
ුಈখͷܭࢉʹ͍ͭͯ લ ࠲
ܭࢉํ๏͝ଘͷํ✋ લ ࠲
ͪͳΈʹɺࢲۤखͰ͢ લ ࠲
͋ͱɺຊฤͰΘͳ͍ͷͰ༨ஊͱͯ͠ ָ͓͠Έ͍ͩ͘͞ લ ࠲
ුಈখͷܭࢉํ๏ • ුಈখͷܭࢉํ๏Ͱ༗໊ॴԼه͔ͱࢥ͍·͢ɻ • ୯ਫ਼ුಈখ • ഒਫ਼ුಈখ • ͪͳΈʹ͜ΕΒ IEEE754
Ͱఆٛ͞Ε͍ͯΔͷͰৄ͘͠Γ ͍ͨํޚཡ͍ͩ͘͞ɻ • ୯ਫ਼ුಈখ 32 Ϗοτ (4 byte) ഒਫ਼ුಈখ 64 Ϗοτ (8 byte) ͷදݱ෯ͷҧ͍͕͋Γ·͢ɻ ࢀরɿhttps://ja.wikipedia.org/wiki/IEEE_754 ը૾ʹ͍ͭͯɿhttps://creativecommons.org/licenses/by-sa/3.0/
ුಈখͷܭࢉํ๏ • ୯ਫ਼ුಈখ (float) ͷܭࢉํ๏ • sign ͕ූ߸ͱͳΓ·͢ɻ (sͱஔ͖·͢) •
exponent ͕ࢦ෦ͱͳΓ·͢ɻ (e ͱஔ͖·͢) • fraction ͕Ծ෦ͱͳΓ·͢ɻ (f ͱஔ͖·͢ɻ) ࢀরɿhttps://ja.wikipedia.org/wiki/IEEE_754 ը૾ʹ͍ͭͯɿhttps://creativecommons.org/licenses/by-sa/3.0/ ୯ਫ਼ුಈখͷܭࢉࣜ = s * f * 2^(e - 127)
ුಈখͷܭࢉํ๏ • ഒਫ਼ුಈখ (double) ͷܭࢉํ๏ • جຊతʹ୯ਫ਼ුಈখͱมΘΓ·ͤΜɻ • sign ͕ූ߸ͱͳΓ·͢ɻ
(sͱஔ͖·͢) • exponent ͕ࢦ෦ͱͳΓ·͢ɻ (e ͱஔ͖·͢) • fraction ͕Ծ෦ͱͳΓ·͢ɻ (f ͱஔ͖·͢ɻ) ࢀরɿhttps://ja.wikipedia.org/wiki/IEEE_754 ը૾ʹ͍ͭͯɿhttps://creativecommons.org/licenses/by-sa/3.0/ ഒਫ਼ුಈখͷܭࢉࣜ = s * f * 2^(e - 1023)
͕͔ͩ͠͠ લ ࠲
JVM ্ͩͱҧ͏ΜͰ͢ લ ࠲
ුಈখͷܭࢉํ๏ • JVM্ʹ͓͚Δ୯ਫ਼ුಈখͷܭࢉํ๏Լهͷ௨Γ • JVM্ʹ͓͚Δഒਫ਼ුಈখͷܭࢉํ๏Լهͷ௨Γ • ࢦ෦ͷϚεΫ͍ͯ͠Δ͕ҟͳΓ·͢ɻ = s *
f * 2^(e - 1075) = s * f * 2^(e - 150)
ΤϯσΟΞϯʹ͍ͭͯ લ ࠲
ΤϯσΟΞϯͱ͍͏ݴ༿Λ ͍ͬͯΔํ✋ લ ࠲
ΤϯσΟΞϯʹ͍ͭͯ • ΤϯσΟΞϯओʹ2ͭ͋Γ·͢ • ϦτϧΤϯσΟΞϯ • ϏοάΤϯσΟΞϯ • ϦτϧΤϯσΟΞϯӈ͔ΒࠨɺϏοάΤϯσΟΞϯࠨ ͔ΒӈಡΉͱ֮͑ΕେৎͰ͢ɻ
ͪͳΈʹϛυϧΤϯσΟΞϯͱ͍͏ͷ ͋ΔΒ͍͠ લ ࠲
ࢀরɿhttps://ja.wikipedia.org/wiki/ %E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3
ࢀরɿhttps://ja.wikipedia.org/wiki/ %E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3
มͳͷͩͦ͏Ͱ͢ લ ࠲
ϦτϧΤϯσΟΞϯʹ͍ͭͯ લ ࠲
ϦτϧΤϯσΟΞϯʹ͍ͭͯ • ϦτϧΤϯσΟΞϯͷಈ͖ԼهͷΑ͏ʹϝϞϦʹੵ·Εͯ ͍͖·͢ 00 AA BB CC DD Ϩδελ
DD CC ϝϞϦ 0xA ΞυϨε 0xB 0xC 0xD 0xE
ϏοάΤϯσΟΞϯʹ͍ͭͯ લ ࠲
ϏοάΤϯσΟΞϯʹ͍ͭͯ • ϏοάΤϯσΟΞϯͷಈ͖ԼهͷΑ͏ʹϝϞϦʹੵ·Εͯ ͍͖·͢ 00 AA BB CC DD Ϩδελ
CC DD ϝϞϦ 0xA ΞυϨε 0xB 0xC 0xD 0xE
͓͞Β͍ લ ࠲
͓͞Β͍ •gmp_* ؔΛ֮͑ͯؼΖ͏ •dechex / hexdec / base_convert ؔΛ֮͑ͯ ؼΖ͏
•signed, unsigned ͳʹ͍֮ͭͯ͑ͯؼΖ͏ •ුಈখͷܭࢉํ๏Λ֮͑ͯؼΖ͏ •ΤϯσΟΞϯʹ͍֮ͭͯ͑ͯؼΖ͏
લ࠲ऴྃͰ͢ લ ࠲
͋ͳ͍ͨͬͯΔͩΖ͏͔ ຊ ฤ
30 ԯͷσόΠεͰΔϠπͷ͜ͱΛ… ຊ ฤ
ͦ͏ Java ͷ͜ͱΛ… ຊ ฤ
ͦ͏ Java ͷ͜ͱΛ… PHP ຊ ฤ
PHP Ͱ JVM ʹೖ͢Δ - ຊฤ - ຊ ฤ PHPerKaigi
2019 2019/03/29 ΊΓʔ(@m3m0r7)
ͩΕʁ ΊΓʔ(@m3m0r7) ϫλγϋϐʔΤΠνϐʔνϣοτσΩϧ גࣜձࣾ GameWith ͱ͍͏ձࣾͰಇ͍ͯ·͢ɻ
PHP ͰόΠφϦϦʔσΟϯά
ΓํΛ͝ଘͷํ✋
ͦͦɺόΠφϦϦʔσΟϯάͱʁ
None
None
ͷͱ͜ΖΛಡΜͰ͍͘͜ͱͰ͢
ͦͦɺPHP Ͱ JVM Λ ಡΜͰԿָ͕͍͠ͷʁ
PHP Ͱ JVM ΛಡΜͰԿָ͕͍͠ͷ͔ • ελοΫϚγϯ͕ͲͷΑ͏ʹಈ͍ͯΔ͔ཧղ͢Δ͜ͱ͕Ͱ͖ ͨؾ࣋ͪʹͳΔ • ͨͩ͠ JVM
ϩʔΧϧมͷετΞϩʔυ͕ແݶେʹͰ ͖ΔͨΊ७ਮͳελοΫϚγϯͰͳ͍ • php ͷதؒίʔυ͕ཧղ͘͢͠ͳΔ • vld extension ͷؾ࣋ͪʹͳΕΔ • 30 ԯͷσόΠεͰΔ͜ͱ͕Ͱ͖Δ • ͳΜͳΒ PHP ͕Քಇ͍ͯ͠ΔαʔόʔؚΊΔͱ Java ΑΓ͍͢͝ͷͰ
PHP Java
ஊͰ͢
JVM Λೖ͢Δʹ͋ͨͬͯ
None
The Java® Virtual Machine Specification ҰॹʹಡΜͰ͍͖·͢
The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se11/html/index.html
ͬͦ͘͞όΠφϦϦʔσΟϯά͠·͢
Java ͷΫϥεϑΝΠϧ͜ͷߏ
None
ಡΈํ
unsigned int unsigned short object (PHPͩͬͨΒྻͰOK)
࣮ࡍʹ PHP ͰಡΜͰ͍͘
όΠφϦΛಡΉʹ • PHPͷϑΝΠϧؔΛ͏ • fopen ؔ • fread ؔ •
fseek ؔ • int short ͳͲͷΛܭࢉ͢Δ • base_convert ؔ • pack / unpack ؔ (ࠓճ͜ΕΛ͍·͢) • ord / chr ؔ • ؾ߹
unsigned int magic unsigned short minor version unsigned short major
version unsigned short constant pool count
PHP Ͱද͢ͱ
None
N unsigned int Ͱ ϏοάΤϯσΟΞϯ όΠτΦʔμʔ n unsigned
short Ͱ ϏοάΤϯσΟΞϯ όΠτΦʔμʔ cafebabe 0 52 (JDK 8) 29 ͜͜Ͱ͍͏ int (4byte) short (2byte) ͷαΠζ JVM ্ͰͷʹͳΓ·͢ɻ
Ͷʁ؆୯Ͱ͠ΐʁ
औಘͨ͠ constant_pool_count ΑΓ Constant Pool Λऔಘ͠·͢
͕ constant pool
PHP Ͱද͢ͱ
None
None
ͯΑ
ʁʁʁ ʁʁʁ ʁʁʁ ʁʁʁ
0x0A 0x09 ͷͬͯʁ
None
Constant Kind ͱ Tag ͷ͜ͱΛ ͍ࣔͯ͠·͢ unsigned byte
ͭ·Γ Constant Kind ͷ Tag ͷ ʹΑͬͯॲཧͷํ͕ มΘΓ·͢
ॲཧͷํ๏͕ҟͳΔ • ࠓճ Methodref (0x0A), Fieldref (0x09), String (0x08), Class
(0x07), Utf8 (0x01), NameAndType(0x0C) ͷ6ͭͷΈ ରԠɻ Constant Kind Tag Read bytes CONSTANT_Methodref 0x0A 2 byte + 2 byte ( unsigned short + unsigned short ) CONSTANT_Fieldref 0x09 2 byte + 2 byte ( unsigned short + unsigned short ) CONSTANT_String 0x08 2 byte ( unsigned short ) CONSTANT_Class 0x07 2 byte ( unsigned short ) CONSTANT_Utf8 0x01 ( length = 2 byte ) + length bytes ( unsigned short + length bytes ) CONSTANT_NameAndType 0x0C 2 byte + 2 byte ( unsigned byte + unsigned byte )
͜ΕΛͱʹͯ͠…
C unsigned byte constant pool count ྺ࢙తͳ ཧ༝ʹΑΓ -1
͢Δ CONSTANT_Methodref CONSTANT_Fieldref CONSTANT_String CONSTANT_Class
CONSTANT_Utf8 CONSTANT_NameAndType औಘͨ݁͠ՌΛ֨ೲ͢Δ
࣮ࡍʹग़ྗͯ͠ΈΔͱͲ͏ͳΔ͔ʁ
None
ͦΕͬΆ͍ͷ͕ݟ͑ͯ͘Δ
✌(‘ω'✌ )ࡾ✌('ω')✌ࡾ( ✌’ω’)✌ ָ͍͠ !!!
Ҿ͖ଓ͖ಡΜͰ͍͖·͢
None
unsigned short access flag unsigned short this class unsigned short
super class unsigned short interface count unsigned short fields count unsigned short methods count
PHP Ͱද͢ͱ
None
32 (ACC_SUPER) Test java/lang/Object 0 (ΠϯλϑΣʔεఆٛ͞Ε͍ͯͳ͍ͨΊ) 0 (ϑΟʔϧυఆٛ͞Ε͍ͯͳ͍ͨΊ) 2 (<init>
ͱ main ͕ఆٛ͞Ε͍ͯΔͨΊ)
ϝιου͕ 2 ͭ͋ΔͷͰ ಡΜͰ͍͖·͢
None
unsigned short unsigned short unsigned short unsigned short ϝιουʹ Code
Attribute ؚ͕·ΕΔ ʢͦΕҎ֎ؚ·Ε·͕͢লུ͠·͢ʣ
Code Attribute ͷߏʁ
None
unsigned short length byte unsigned int Code Attribute ʹ LineNumberTable
Attribute ؚ͕·Ε·͢ ʢͦΕҎ֎ؚ·Ε·͕͢লུ͠·͢ʣ
LineNumberTable Attribute ͷߏʁ
None
unsigned short unsigned int
None
͕ϝιουͷใͱ JVM ͷίʔυͷใʹͳΓ·͢
PHP Ͱද͢ͱ
None
None
None
࣮ࡍͷ JVM ্ͷίʔυ͕֨ೲ͞Ε͍ͯ·͢ Attribute ͷछྨʹΑΓॲཧํ๏͕ҟͳΔͨΊ ذ͍ͯ͠·͢ ࠶ؼ͢Δඞཁ͕͋ΔͷͰؔԽͯ͠·͢
Attribute ͷछྨʹΑΓॲཧํ๏͕ҟͳΔͨΊ ذ͍ͯ͠·͢ ࠶ؼͰॲཧ͍ͯ͠·͢
0 (ϝιουͷΞΫηεݖΛ͍ࣔͯ͠·͢) <init>, mainͳͲͷϝιου໊ ()V, ([Ljava/lang/String;)VͳͲͷ ϝιουͷҾͷใ Code Attribute ͳͲͷใ
࣮ࡍʹग़ྗͯ͠ΈΔͱʁ
None
͍͍ײ͡ʹऔΕ͖ͯ·ͨ͠
ϥετεύʔτ
࠷ޙ Ϋϥεͷ Attribute Λऔಘ͢Δ
ClassFile Structure ʹ SourceFile Attribute ͕ ؚ·Ε·͢ ʢͦΕҎ֎ؚ·Ε·͕͢লུ͠·͢ʣ
SourceFile Attribute ͷߏʁ
None
None
unsigned short attribute count unsigned short attribute name index unsigned
int attribute length unsigned short sourcefile index
PHP Ͱද͢ͱ
None
None
readAttributeؔʹ SourceFile ΛՃ
ϝιουͱಉ͡Α͏ͳॲཧΛॻ͘
Ҏ্Ͱ JVM ೖྃͰ͢
30ԯͷσόΠεͰΔ Java ͷ ؾ࣋ͪʹͳΕ·͔ͨ͠ʁ PHP
࣍ճ
PHP Ͱ JVM Λಈ͔͢ χʔϞχοΫͱ Operation Code ͱ iload_0 ͬͯͳΜͩ…
tableswitch ͱ lookupswitch ͷҧ͍ Φϖϥϯυ ϩʔΧϧετϨʔδ invokespecial ͱ invokevirtual ಥવͷ <clinit> ͳͥ PHP ͰΔΜͩ…
ָ͓͠Έʹʂ ※͓͢Δॴܾ·ͬͯ·ͤΜ ※͓͢Δ͜ͱࣗମܾ·ͬͯ·ͤΜ
None
͜ͷͷͨΊʹɺେྔͷ࣮ͱ ϦϑΝΫλϦϯάΛ͖ͯ͠·ͨ͠
JAR ͷରԠ, ΞϊςʔγϣϯͷରԠ, ֎෦Ϋϥε ͷରԠ ͳͲͳͲ…
None
None
None
Before
Before ʊਓਓਓਓਓਓʊ ʼɹ.DS_Storeɹʻ ʉY^Y^Y^Y^Y^Y^ʉ ʊਓਓਓਓਓਓʊ ʼɹnbprojectɹʻ ʉY^Y^Y^Y^Y^Y^ʉ ʊਓਓਓਓʊ ʼɹ4લɹʻ ʉY^Y^Y^Y^ʉ
20ࡀͷͱ͖ʹ͜Εॻ͍ͨͷ͔…
After
After PHPUnit Ͱςετ composer ରԠ PHP CodeSniffer ͰίʔσΟϯάϧʔϧΛ౷Ұ TravisCIͰςετΛ୲อ
ϞμϯʹͳΓ·ͨ͠
DEMO (͕࣌ؒ͋Ε)
php-java ͱ͍͏໊લͰ JVM ΤϛϡϨʔλΛެ։͍ͯ͠·͢ ͥͻࣗ͝ͷ PC Ͱࢼͯ͠Έ͍ͯͩ͘͞ ͦͯ͠ίϯτϦϏϡʔλʹͳ͍ͬͯͩ͘͞ʂʂ https://github.com/memory-agape/php-java
ຊͷαϯϓϧͪ͜Β https://gist.github.com/memory-agape/ 6d4dce2af4ece6e41293afb4e2caa5e1
THANK YOU FOR YOUR LISTENING