phpのビルトイン関数について教えてください。Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。登録してこのコミュニティに参加するどなたでも質問していただけますどなたでも回答していただけます最もよい回答には賛成票が入り、最上位に上がりますホーム質問タグユーザーphpのビルトイン関数について教えてください。121件5自分は初級プログラマなのですが、最近コンパイラの勉強(オートマトンや形式言語なども)を始めました。そこで思ったのですが、ビルトイン関数というのは結局のところコンパイラの中で実装されている、という認識でよいのでしょうか?例えばPHPのsession_start()など、セッションに関する関数は、https://github.com/php/php-src/blob/master/ext/session/session.cで書かれているとおり、C言語で書かれているようです。1)PHPでsession_start()などの関数を呼び出したとき、内部で何が行われているかについてはこのURLのソースコードを読めば理解できるようになるのですか?2)C言語は高速な言語だからCで実装するのですか?PHPでビルトイン関数を書くということは普通しないのですか?3)よく教科書なんかには、アセンブラを作るために機械語を使い、C言語を作るためにアセンブリを使うと書かれていますが、PHPの場合は構文とビルトイン関数をCで作る、ということなのですか?かなり初歩的で奇妙な質問に思えるかもしれません。自分の中で実際のところ何がどう結びついているのか、かなりモヤモヤした状態でいるので質問した次第です。票2実際のところどこまでが「ビルトイン関数」で、どこからがそれ以外になるのか、と言った明確な定義はありませんし、PHPのようなインタープリタ言語とCのようなコンパイラ言語とでは若干考え方を変えた方がいいと思いますが、概ね「ビルトイン関数というのは結局のところコンパイラ(インタープリタを含む広義の)の中で実装されている」と言った考えで良いだろうと思います。1)PHPでsession_start()などの関数を呼び出したとき、内部で何が行われているかについてはこのURLのソースコードを読めば理解できるようになるのですか?「理解できる」かどうかは個人の問題なのでなんとも言えませんが、リンク先のソースコードには関数内部で行われている処理が全て書いてあります。「理解できる」ようになるためには、その中で使われているマクロや関数についても全部理解しておく必要があります。2)C言語は高速な言語だからCで実装するのですか?PHPでビルトイン関数を書くということは普通しないのですか?「高速」と言うのは特定の機能をビルトイン関数にしたりPHP機能拡張(これも大抵C言語で書かれている)にしたりする動機ではあるでしょうが、だからC言語で実装すると言うのは間違いです。PHPのインタープリタ自体はC言語で書かれています。したがって、PHPのビルトイン関数とするためには、C言語で書かれたPHPのインタープリタ本体に組み込めるものでないといけません。今のところPHPで書かれた関数をC言語で書かれたプログラムに「組み込む」ことは出来ません。したがって、「PHPでビルトイン関数を書く」ことは出来ません。将来PHPのコンパイラができて、PHPで書かれた関数をC言語で書かれたプログラムに組み込むことができるようになれば、「PHPでビルトイン関数を書く」ことも出てくるかもしれません。3)よく教科書なんかには、アセンブラを作るために機械語を使い、C言語を作るためにアセンブリを使うと書かれていますが、PHPの場合は構文とビルトイン関数をCで作る、ということなのですか?C言語はかなり初期のものからC言語で書かれていましたのでその「教科書なんか」はかなり単純化した記述になっているようです。「構文をCで作る」と言う言い方は、あまり聞きません。(今のところ)PHPのインタープリタ本体とビルトイン関数はC言語で書かれています。「構文」と言う意味では、Lexやyaccなんかも使われているので「Cで」とだけ言うと微妙に違う気もしますが、その辺りのことを置いて大雑把に理解するなら、「PHPの場合は構文(インタープリタ本体、の意味で)とビルトイン関数をCで作る」と言う理解で、問題は無いだろうと思います。C言語の知識があって、形式言語理論を含むコンパイラについても勉強されておられるなら、いきなりPHPのような大規模な言語のソースを覗くのではなく、「自分専用のミニ言語を作る」と言った趣旨の書籍を探し出して、小規模な独自言語のインタープリタ(コンパイラでも良いですが、インタープリタよりちょっとレベルが上がります)を自作して見られてはいかがでしょうか。個の銅バッジすみません、「構文」という言い方は自分がちょっと適当に思いついて書いてしまっただけです。「構文」というよりも「文法規則」とかのほうが近いのかな、と言われてみて思いました。回答ありがとうございました。さん、まぁ、私の回答も必ずしも用語を正確に使うなんてことを徹底しているわけではないですし、他の文面で意図を十分説明しようとしてくださっているので、大きな問題ではないと思います。極端に誤解を生みそうな用語の使い方になっていないか(時々本当に「自分用語」だけ並べて質問される方がいるので...、もちろんあなたのことではありません)だけ気にかけていただければと思います。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。開催しました!🎉コメントで回答する理由を教えてください関連する質問1phpの関数について教えてください3PHPのデバッグ方法についてよい方法を教えてください。3PHPを使っています。変数を初期化すべきかを教えてください。0マクロの二段階展開について教えてください。C++でビルド時にエラーC1001(内部エラー)発生1returnだけのPHPファイルの使いかたを教えてください。1C言語の宣言・型の読み方を教えてください。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。