Page 1
私はなぜPHP8に苦しみ
未だに解き放たれていないのか
Why am I cursed by PHP8, and still not released?
2020-12-12 PHPカンファレンス懇親会LT
公開日:
by USAMI Kenta@tadsan
にオンラインのZoom会議で開催された『PHPカンファレンス2020』で懇親会LT(5分)として発表しました。
Why am I cursed by PHP8, and still not released?
2020-12-12 PHPカンファレンス懇親会LT
近況
出ましたね
出ちゃいましたね
このときは構文が違った
そのあといろいろあった
いろいろあった
@@Attr
#[Attr]
@[Attr] <<Attr>>
@:Attr @{Attr}
書きかた工夫すればPHP7と矛盾せずに導入できるのは#[Attr] 形式だけ
それはわかる
話は変りますが
テキストエディタの構文色付けというのは意外に難しい
エディタの種類によって色付けアルゴリズムの違いには結構違いがある
一番よくあるのはコードのキーワードだけ色付ける方法
if, else, for, endif,while, do,foreach, as,endif, ... などキーワードのリストと文字列の括弧とコメントブロックだけ
PHPだとそれでは不十分なことがある(HereDoc/NowDoc)
Attributeも
#[Deprecated]
function f(
$arg1,
#[
Deprecated]
$arg2){}
#[
Deprecated
]
function f
(
Deprecated]
$arg1,
#[
$arg2){}
エディタの構文色付けは言語のパーサをそのまま使えばいいわけではない
キーボードで1文字ごとに入力されるので画面に表示されているコードがPHPとして正しいわけではない
最近一番注目されてるのはtree-sitterというやつ
PHPではMicrosoftが開発しているTolerant PHP Parserというやつもある
何が言いたいのかというと
EmacsにはCc Modeという言語モード用のフレームワークがある
Emacsの「モード」は画面の文字に色を付けたりインデント調節したりする
Cc Modeは「C言語っぽい構文」の言語を幅広くサポートする
PHP Modeは何の因果かjava-modeを継承している!!
ここまで言っておいてなんだけど表示自体の対応は全然難しくない
画面表示は割とちゃんとしてる
じゃあ何が問題なのか
なぜかインデント処理のどこかで正規表現マッチに文字列を渡すべきところnilが渡ってエラー
バックトレースはあるが行数なし
そしてその関数は2000行近くある…
俺たちのデバッグはこれからだ!
