みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

同機能の、「組み込み関数」と「ユーザ関数」、両者の性能差について。

いつもお世話になっております。
PHP5.2.5 Apache1.3.37 SQLite3.3.7

PHPには、組み込み関数が予め、膨大な数、用意されているという話なので、
実際には、
有用であるけども出会うことのない組み込み関数
というものもあるように思います。

この場合、
そういった組み込み関数と同機能のユーザ関数
を車輪の再開発してしまうことが考えられます。

そこで、私が知りたいことは、

組み込み関数で提供されている機能を、
ユーザ関数で実現する際、
性能を損なわずに(つまり、処理速度面でも同等に)、
ほぼ等価な関数をユーザ関数で作ることはできるのか、
ということです。

よく使用されるお馴染みの関数の多くは、
それ自体、基本的な機能でのみ構成されていると思われるので、
それをユーザ関数で実現するとなると、
私にも、「それは難しそうだな…」と思えますが、

そうではなく、
かなりマニアックな関数、
つまり、
基本的な組み込み関数を複数組み合わせて作られているような、
そんな組み込み関数も、中にはあるわけで、
それらの中には、よく知られておらず、
車輪の再開発されてしまうものも多いと思います。
(再開発自体を回避する策があるのであれば、それも知りたいと思います)

PHPの中の構造について詳しくないので、
既に変なことを言っているかもしれませんし、
以下でも、さらに変なことを言うかもしれませんが、

組み込み関数とは、C言語など、PHPではない言語で作られていたりするのでしょうか?
(処理速度をあげる、等の理由から)

そうであるならば、
ユーザがPHPを操って作るユーザ関数は、出来る限り作らず、
既存の「組み込み関数」を利用したい、と私は考えます。

よって、「知りたいこと」を要約すると、
・車輪の再開発を防ぐ方法
・車輪の再開発されたユーザ関数の、組み込み関数との性能差
・組み込み関数の成り立ち(C言語由来?)

こうなります。

組み込み関数を検索する際の、自分の検索能力を鍛えるべきなのか、
車輪の再開発することになることを想定し、その再開発能力を鍛えるべきなのか、

どなたかに、何らかのアドバイスをして頂けると嬉しく思います。
(そもそも、組み込み関数に適当な関数があるかどうかを、皆さんはどのように検索されているのでしょうね…。
私なんかは、リファレンス本をメインに探していたりしますが。)

以上、どうぞよろしくお願い致します。

投稿日時 - 2009-09-07 22:37:39

QNo.5271335

困ってます

質問者が選んだベストアンサー

■車輪の再開発を防ぐ方法
JavaJavax2さんの仰るとおり「よく調べる」しかないのですが、

・公式のPHPマニュアルをよく読む。
⇒ありがちなのが配列操作だったりしますが、array_***という名前で大量に関数あります。
また、sort関数の説明のところに「sort() は » Quicksort でそれを実装しています。 」と書いてあったりします。
これで、quicksortのアルゴリズムでソート関数を作るという車輪の再開発は防げますね。
また、公式のPHPマニュアルの関数リファレンスの下部にある、ユーザ投稿部分は凄く参考になるので、目を通してみるのがオススメです。

・googleですげー調べる
⇒基本中の基本ですが。自分で考えてることなんて、大概誰かが4000年前に通り過ぎてるとおもいつつ、参考になるものが出てくるまで単語組み替えて調べて見るというのが良いと思います。
特に、PHPは、他の言語に比べて誰かが何かを書き残している量が圧倒的に多いと思われます(印象ですが)

・システム作る前に、似たようなシステムのオープンソースとか、ライブラリとか誰かが作った製作物を眺める
⇒人の製作物は、自分が利用したことのない関数とか出てくることがままあります。ソースの流れを読めば何のためにソレを使っているかが大体わかりますしね。
そういった目的でソースを読むときは、php editorがオススメです。PHPの標準ハイライト表示と同じ色分でアサインされている関数名は青い色で表示されます。

投稿日時 - 2009-09-08 02:52:36

お礼

冒頭を読み、
改めて、ホゲホゲさんは優しい方なのだなぁと、感じました。

