さまざまな言語仕様について熱く語る闘技場
量子コンピューターってプログラミング言語っていうレイヤーじゃないよな? おれはPHPのかたわら、Haskellで遊んでみたけど、目から鱗。 PHPコードも洗練されてくるからおもしろい。 マスターとか言ってる奴がまともな技術と知識を持ってたためしがない 俺が最初に覚えた言語はHTML。 その中でも、<body>に関しちゃ、ネイティブ?って言われることがある このまま糞スレ化→dat落ちさせるのは惜しいな。 PHPの言語仕様について話し合える場所は少ない。 安心していいよ、このスレは残る 消えるのはお前だけだから HTMLは高級言語って話は聞いたことあるけどCSSって言語? echoとprintは文字を出力することは同じなのに なんで二つも同じことができるんですか? CSSも、関数やらロジックを実装するようになってきたからなぁ。 叙事詩的定義もなにか新しいプログラミング言語のように感じる >>111 CSSの関数ってのはググったら見つかったけど、 例)CSS//関数 http://suika.fam.cx/ ~wakaba/wiki/sw/n/CSS++%E9%96%A2%E6%95%B0 > 叙事詩的定義 ってのはぜんぜん見つからない。"epic(al) definition" でも該当なし。 詳細プリーズ。 短文煽りは不快なだけで何も生み出さないからやめようぜ。 そのうち Kusakabe (void) みたいになっちまうぞ。 >>113-114 はストレスたまっててここで発散したいんです! >>106 に遅レス。 なんで echo と print の二つがあるかというと、まあ以下の文書に解説がある わけだけど、 FAQTs - Knowledge Base - View Entry - What is the difference between echo and print? http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40 どうも読んでてまだるっこしい。 2番目とか、 「echo は文(statement)、printは式(expression)」 こう書いたら、ずっとスッキリすると思うんだが。 そういう専門用語を使いたくないのかもしれないが、statement やexpression 程度の簡単な概念すら避けて説明するのは間違っていると思う。 これは外部リンクだけど、PHPマニュアルは全体的にそんな印象。 >>118 さすがに張本人は分かってなきゃ作れないだろ。 単にユーザへの説明の仕方の問題だと思う。 英語ができたらなあ。自然言語を書くのはは難しい...。 プログラミングと英語はほとんど同じような気が・・・ そうかあ?自然言語は理詰めで書けないじゃないか。 文法だけ覚えても engrish.com に載るような英文しか書けない。 PG言語も文法だけ覚えてもサンプルに載ってるような英文しか書けない。 if (i = no money) {you are ogottekureru me}else{you are keti} 俺は英語ができると思ったことはないな。 一応、片言で会話したり、英語のドキュメントも 英文サイトは普通に読めるから不自由はしないけど、 英語で恋愛はできんw いや今話してるのは メーリングリストに投稿するとか その程度のレベルの話だから。 お、そうか、>>120 からの流れね。数レス前も読まずに書いて寸摩損 どうやってMLに入会するのかもわからない 普通に申請するだけじゃだめみたいね 英語がわからないから入会方法がわからないって捉えられないとかゆとりですか? OK! well, let's talk in English here. このスレを見ている人はこんなスレも見ています。(ver 0.20) pixiv自前イラスト向上スレ part7 [CG] 【ショタ】3次専ショタスレ 10【女装・美少年】 [Download] ... what are you interested in ? (^^; 俺はセンターで9割近くは取ったが、いまだに英語ができる気がしない。 All your base are belong to us - Wikipedia http://ja.wikipedia.org/wiki/All_your_base_are_belong_to_us これも解説を読まなきゃ分からんかった。 英語のオンラインゲームできれば 「英語できる」と認定していいと思う I try to write the comment on program code from yesterday. It's cooooool!!! ;-p 「phpできます!」なんて自信たっぷりに言われた時の恥ずかしさ - ドグマを探しに http://d.hatena.ne.jp/crenlif/20081114/1226660315 > PHPのあれが駄目とかじゃなく、もし神様(何の?)が、今までのは無かった > ことにしてPHPをどこでも3ヶ所直していいよっていったらどうするかっての > を聞いてみたいです。 具体的な内容はリンク先を参照。この辺ほんとに直らんものかなあ。 別の話。 PHPでの内部変数の扱われ方 - PHP5のオブジェクトコピーでありがちな勘違い - PHPプロ!ニュース http://www.phppro.jp/news/304 コピーオンライト - Wikipedia http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%94%E3%83%BC%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%88 arrayはオブジェクトじゃないのでコピーオンライトは行われないかと思ったが、 実行時間を見ると、どうやらちゃんとコピーオンライトしているらしい。 ~ $ time php -r '$a=range(0, 100000);' 0.069 secs ~ $ time php -r '$a=range(0, 100000); $b=$a;' 0.068 secs ~ $ time php -r '$a=range(0, 100000); $b=$a; $b[100]=0;' 0.117 secs $bの値を書き換えた後、実行時間が2倍近くになってるだろ。 違う? じゃあどうして $b の一部を書き換えると、実行時間がこんなに延びんの? あ、環境書いてなかった。 ~ $ php --version PHP 5.2.6 (cli) (built: Sep 13 2008 11:13:29) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies つうかググればすぐ言及するページは見つかる。やっぱりcopy on write だ。 Big arrays in PHP http://brian.moonspot.net/2007/02/28/big-arrays-in-php/ > If the array is static then you don't really have to assign it by > reference, since in PHP 5 all (non-object) variables are > copy-on-write. So as long as you don't change the value then a copy > isn't made. php.netにはどこに書いてあるのか分からん。バグレポートばかり引っかかる。 この辺の挙動はパフォーマンスに重大な影響を与えるのに、公式ドキュメント には記述が見つからん。たぶん書いてないんだろう。 ライブラリの記述はそこそこだが言語仕様の記述は貧弱。こういうのがPHPの一 番直してほしいところだな。 >>148 落ち着け。145は別の話だ。 そっちの話は143が説明できないようだが。 Amazon.co.jp: はじめてのPHP言語プログラミング入門: 大垣 靖男: 本 http://www.amazon.co.jp/dp/4774122866 どうやらこの本がおすすめらしい。 PHPの言語仕様についてきちんと扱った本だという。 ,j;;;;;j,. ---一、 ` ―--‐、_ l;;;;;; {;;;;;;ゝ T辷iフ i f'辷jァ !i;;;;; ヾ;;;ハ ノ .::!lリ;;r゙ 在日の方々はかわいそうな強制連行の被害者 `Z;i 〈.,_..,. ノ;;;;;;;;> ,;ぇハ、 、_,.ー-、_',. ,f゙: Y;;f そんなふうに考えていた時期が 〜''戈ヽ `二´ r'´:::. `! 俺にもありました 最近、個人的に面白いと思った言語仕様があるのだが、ここに書いてる時間が ないし、書いても長くてウザがられそうなので、クイズにしてみる。 「PHP言語仕様・力試しクイズ」 $ php -r '$a=array(); $a["a"]= $a; var_dump($a);' $ php -r '$a=array(); $a["a"]=&$a; var_dump($a);' $ php -r '$a=new stdClass; $a->a= $a; var_dump($a);' $ php -r '$a=new stdClass; $a->a=&$a; var_dump($a);' (以下は PHP5(以上)でしか動かない) $ php -r '$a=new stdClass; $a->a= clone $a; var_dump($a);' $ php -r '$a=new ArrayObject(array()); $a["a"]= $a; var_dump($a);' $ php -r '$a=new ArrayObject(array()); $a["a"]=&$a; var_dump($a);' $ php -r '$a=new ArrayObject(array()); $a["a"]= clone $a; var_dump($a);' Q1 これらのコードが、PHP4とPHP5で、それぞれどのような表示をするか、試して みよう。自信のある人は試す前に予想してみよう。 Q2 >>144 のリンク先の記事 http://www.phppro.jp/news/304 が正しいかどうか、 問題があるとしたらどこか、考えてみよう。 >>161 おお、やっと大垣さんの名前を知っている人が来たか。 よかったら>>159 の問題を見てってくれ。 誰にもやってもらえなくてさびしい。 つうか、PHPのリファレンスって、要するにインスタンスに別名をつけることで、 仕組み自体はきわめて単純なものなんだよな。他言語で一般に言われるリファ レンスと似ても似つかないだけで(俺だったら「エイリアス」とか命名したと 思う)。 わかりにくいのは、なんでPHPはこんな、他言語にはない奇妙な仕組みを必要と するかだ。PHPのリファレンスはいつ、どのようなときに必要なのか。それを理 解するには、PHPの変数と各種インスタンスの挙動を理解する必要がある。 >>159 のクイズは、まさにその辺の問題を扱っている。まあちょっと再帰を絡ま せてしまったんで分かりにくくなってしまったが、再帰は枝葉で、本題にした いのはそっちだ。 >>162 その問題、最初に出現したときに解いて、全問正解だったよ。 でもそんなこと書いたって意味ないから書かなかっただけ。 いろんなところにコピペしなくていいよ。 参照でおもしろいのは、引数を参照で受け取る関数で、 それがオブジェクトであることを期待してるのに、NULLだった場合とかに、 関数の中で何もしないのに、var_dumpすると再帰になるようなスクリプトで 別のメモリ領域にズレが生じるとか。 >>164 ちょっと待て。これどこかにコピペされてんの? 俺はここと、くだ質スレ79にしか書き込んでないぞ。 まあそんなことはどうでもいいか。 全問正解とはすごいな。俺自身、Q1の最後から2番目は、自分でも動かしてみな いと分からんかった。 どうやって勉強した?PHPマニュアルだけでは>>159 は分からんと思うが。 参考にさせてほしい。 あとQ2の答えを、手短でいいから書いてみてくれないか? >>165 > 関数の中で何もしないのに、var_dumpすると再帰になるようなスクリプトで すまんがここの意味が分からん。 なんかコードの実例で示してもらえんか? >>166 参照代入を行った場合のrefcountが違う 俺も大垣先生の本は分かりやすいと思った。 PHP6が出たら、改訂版の投入をお願いします!>< 図書館で借りて読むけどw echo と print の厳密な違いを教えてください void zend_do_print(znode *result, znode *arg TSRMLS_DC) { zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC); opline->result.op_type = IS_TMP_VAR; opline->result.u.var = get_temporary_variable(CG(active_op_array)); opline->opcode = ZEND_PRINT; opline->op1 = *arg; SET_UNUSED(opline->op2); *result = opline->result; } void zend_do_echo(znode *arg TSRMLS_DC) { zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC); opline->opcode = ZEND_ECHO; opline->op1 = *arg; SET_UNUSED(opline->op2); } >>177 echo は、(カンマ)で区切って、連続で引数をぶちこめる。 printはできない。 そうなるとprintなんて必要ないよな 配布スクリプトなんか覗くとprint使ってるやつがいるので不思議でたまらない printは成功すると1を返す。 echoは何も返さない。 $a=1; $a ? echo 'aaa' : echo 'bbb'; //error $a ? print 'aaa' : print 'bbb'; //ok システムハンガリアンって評判悪いじゃん。 たしかにC++みたいに型が違う値を代入しようとしたら 速攻でエラー吐くコンパイラにかけるんなら意味ないかと思うけど、 PHPみたいに元の型が何であろうが無視して新しい型にしてくれちゃう言語は、 ひるがえって『単なる型名を変数名につける』ってのが有効じゃないかと思うんだ。 PHPにおいてはアプリケーションハンガリアンよりシステムハンガリアンのほうがいい気がしてる。 ハンガリアンに限らず、PHPの柔軟すぎる型変換に適した命名規約を考えてくれ。 そもそも、ハンガリアンが嫌われているのは 変数に実際に入れる型がいろいろ変わるからなわけだが。 >>185 はバグ回避のために違う型を入れないようにするためと いっているのだと思うが、間違った型を入れるとか言う以前に ソフトウェアの性質上、型は変わるものなんだよ。 (変数に最初に想定していた型以外のものを入れることになる) 時代の流れとともに16bit変数は32bit変数に変わるし、 32bitポインタは64bitポインタに変わるし、 オブジェクト指向言語なら、型は継承され新しい型になる。 PHPのような柔軟な言語だからこそ、なおさらハンガリアンは必要ない。 それにハンガリアン(変数の頭に型を入れる)を使うまでもなく 変数名そのものが型をあらわしている。flagならtrue/falseだし、priceなら数値だろう。 >>185 flagがビットフラグ(整数)だったり priceが税計算機能つきのItemPriceクラスのオブジェクトだったらどうすんの? 常識の範囲内ならどうでもいい。 つまりは、priceがlongからItemPriceに変わるというように 型が変わることがあるってこった。 それは避けられないからハンガリアンはよくない。 クラスでゲッターやセッター使ってれば タイプヒンティングも使えるし、型よりも値の範囲を絞って 例外を飛ばせるから全く問題ない。 一度処理に入ったら長い処理が行われるのではなくて 1回毎のシンプルな処理をセッションやクッキー使ってどうにか 継続させるのがWebアプリだから、ユーザー側のデータは 1回毎に改変が無いか毎回チェックする事になるし、型があってもなくても関係ない。 >>190 議論はここでおk 無駄なスレは使わなくておk Mono最強伝説 http://ja.wikipedia.org/wiki/XSP_ (Web%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC) システムハンガリアン病だわ・・・ HTMLでさえも<span id="spanHoge">とか<input type="text" name="txtHoge">とか しないと気が済まない_| ̄|○ read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる