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
標準関数のコードを読んでみる ~PHPコアコードの読み方~
Search
dShikata
August 21, 2020
1
330
標準関数のコードを読んでみる ~PHPコアコードの読み方~
PHP Lightning Talk Fes "SUMMER 2020" #phpltfes
dShikata
August 21, 2020
Tweet
Share
More Decks by dShikata
See All by dShikata
20年以上のレガシーシステムで始めるリファクタリングの半歩 / RAKUS Meetup Refactoring
dshikata
0
1.2k
Node.jsのEOLと格闘した2年間の記録
dshikata
1
1.6k
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
693
190k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Docker and Python
trallard
42
3.1k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Typedesign – Prime Four
hannesfritz
40
2.4k
A Philosophy of Restraint
colly
203
16k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Transcript
#phpltfes ©2020 RAKUS Co., Ltd. 標準関数のコードを読んでみる ~PHPコアコードの読み方~ 四方 大輔
#phpltfes 自己紹介 • 氏名 ◦ シカタ ダイスケ • 所属 ◦ 株式会社
ラクス • お仕事 ◦ Mail Dealerの機能開発をやってます
#phpltfes 今日話すこと • PHPの標準関数の読み方 • 一度も読んだことない人向け • 読めそうな気になってもらえたら嬉しい • C言語の話は(ほぼ)しません
#phpltfes こんなことありませんか?? • PHPの挙動に振り回される ◦ バージョンアップで挙動が変わった … ◦ 関数が意味不明な値を返す …
◦ 意味不明な挙動をしている … ◦ 引数で使えるかわからない値 …
#phpltfes 実際にありました • バージョンアップでcount関数の挙動が変わった ◦ Countableでない値は1、nullだけは0を返す?? ◦ Falseは?空文字は??空配列とかどうなるの … ◦
nullだけ0ってなんやねん … • curlの関数が意味不明な値を返してくる ◦ ステータスコード0ってなんやねん… ◦ そんなん定義されてないやん …
#phpltfes そうだ PHP本体のコード、 読もう。
#phpltfes 読んだらスッキリしました • バージョンアップでcount関数の挙動が変わった ◦ ちゃんと、Countableでない値は1、nullは0を返すようになってた! ◦ nullのとき、配列のとき、オブジェクトのとき、それ以外みたいなロジック ◦ わかりやすい分岐で、スッキリ(自己満足)
• curl関連の関数が意味不明な値を返してくる ◦ 0を返す実装になってた! ◦ なるほど、スッキリ(自己満足)
#phpltfes でも、ソースコード読むって 難しいんでしょ??
#phpltfes (雰囲気だけなら) 意外と読めます!!
#phpltfes まず、読む前に • 必要なもの ◦ ソースコードはここ ▪ https://github.com/php/php-src ◦ 最低限のC言語の知識
▪ 基本的な文法がわかれば十分 ▪ あとは、雰囲気で上から下へ読めたら OK
#phpltfes 標準関数の探し方 • キーワード PHP_FUNCTION( 関数名 )
#phpltfes 読むときのコツ • 深追いしない • 雰囲気だけを理解する • ある程度納得したらやめておく • いきなり沼(言語のコア)に飛び込まない
#phpltfes 読んでみる! • 今回の対象 ◦ sleep関数 • 目的 ◦ 引数に0を指定したらどんな動きになるの??
◦ 本当に0秒スリープするの??
#phpltfes sleep関数を探してみる • PHP_FUNCTION(sleep) • IDEを使ってもOK
#phpltfes sleep関数を探してみる • sleep関数
#phpltfes sleep関数を読んでみる • sleep関数 zendは言語解析の関連(沼) この辺っぽい
#phpltfes sleep関数を読んでみる • さらに追いかける
#phpltfes sleep関数を読んでみる • マクロの定義を2つ見つけた ??? windowsでないなら C言語の sleep
#phpltfes sleep関数を読んでみる • これ以上は追いかけられない
#phpltfes sleep関数を読んでみる • sleep Ex ??? ◦ PHP内で定義されているものではない ◦ たぶん何かのAPIやライブラリだろう…
◦ あとは調べたらいけそう
#phpltfes sleep関数を読んでわかったこと • Sleep関数 ◦ 実行環境がWindowsの場合 ▪ windowsAPIのスリープ機能が呼ばれる ▪ SleepExに0を指定すると、ほぼ0秒スリープになるらしい
◦ 実行環境がWindows以外の場合 ▪ C言語のsleepが呼ばれる ▪ C言語のリファレンスには0が指定可能と書かれている • 結論 ◦ sleep関数の引数で0を指定すると、ほぼ0秒スリープになるらしい
#phpltfes 簡単じゃないですか??
#phpltfes まとめ • 読んでみるだけなら意外と簡単 ◦ 普通にソースコードを読むノリでいける ◦ PHP_FUNCTION( 関数名 )を探す
◦ 手続きなので、雰囲気で理解する ◦ 追いすぎない ◦ 沼に飛び込まない ◦ もちろん、ちゃんと理解しようと読むと、もう少し苦労する ◦ コアなところはノリでは読めないので注意 ※ あくまで個人的な読み方です。
#phpltfes 身近な関数で試してみてください
#phpltfes ご清聴ありがとうございました。