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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
セグメントとターゲットを意識するプロポーザルの書き方 〜採択の鍵は、誰に刺すかを見極めるマーケティング戦略にある〜
m3m0r7
PRO
1
1k
PHP で mp3 プレイヤーを実装しよう
m3m0r7
PRO
0
450
PHP でエミュレータを自作して Ubuntu を動かそう
m3m0r7
PRO
2
230
AI 時代だからこそ学ぶべき PHP の基礎
m3m0r7
PRO
7
2.5k
JVM の仕組みを理解して PHP で実装してみよう
m3m0r7
PRO
1
620
コードゴルファー道
m3m0r7
PRO
0
640
ChatGPT とつくる PHP で OS 実装
m3m0r7
PRO
3
540
事業観点から見る技術的負債の返済
m3m0r7
PRO
4
1.3k
PHP でアセンブリ言語のように書く技術
m3m0r7
PRO
1
300
Other Decks in Programming
See All in Programming
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
430
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
210
act1-costs.pdf
sumedhbala
0
170
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
450
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1k
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
640
霧の中の代数的エフェクト
funnyycat
1
280
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
120
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
280
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
190
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
300
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
790
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
460
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.7k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.6k
Designing Experiences People Love
moore
143
24k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
610
Building Applications with DynamoDB
mza
96
7.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