Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
PHPerKaigi 2019
memory
PRO
March 29, 2019
Programming
5
12k
PHPerKaigi 2019
memory
PRO
March 29, 2019
Tweet
Share
More Decks by memory
See All by memory
CTO から見た,なぜスタートアップ 初期のソフトウェア設計は壊れがちなのか
memory1994
PRO
74
31k
PHP メモリ管理術
memory1994
PRO
2
1.9k
PHP で NFC リーダーを実装する
memory1994
PRO
0
320
PHP でコードゴルフしよう!
memory1994
PRO
0
150
知育玩具サブスク「トイサブ!」におけるエンジニア組織立ち上げの事例
memory1994
PRO
2
730
株式会社トラーナにおける 心理的安全性が高い組織づくりの事例
memory1994
PRO
3
470
PHP ワンライナー物語
memory1994
PRO
1
240
Team building programs for Engineering Team at Torana, Inc
memory1994
PRO
2
410
PHP で NFC リーダーを実装する 〜 PHP とハードを繋ぐ 〜
memory1994
PRO
0
1.1k
Other Decks in Programming
See All in Programming
Hono v3 - Do Everything, Run Anywhere, But Small, And Faster
yusukebe
4
120
Refactor with using `available` and `deprecated`
417_72ki
3
380
ペパカレで入社した私が感じた2つのギャップと向き合い方
kosuke_ito
0
140
Functional Data Engineering - A Blueprint for adopting functional principles in data pipeline
vananth22
0
170
社会人 20 年目エンジニア、発信で技術学びなおしてる話
e99h2121
1
140
AWSとCPUのムフフな関係
cmdemura
0
450
Swift Expression Macros: a practical introduction
kishikawakatsumi
2
700
SHOWROOMの分析目的を意識した伝え方・コミュニケーション
hatapu
0
230
[2023년 1월 세미나] 데이터 분석가 되면 어떤 일을 하나요?
datarian
0
550
LIFFで動く割り勘アプリTATEKAをリリースしてみた話
inoue2002
0
210
OIDC仕様に準拠した Makuake ID連携基盤構築の裏側
ymtdzzz
0
130
Workshop on Jetpack compose
aldefy
0
140
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
270
12k
Embracing the Ebb and Flow
colly
75
3.6k
Keith and Marios Guide to Fast Websites
keithpitt
407
21k
The Language of Interfaces
destraynor
149
21k
GraphQLの誤解/rethinking-graphql
sonatard
39
7.8k
Robots, Beer and Maslow
schacon
154
7.3k
A Tale of Four Properties
chriscoyier
149
21k
Automating Front-end Workflow
addyosmani
1351
200k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
224
50k
Become a Pro
speakerdeck
PRO
6
3.2k
Clear Off the Table
cherdarchuk
79
290k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
22
1.7k
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