では、本題へ。

>ありがちなのが配列操作だったりしますが、array_***という名前で大量に関数あります。

まさに。(笑)
質問の発端は、このあたりにあります。
あまりの鋭さに、ドキっとしました。^^;

>ユーザ投稿部分は凄く参考になるので、目を通してみるのがオススメ

はい◎
努力します!
英語と仲良くします。笑

>googleですげー調べる

「すげー」が印象的でした。ほっ、ホゲホゲさんっ…。


>自分で考えてることなんて、大概誰かが4000年前に通り過ぎてるとおもいつつ

この考え方、いいですね。笑
なぜか、ラーメンマンが頭に浮かびましたが、とても頷けるお話でした。

>参考になるものが出てくるまで単語組み替えて調べて見るというのが良い

はい、目を皿のようにして、すげー探し回るように致します。

>似たようなシステムのオープンソースとか、ライブラリとか誰かが作った製作物を眺める

はい、4000年の歴史を紐解いて参ります。

>php editorがオススメです

実は、エディタについても、気になっていたんですよね~。
私は現在、dreamweaverCS3を使っていますが、
php editorの使用経験もあります。
使用経験というより、試用経験ですが。笑

あと、Notepad++というエディタなんかもDLしてみました。
こちらはご存知かもしれませんが、
コーディングスタイルを色々なデザインの中から選べたりして、
なかなか面白いエディタです。
また、ifやwhile等の開始と終了を分かりやすく表示してくれる機能などもあります。
(DWにも、このような機能があれば良いのに…。)

というわけで、教えて頂いた通りに、まずはやってみようと思います!
どうもありがとうございました!

投稿日時 - 2009-09-08 03:53:26

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

PHPのソースはCでかかれています。(元になったPHP/FIはPerlで書かれていたそうですが)
ソースはすべて公開されていてLinuxではソースからmakeするのも普通に行われます。
組み込み関数というかモジュールで追加される関数もCで書かれているのでPHPで再開発するよりかなり高速でしょう。
PECLというプロジェクトでPHPに独自の関数をCで追加できます。

投稿日時 - 2009-09-08 11:18:44

お礼

>ソースはすべて公開されていてLinuxではソースからmakeするのも普通に行われます。

Cの知識があれば、PHPのソースから改変することも可能なわけですね。
Cについての知識は、私には無いので、この辺りの話は全く検討もつきませんが、
ただ単純に、「そんなことができたら、楽しいだろうな」とは思います。

>PHPで再開発するよりかなり高速でしょう。

やはり、そうですよね。

>PECLというプロジェクトでPHPに独自の関数をCで追加

PECL。
この言葉は、しばしば目にしますが、
PEARにすら手を出せていない私には、
PECLとの本格的な出会いは、まだまだ遠い先のことのように
思えております。笑

車輪の再開発を回避するために検索を心掛けようと思っておりますが、
その検索範囲は、
検索に許されている時間と自身の検索能力で決まる値なのだと思います。

検索していくことで、自分の中には無い新鮮な考え方との出会いもあるでしょうし、
また、独りよがりな設計になりがちなのを抑えてくれるといったメリットもあるでしょうから、
ここは謙虚に、検索能力を上げる工夫をしていけたらと思います。

以上、参考になるアドバイスをどうもありがとうございました。

投稿日時 - 2009-09-08 13:48:41

ANo.4

「車輪」の意味がわかりませんでしたがなんとなくのイメージで解釈して。

質問者様の考えられている事はいい事だと思います。
知りたい事について要約されている事はですね。

私も同じような事は時々考えるのですが、「再開発しないようにあるものを検索するしかない」と言う考えよりも、「調べる時間と手段が十分でないので自分で作るしかない(自分で作った方が早い)」と言う考えになりがちです。
どれほどに性能を求めるのか、大量データを処理するのかによっては必須条件になってくるかも知れませんが、私が今現在それほどまでに性能を求められた事がないので、自分で作るようにしているわけです。

そう言うわけで、よほどでない限り、「車輪の再開発することになることを想定し、その再開発能力を鍛えるべき」だと私は思います。

投稿日時 - 2009-09-08 10:02:31

お礼

レスポンス、どうもありがとうございます。

車輪の再開発:
「広く受け入れられ確立した技術や解決法を無視して、同様のものを再び一から作ってしまうこと」を意味します。(ソースはwikipedia)

そういう「慣用句」を使って質問をさせて頂きましたが、
分かりにくかったとしたら、申し訳ありません。

>「調べる時間と手段が十分でないので自分で作るしかない(自分で作った方が早い)」と言う考えになりがち

わかります。笑
検索するより、作ってしまえっ。その方が速いわっ。
と私も思いがちですが、
ただ、頭のどこかで、
「どうもスマートなスタイルではないな…。」
と思えてならないのです。
そこで、このような質問をさせて頂きました。
本質問のような疑問は、
言語問わず、みなさん考えられることだと思いますが、
NO.3の回答を引用させて頂くと、

>特に、PHPは、他の言語に比べて誰かが何かを書き残している量が圧倒的に多いと思われます(印象ですが)

こういうご意見がありますから、
PHPに関しては、特に「検索する意味」は大きいのかなと思えます。

>どれほどに性能を求めるのか、
>よほどでない限り、

検索するか、即自作するかの判断は、
自分が作ろうとしているスクリプトの程度次第、ということですかね。

私としては、検索力を上げていきたいな、と考えておりますが、
dell_OKさんが仰るように、探すより作った方が速い!と感じるケースも確かに多々あり、この辺りの判断ではよく悩まされます。

この度は、貴重なご意見をありがとうございました。
また何かありましたら、教えて下さい。

P.S.
余談ですが、私がここで立ち上げました質問自体も、
おそらくは、車輪の再開発になってしまっているのだろうと思います。苦笑

投稿日時 - 2009-09-08 13:19:01

ANo.2

読んでたらやたら質問文が長くて質問が多い気がしたな。最後にまとめられてるので今はそう感じないが

・車輪の再開発を防ぐ方法
 よく調べるしかないでしょうね。
・車輪の再開発されたユーザ関数の、組み込み関数との性能差
 phpはスクリプト言語ですから当然ネイブ(一部省略)なマシコード(一部省略)にかなうわけがありません。
・組み込み関数の成り立ち(C言語由来?)
 そこまでは知りません。phpのソースコードでも引っ張ってきて覗いてください。phpってソースコード公開してたっけ?・・。しらんがな。

投稿日時 - 2009-09-07 23:16:46

お礼

こちらでも出没して頂き、ありがとうございます。

>よく調べるしかないでしょうね。

その工夫の仕方など、何かアイデアをお持ちでしたら、是非教えて下さい。(^^

>phpはスクリプト言語ですから当然ネイブ(一部省略)なマシコード(一部省略)にかなうわけがありません。

要するに、組み込み関数の方が性能が高いということですね。

>しらんがな。

どうもありがとうございました。(笑)

投稿日時 - 2009-09-07 23:25:25

ANo.1

> 組み込み関数とは、C言語など、PHPではない言語で作られていたりするのでしょうか?
> (処理速度をあげる、等の理由から)
そうです。
PHPに限らず、スクリプト言語処理系の組み込み関数が
処理速度を上げるためにC/C++で実装されていることは珍しいことではないです。

投稿日時 - 2009-09-07 23:00:19

お礼

早速の回答をどうもありがとうございます。

------<質問文を引用>-------------------------------------
よって、「知りたいこと」を要約すると、

□車輪の再開発を防ぐ方法

■車輪の再開発されたユーザ関数の、組み込み関数との性能差 → ★下記項目の回答により、その性能差は「ある」ということで理解します。

■組み込み関数の成り立ち(C言語由来?)→ ★C/C++で実装
----------------------------------------------------------

ということは、項目1番目の、
□車輪の再開発を防ぐ方法

これを会得することがいかに重要であるかが、分かりました。
ありがとうございます。

疑問であったことの7割ほどが解決しました。
残り3割です。

それでは、引き続き、

□車輪の再開発を防ぐ方法

こちらに関するアドバイスの募集を続けたいと思います。

投稿日時 - 2009-09-07 23:10:19