トップページtech
981コメント306KB

PHPがいかに駄目言語であるかをちゃんと説明

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/11/15(金) 20:57:08.46
age推奨で

他の言語と比較しながら、具体的にちゃんと説明してください!
0655デフォルトの名無しさん2014/07/05(土) 22:38:24.14ID:rZ0JUFAI
そもそも
> Javaで実際的なアプリを作った経験が有る人は少数派だろうけど、
> 自分はその「少数派」に当たるかも。
とか言ってる時点でお察し。
Javaで実用アプリ書くなんて珍しくもなんともないだろ。こいつの視野が狭いことが予想されるし、どうして150MBも食うのかもろくに分析してないんだろうな。
てかC++で書いて計測したわけじゃなくてC++の方は予測なんだろ?
もしかして、試したこと無いで言ってる?w
0656デフォルトの名無しさん2014/07/06(日) 00:30:25.23ID:QUzsj6Vp
なぜJavaのメモリの話になっているのか謎だが、
Javaのオブジェクトは.classやらhashCodeやらのヘッダ情報で必ず8バイト食うので、
メモリ使用量で不利になるとの情報あり。これだからプリミティブ型とかでみみっちい事しなきゃならない。
しかし結局オートボクシングのおかげで無駄にオブジェクトが生成されるわけだが
Javaオブジェクトのメモリ構造
http://www.codeinstructions.com/2008/12/java-objects-memory-structure.html
0657デフォルトの名無しさん2014/07/06(日) 04:16:12.79ID:XAawtdmz
今時のパソコンのメモリ量で気にすることじゃないだろ
0658デフォルトの名無しさん2014/07/06(日) 07:41:01.36ID:dl4OC7T3
>>654
>Objectのサイズってなに?仮装関数テーブルとか?それがインスタンスごと複製されちゃうのか?

Java は、どんなクラスも、基本基底クラスなるものがあって、それが
「Object」クラス。例えば、自前で
class CMyData {
 int x;
}

というクラスを作ったとしても、CMyData は、Object クラスを継承して
しまう。なので、少なくとも、
sizeof(CMyData) >= sizeof(Object) + sizeof(int)
となる。
0659デフォルトの名無しさん2014/07/06(日) 07:48:52.93ID:dl4OC7T3
>>655
まあ、一般プログラマの「予想」と、オイラの「予想」の予測精度の高さ
は違うんだけど、それは匿名掲示板では伝えることが出来ないから、
なんとでも言えてしまうよ。
0660デフォルトの名無しさん2014/07/06(日) 07:57:56.20ID:dl4OC7T3
>>656
intメンバだけを持つクラスでも、暗黙のHEADERの8バイトの他に、
Objectがnewされて、その参照が追加される。
しかも、boolean (1bit)には、8バイトアラインが付き、8バイトも消費
される。byteも4byteアラインが付く。

これだけでも、C++より遥かにメモリ容量を食っている事が分かる。
実際はもっと凄いことになっているよ。
0661デフォルトの名無しさん2014/07/06(日) 08:20:21.04ID:dl4OC7T3
>>654
>単に作りが悪くてメモリリークしてるとか、GCの効率を妨害してるとか、
>そういうことを検証しないで経験とかで言われてもね

オイラは、実際に、最高レベルのプログラマだと評価が有る。
めったなことでは間違わないよ。
0662デフォルトの名無しさん2014/07/06(日) 09:46:48.12ID:HgdZEROT
JavaとC++じゃ利用シーンが違うだろ。
てかいい加減スレ違いだからやめろ。レベルな高いプログラマならこんなとこじゃ無くて、ブログにでも書けや
0663デフォルトの名無しさん2014/07/06(日) 10:19:41.20ID:lHEQcTu3
察してあげてください

最高レベルのプログラマは間違えないのです
0664デフォルトの名無しさん2014/07/06(日) 10:25:13.41ID:ZmPBc803
節子それ人間やない機械や
0665デフォルトの名無しさん2014/07/06(日) 14:55:58.47ID:dl4OC7T3
100〜1000倍というのはひょっとしたら間違っているかも知れない事は
認めよう。しかし、数十倍であることは、まず間違いない。
0666デフォルトの名無しさん2014/07/06(日) 15:01:09.07ID:ikMLm2G0
ところで >>622 のリンク先に一応突っ込んどくと、

gcc で -O3 付けたら、そもそも sumup は一度も呼ばれない。
sumup は副作用のない関数で戻り値が代入される result もローカル変数だろ。
その result は main の後の処理で使われないだろ。

だから gcc の最適化器は main 関数の中にある for 自体を丸ごと全部消す。
printf して終わるだけのバイナリができる。
0667デフォルトの名無しさん2014/07/06(日) 16:13:41.57ID:c4JqBC4F
>>661
最高レベルなら予想とかじゃなくてOpenJVM解析して正しい結果出してくれる?

というか、ミスをしないとか言っちゃってる地点でたいしたやつじゃないか
0668デフォルトの名無しさん2014/07/06(日) 16:18:11.30ID:dl4OC7T3
>>667
そんな暇じゃない。
0669デフォルトの名無しさん2014/07/06(日) 16:20:59.87ID:JKxWpx0K
同じ物同士の比較である限りは
数十倍であることがまず間違いないのなら
100〜1000倍というのはまず間違っているということになるわけだが
0670デフォルトの名無しさん2014/07/06(日) 16:22:15.18ID:ZmPBc803
数十倍と1000倍って凄い差ですね
0671デフォルトの名無しさん2014/07/06(日) 16:22:40.22ID:dl4OC7T3
ああ、「少なく見積もっても数十倍であることがまず間違いない」
の書き間違いだった。すまん。
0672デフォルトの名無しさん2014/07/06(日) 16:31:50.40ID:tlPqhdeM
そんなコロコロ発言が変わる人の言うことなんて信用できるわけがない
0673デフォルトの名無しさん2014/07/06(日) 16:36:59.55ID:dl4OC7T3
信用しない人は信用しなくてもいい。
じゃあ、Javaでも「C++ で必用な容量とほぼ同じ」と信じていてください。
一向に構いません。そう信じて損するのもあなた、得するのもあなたです
から。
0674デフォルトの名無しさん2014/07/06(日) 16:42:00.47ID:ZmPBc803
流石に苦しい
JavaがC++に比べればかなりの容量を食うのは皆知ってるだろ
君が適当に出した100〜1000倍って数値とその後のレスの内容が怪しいと突っ込まれただけ
最初から数十倍ならここまで反応はなかったよ
0675デフォルトの名無しさん2014/07/06(日) 16:44:46.61ID:dl4OC7T3
>>674
>JavaがC++に比べればかなりの容量を食うのは皆知ってるだろ

それは発耳。

オイラがここで言わなかったら、ほとんど誰も知らなかったと思うが。
0676デフォルトの名無しさん2014/07/06(日) 16:54:08.91ID:khAlvNFC
容量ってメモリのことか?

5年くらい前のXNAの本で読んだ話だが、C#とC++を比較して、
CPU性能はC++の80%ほど、メモリは2倍消費するくらいを目処にするといいらしい

メモリは2倍消費するというより、仮想マシンはとりあえず2倍確保しておいて、
それをメモリプールとしてスタンバイさせておくのだろうね
0677デフォルトの名無しさん2014/07/06(日) 16:58:29.43ID:ikMLm2G0
public class heaptest {
  public static void main(String[] args) {
    SimpleObj[] objs = new SimpleObj[100];
    for (int i = 0; i < 100; i++) {
      objs[i] = new SimpleObj();
    }
    try { Thread.sleep(180 * 1000); } catch (Exception e) {}
  }
}
class SimpleObj {
  public int i;
}

$ javac heaptest.java
$ java heaptest &
$ jmap -dump:format=b,file=heaptest.hprof <PID>
$ jhat heaptest.hprof

これで 7000 番にサーバが立つからブラウザで http://localhost:7000 を開いて見ていけば
どういうオブジェクトがどれだけメモリを使ってるか分かる。
SimpleObj 1 個で 20 バイト。
0678デフォルトの名無しさん2014/07/06(日) 16:59:22.11ID:dl4OC7T3
>>676
Java のメモリ消費量は、C++ の2倍程度などという生易しいものではない。
0679デフォルトの名無しさん2014/07/06(日) 17:00:18.62ID:ikMLm2G0
<PID> のところは ps でプロセス ID を調べて入力する。
動いているプロセスに attach してダンプを取る仕組みだから Thread.sleep で終わらせないようにしているわけ。
0680デフォルトの名無しさん2014/07/06(日) 17:03:28.26ID:dl4OC7T3
スマンが、今はテストするほど暇が無いので、おいらは何もしない。
0681デフォルトの名無しさん2014/07/06(日) 17:06:01.78ID:ikMLm2G0
JVM はオブジェクトの representation については特に仕様で決まってるわけじゃないのか。知らなかった
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.7

20バイトってのは64bit版のOpenJDK1.7調べ
0682デフォルトの名無しさん2014/07/06(日) 17:07:27.69ID:tlPqhdeM
即レスするほど張り付いてID赤色の暇人がなんか言ってるよ
0683デフォルトの名無しさん2014/07/06(日) 17:10:54.74ID:dl4OC7T3
考え事してる合間に投稿してる。
今は考える事こそが自分のやるべきことだから。
0684デフォルトの名無しさん2014/07/06(日) 17:20:22.01ID:tlPqhdeM
「下手の考え休むに似たり」とはこの事だなw
0685デフォルトの名無しさん2014/07/06(日) 17:23:05.74ID:dl4OC7T3
なんのこっちゃ。
0686デフォルトの名無しさん2014/07/06(日) 17:34:37.76ID:c4JqBC4F
>>675
さすがに知ってるわ
GCもないC++の方が総じてメモリとか速度は優れてるに決まってる

ところで、JavaはC#みたいに値型導入しないの?
0687デフォルトの名無しさん2014/07/06(日) 17:45:08.97ID:dl4OC7T3
>>686
メモリを数十倍も食うのをどこで知ったの?

WebPageがあるなら、URLをどうぞ:
0688デフォルトの名無しさん2014/07/06(日) 17:53:50.20ID:ikMLm2G0
ソース追っかけてみたけど、これの oopDesc にある _mark と _metadata が 8*2 で 16 バイト分なのかな。
http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/c7f3d0b4570f/src/share/vm/oops/oop.hpp

PHP しか使わないから Java のことは全然わからん。
誰か詳しい人教えてくれ。
0689デフォルトの名無しさん2014/07/06(日) 18:15:07.74ID:dl4OC7T3
当然のことだけど、クラスの使用バイト数だけを調べても駄目なのは
分かっているよね? さらに、参照の表面的なバイト数だけでも駄目。

参照が表面的に 4 バイトしか使ってない様に見えても、ユーザー
ランドでは見えない関連データが沢山存在している可能性が有る。
例えば、GCの「ウォーク」を行うためのリンクポインタなど。

また、new CMyData の場合、CMyData の内部表現のサイズが
分かっただけでは意味が無いことも分かってる?
0690デフォルトの名無しさん2014/07/06(日) 18:30:07.48ID:c4JqBC4F
手近なところだとWikipediaとか
http://ja.m.wikipedia.org/wiki/Java%E3%81%AE%E6%80%A7%E8%83%BD
詳しくは書いてないけど、何と無くとか、経験的にとか、可能性とかいうのよりはマシ

ウォークっての検索したけどうまくでない
なんか別の言い方ある?
0691デフォルトの名無しさん2014/07/06(日) 18:47:01.26ID:dl4OC7T3
このようなものを調査するには、ソースを見るより実験して、
OS標準のタスクマネージャーなどでメモリ使用量を見るのが最も
正確。Javaの付属ツールのようなものが表示するのが実メモリ使用量
だとは限らない。個々のオブジェクトのサイズなどを表示しても
余り意味は無い。JVM全体でどれだけ使用しているかが大事。

Javaのクラスライブラリの初期メモリ使用量 + オブジェクトの確保に
伴うメモリ使用量

となるので、オブジェクトを増やしたときの変化の様子を見ると良い。
0692デフォルトの名無しさん2014/07/06(日) 18:54:07.35ID:8H24GUT0
> OS標準のタスクマネージャーなどでメモリ使用量を見るのが最も正確。

それがそうでもないんだよな。

たとえばアプリってのは小さいメモリ、1KB未満とかね。
そういったサイズを何個も生成する。

でも、その小さい単位毎にOSからメモリ要求したら
パフォーマンスが悪い。だからある程度固まったブロックで
メモリ要求をする。

つまりアプリで使用しているが、実際には空きであることがおおいんだよ。
でもアプリ内の空きメモリはOSからみれば使用中扱い。

だから実際に使用しているメモリとタスクマネージャのメモリをみても
正確なことはわからないんだよね。

だからJavaは専用のツールを用意している。
0693デフォルトの名無しさん2014/07/06(日) 19:07:44.59ID:ikMLm2G0
>>689 >>691
大変参考になりました。感謝します。
0694デフォルトの名無しさん2014/07/06(日) 19:30:04.71ID:DB81ilAH
いい加減Javaの話はやめろ。プログラミング言語は読めても、日本語は理解できないのか?
せめてPHPのメモリの話をしろ
0695デフォルトの名無しさん2014/07/07(月) 01:38:10.57ID:WuDwAVLf
最高のプログラマさんは
GC制御したことないのだろうな
メモリ消費量が多いプログラムもしたことがないのだろうな
0696デフォルトの名無しさん2014/07/07(月) 07:21:58.57ID:X/YVfDYM
>>692
システムの負担からすると、OSから見てのメモリ使用量の方が大事。
0697デフォルトの名無しさん2014/07/07(月) 07:42:20.97ID:X/YVfDYM
>>692
例えば50MBしか使ってないのに、タスクマネージャーでは150MBと表示される
という事なの? じゃあ、残りの 100MB はいつ使ってくれるの?

メモリブロック間の「スキマ」の事だとしたら、そういう無駄をなくす
事が GC の役割じゃないの?

GC などない C++ だと 200KB で済むんだよ。
0698デフォルトの名無しさん2014/07/07(月) 08:05:00.00ID:bzyQG1wL
このスレ荒らしが住み着いてて機能してねーな
0699デフォルトの名無しさん2014/07/07(月) 08:50:56.08ID:n46FrZRh
ならWebProgでやるかい?
0700デフォルトの名無しさん2014/07/07(月) 09:16:04.79ID:XWsYxeAh
      r;ァ'N;:::::::::::::,ィ/      >::::::::::ヽ
.      〃  ヽル1'´        ∠:::::::::::::::::i
       i′  ___, - ,. = -一   ̄l:::::::::::::::l
.      ! , -==、´r'          l::::::/,ニ.ヽ
      l        _,, -‐''二ゝ  l::::l f゙ヽ |、 ここはお前の日記帳じゃねえんだ
        レー-- 、ヽヾニ-ァ,ニ;=、_   !:::l ) } ト
       ヾ¨'7"ry、`   ー゙='ニ,,,`    }::ヽ(ノ  チラシの裏にでも書いてろ
:ーゝヽ、     !´ " ̄ 'l,;;;;,,,.、       ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{   __)`ニゝ、  ,,iリ::::::::ミ
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ ,  な!
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
0701デフォルトの名無しさん2014/07/08(火) 00:08:37.76ID:yingp3+3
>>697
解放されたメモリはすぐOSにはかえさず、また確保があったときにそこから割り当てる

>メモリブロック間の「スキマ」事だとしたら、そういう無駄をなくす事が GC の役割じゃないの?
ちがう。GCの役割は無駄をなくすことではなくメモリ管理の手間を減らすこと
むしろメモリに余裕があれば重たい解放処理はあまり行われない

>GC などない C++ だと 200KB で済むんだよ。
管理の手間を代償に速度と低メモリを選択した言語なんだから少ないのは当たり前

そもそも200KBというのはなんの数値だ?
タスクマネージャのどの数値のことを言っているのかわからないとなにも言えん
PrivateBytesはメモ帳ですら数MBいっているのにそれよりシンプルなソフトなのか
0702デフォルトの名無しさん2014/07/08(火) 02:15:19.99ID:CfgSejZA
class A {
public $i;
}

PHPでこれ一個newしたら400バイト以上使う
0703デフォルトの名無しさん2014/07/08(火) 03:52:52.21ID:M37XHoid
>>702
そういう検証しやすいネタはいいね。

こういうコードを書いて5秒後にpsコマンドでVSZとRSSがどれだけ増えるかやってみたよ。
<?php
class A {
public $i;
}

sleep(5);
for($i = 0; $i < $argv[1]; $i++) {
$o[$i] = new A();
}
sleep(5);

new 1個・・・ VSZ:+0KB  RSS:+0KB
new 10個・・・ VSZ:+0KB  RSS:+0KB
new 100個・・・ VSZ:+0KB  RSS:+0KB
new 200個・・・ VSZ:+260KB  RSS:+0KB
new 500個・・・ VSZ:+260KB  RSS:+0KB
new 700個・・・ VSZ:+260KB  RSS:+260KB
new 1000個・・・ VSZ:+260KB  RSS:+260KB
new 1020個・・・ VSZ:+260KB  RSS:+260KB
new 1023個・・・ VSZ:+260KB  RSS:+260KB
new 1024個・・・ VSZ:+520KB  RSS:+260KB
new 1050個・・・ VSZ:+520KB  RSS:+260KB
new 1500個・・・ VSZ:+520KB  RSS:+524KB

切りが良い数字で増えたね。このことから1個ごとにメモリが増えるわけじゃなく、
ある単位ごとで一気にメモリが増えている。

ここから計算するとオブジェクト1個あたり260バイトのようだ。
0704デフォルトの名無しさん2014/07/08(火) 03:58:15.34ID:M37XHoid
さてここで、疑問がある。

class A {
public $i;
public $j;
public $k;
public $l;
public $m;
public $n;
}

これだと、new 1023個した場合どうなるか?である。

$i一個のとき1023個で260KB、1024個だと520KBだから、
$i 〜 $n の6個だと、1023個newしたら260KBを超えるだろうと、
単純に考える。

だけど答えは260KBのままだった。

つまり、話はそんなに単純じゃないんだよね。
オブジェクト1個であっても、そこで使用しているバイト数の分確保しているのではなく、
ある程度のブロックで確保していると考えられる。
0705デフォルトの名無しさん2014/07/08(火) 04:14:03.91ID:M37XHoid
やってみたら、$i〜$pの8個の変数まで増やしても
260KBのままだった。

単純計算だが、
class A {
public $i;
}
だと1個あたり260バイトだが、実際にはパディング領域があるからで、
その内訳は多くても一つの変数あたり約32バイトだろう。
実際にはクラス定義にもう少しメモリをしようてい、
変数自体は1つ16バイトとかな?
0706デフォルトの名無しさん2014/07/08(火) 04:23:41.10ID:M37XHoid
念の為に言っておくが、メモリも断片化する。

たとえば1KBのメモリを100個確保して、
偶数個目のメモリを開放すると見事に
1KBごとに使用している・していないという形に断片化する。

OSからメモリを確保する時に、ある程度のブロック単位で
確保するのは、この断片化をなるべく起こらないようにするため。

メモリを確保する時に使用していない領域があるのが嫌だと思うかもしれないが
それはパフォーマンスを上げるために必要なことで、それはC言語のmallocでも
やっていることなんだよ。

メモリプールとか断片化という単語でググればわかるよ。
0707デフォルトの名無しさん2014/07/08(火) 05:32:34.81ID:eSEnngJC
気軽にHackが使えたらいいんだけどな
0708デフォルトの名無しさん2014/07/08(火) 07:41:22.82ID:t74qz3XV
>>706
そんな当たり前のことを説明しなきゃならないほど、レベルが低いんだ。
ここの人たちは。
0709デフォルトの名無しさん2014/07/08(火) 09:39:09.87ID:isXEy+iv
>>708
多言語叩く人なんてそんなレベル

念の為ってついてるけどな
0710デフォルトの名無しさん2014/07/08(火) 09:49:19.72ID:t74qz3XV
>>709
いや、Javaの正しい問題点を正しく述べてべている人のことを、
中途半端なレベルの人が叩いている。
0711デフォルトの名無しさん2014/07/08(火) 10:39:35.41ID:isXEy+iv
>>710
どっちも中途半端だろ?
0712デフォルトの名無しさん2014/07/08(火) 14:31:33.26ID:t74qz3XV
>>711
そんなこと無い。
投稿の文書の美しさなどだけから、才能や能力を判断する無かれ。
0713デフォルトの名無しさん2014/07/08(火) 14:47:37.86ID:DAN/kaNn
いやスレ違いのことを延々と語ってる荒らしだろ
0714デフォルトの名無しさん2014/07/08(火) 19:14:59.57ID:F/+7QgrM
ネイティブ vs 仮想マシンGC付き言語一般のダメさ(PHP, Java, C#, etc...)になっとるな

サーブレットと比べて、PHPはCGI前提ゆえにアプリケーションスコープや
まともなstatic変数が存在しないからキャッシュを作れないところが糞だと思う
memcachedに出し入れして高速化ノウハウとか紹介されてるし
0715デフォルトの名無しさん2014/07/08(火) 19:35:36.20ID:isXEy+iv
>>714
いつの時代の人ですか?
0716デフォルトの名無しさん2014/07/08(火) 21:04:49.73ID:JciV060L
PHPは仮想マシンじゃなくてインタプリタだろ
C#はネイティブにもできるしな
0717デフォルトの名無しさん2014/07/08(火) 21:15:56.44ID:0HE/NAtT
>>716
ZendのPHPはな。あとインタプリタっても、実行の度にソースコード解析してるわけじゃないぞ。
あとあとFacebookのPHP実装(HHVM)は仮想マシンだぞ。
分かってるのかもしれないが、ここまで言わにゃあ勘違いされるぞ。
0718デフォルトの名無しさん2014/07/08(火) 22:33:53.86ID:F/+7QgrM
PHPは名前空間の\や$this->必須なのも糞いな。嫌がらせとしか思えんセンスだわ
0719デフォルトの名無しさん2014/07/08(火) 23:05:29.95ID:0HE/NAtT
>>718
macだからバックスラッシュはそんなに嫌ではない。
$thisは面倒ではある。アロー演算子なんで余計にな
0720デフォルトの名無しさん2014/07/08(火) 23:05:48.32ID:M37XHoid
>>718
> PHPは名前空間の\や$this->必須なのも糞いな。嫌がらせとしか思えんセンスだわ
C++を参考にしているからかな。
0721デフォルトの名無しさん2014/07/08(火) 23:14:17.59ID:MFU1oOcl
>>718
thisが必須でないJavaの方がキモいわ。
ローカル変数とメンバ変数の違いが判らんだろ
0722デフォルトの名無しさん2014/07/08(火) 23:29:13.47ID:vanWZNwy
>>721
つシンタックスハイライト
0723デフォルトの名無しさん2014/07/08(火) 23:45:49.75ID:MFU1oOcl
>>721
IDEの力に頼ってる時点で駄目
0724デフォルトの名無しさん2014/07/08(火) 23:46:45.47ID:MFU1oOcl
>>723>>722宛てな
0725デフォルトの名無しさん2014/07/08(火) 23:48:50.24ID:M37XHoid
そのうち>>723はテキストエディタの力に
頼ってる時点でダメとかいいそうだよな。

補完するな、全てを覚えろ。みたいなw
0726デフォルトの名無しさん2014/07/08(火) 23:49:41.55ID:vanWZNwy
>>724
シンタックスハイライトなんて、ヘボエディタでもviでもEmacsでもサポートしてんじゃん。
メモ帳でプログラミングするのかよ、ダサ
0727デフォルトの名無しさん2014/07/09(水) 00:10:20.28ID:q/0HKq/r
シンタックスがだめならプリフィクスでも付けたら?
何とでもなるよ
0728デフォルトの名無しさん2014/07/09(水) 00:16:01.45ID:Uj/pBvlL
プリフィクス一択
0729デフォルトの名無しさん2014/07/09(水) 09:51:07.32ID:9+17vlT8
this.xxx = xxx;

より、

m_xxx = xxx;

の方が便利。
0730デフォルトの名無しさん2014/07/09(水) 12:25:57.74ID:V4w6/u2b
プレフィックスはださい。特にC++は
0731デフォルトの名無しさん2014/07/09(水) 14:45:09.57ID:Z9U3ERYz
this. と m_ は、文字数が 5 対 2 で、後者のほうが記述効率が良い。
0732デフォルトの名無しさん2014/07/09(水) 15:01:18.02ID:g1gM0anc
m_xxx をgrep検索すると、メンバ変数定義の部分まで表示できるのに対し、
this.xxx だと表示できない。

逆に xxx を検索すると local 変数まで検索されてしまう。
0733デフォルトの名無しさん2014/07/09(水) 15:17:40.54ID:6LMuMalC
$this->client->info = "名前:".$this->name.", "."E-mail:".$this->mail;
0734デフォルトの名無しさん2014/07/09(水) 15:26:51.26ID:g1gM0anc
$this->client->info

こういう場合、$this->info を検索しても、メンバ変数は検索できない
んだね。

やはり、m_xxx の法が便利だ。
0735デフォルトの名無しさん2014/07/09(水) 15:33:49.13ID:1SU4YkH/
C#ならIDEで名前ではなく、ちゃんと構文解析して探してくれるので
0736デフォルトの名無しさん2014/07/09(水) 15:43:24.12ID:LA3y01hh
>>735
自分の好きなエディタが使えないし、コードを書きかけの時は、
うまく働かないときもあるのでは。
0737デフォルトの名無しさん2014/07/09(水) 15:50:12.13ID:LA3y01hh
あと、m_xxx で問題ないのに、敢えてMSのIDEにしかない機能を頼る事もない。
0738デフォルトの名無しさん2014/07/09(水) 15:57:23.21ID:1SU4YkH/
>>736
別のエディタつかいたいならm_も別にいいんじゃない?
そもそもC#を他のエディタで書こうとは思わんから、つけないけど
インテリセンスなしとかきついし

Roslynでブラウザ上でも参照検索とかできめるから、他のエディタでもm_とかいらない時代くるかも
0739デフォルトの名無しさん2014/07/09(水) 15:57:48.84ID:6LMuMalC
構文解析?

javaやc#は静的型付け言語だからIDEがメソッドや変数を探せるんだよ
Eclipse・VisualStudioといったIDEの種類による都合ではない
0740デフォルトの名無しさん2014/07/09(水) 16:03:05.20ID:LA3y01hh
>>738
WzEditor だと、m_xxx タイプなら瞬間的にすぐ上のものを検索したり
出来るんだよ。IDE だときついと思うが。
0741デフォルトの名無しさん2014/07/09(水) 16:05:00.95ID:1SU4YkH/
>>739
ためにはちゃんとIDEが構文解析してメソッド名とかを取得するでしょ?
0742デフォルトの名無しさん2014/07/09(水) 16:05:42.84ID:1SU4YkH/
>>740
上のものってどういう意味?
0743デフォルトの名無しさん2014/07/09(水) 16:10:17.99ID:LA3y01hh
>>740
F9 キーでカーソル以後の単語を読み込んで、SHIFT+上 キーで
それより前の行にある単語を検索できる。IDEだとそこまで快適には
出来ない気がする。
0744デフォルトの名無しさん2014/07/09(水) 16:21:28.55ID:6LMuMalC
階層深いオブジェクトを全部プレフィックスつけてあらかじめ解体しておくのか?
どちらにしろ、それを突き詰めると静的型付け言語が良いねって話になるぞ

function __constractor($client){
$info = $client->info;
$this->m_name = $info->name;
$this->m_email= $info->email;
$this->m_password = $info->password;
}
0745デフォルトの名無しさん2014/07/09(水) 16:21:41.79ID:YSvBHpPH
こいつらPDTやPhpStorm使ったこと無いんだろうな
0746デフォルトの名無しさん2014/07/09(水) 16:25:11.46ID:LA3y01hh
C++流にはだったら:

function __constractor($client){
 $info    = $client->m_info;
 m_name    = $info->m_name;
 m_email   = $info->m_email;
 m_password = $info->m_password;
}

と書くけど。
0747デフォルトの名無しさん2014/07/09(水) 16:25:27.12ID:YSvBHpPH
>>739
静的型付けは型が決まってるから補完しやすいだけで、動的言語でも頑張ればできる。
PhpStormやPDTはかなりの精度だぞ
0748デフォルトの名無しさん2014/07/09(水) 16:32:57.49ID:pubU33im
ID:t74qz3XV は最高のプログラマだろ。文体が慇懃無礼な感じですぐ分かる。自演バレバレで恥ずかしいな。
てか、「俺は能力がある。俺の言っていることは正しい。異論は認めない。が、俺の論理が正しいことの根拠は俺は忙しいので見せてやらない。」ということを言ったってだれも賛同してくれねーよ。
到底プログラマーとしてのろくな経験があると思えない素人さんだな。
0749デフォルトの名無しさん2014/07/09(水) 16:39:26.17ID:6LMuMalC
最高のプログラマってどっかのコテハンか何か?
0750デフォルトの名無しさん2014/07/09(水) 16:42:47.55ID:pubU33im
てか ID:LA3y01hh も同一人物だろうな。
>>746とかconstructorの綴り間違えてたり、$つけ忘れてたりthisつけ忘れてたり、偉そうな書き込みする割には手落ちが多すぎる。
その上IDEの強力な構文解析がその辺のエディタのパターンマッチング&マクロで代替できると思ってる。
しかもIDEを否定する理由が方法も考えたこと無いのに「快適にはできない気がする」だしな。

他人の意見は一切聞くことができない、ドヤ顔で自分の意見だけを語りたい、人付き合いの殆ど無い頭の硬い嫌なオッサンなんだろうな。

相手してもしょうがないでしょ。

>>747
PDTってそんなに精度いいかな?今は亡きPHPEclipseとくらべて、PHPEclipseの方が良い感じだなあという印象だった。
具体的には一つのindex.phpからrequireされるアクションクラスとユーティリティクラスがあって、アクションクラスの方からユーティリティクラスをnewした後に
そのクラスのメソッドを補完できるかできないかという違いがあった。
そこまで不満になるほど精度悪い、という訳ではないけれども。
0751デフォルトの名無しさん2014/07/09(水) 16:45:51.78ID:pubU33im
>>749
>>622あたりからJavaはC++に比べて同じオブジェクト作るのに10-100倍くらいメモリ消費するから糞だとかいうわけのわからん自説を展開してる人。
おかしなところに突っ込んでも理解してもらえずスルー
0752デフォルトの名無しさん2014/07/09(水) 16:54:57.89ID:6LMuMalC
>オイラは、実際に、最高レベルのプログラマだと評価が有る。
>めったなことでは間違わないよ。

こいつか。ワロタ。TRPGパラノイアかと思ったぜ
0753デフォルトの名無しさん2014/07/09(水) 16:55:23.29ID:1SU4YkH/
>>743
カーソルの下にある単語で検索をかけて、移動するってこと?
VisualStudioだと、単語としてならCtrl+Shift+F3
文脈読んでローカル変数とかフィールドとかを区別するときはCtrl+Shift+上でいける

しかも、他のクラスのメソッドとかと名前がかぶってもある程度区別してくれる

C#は文脈キーワードが多いからシンタックスハイライトもRoslynつかうかIDEじゃないと完全には無理だと思うよ
0754デフォルトの名無しさん2014/07/09(水) 17:15:54.89ID:LA3y01hh
やっぱ天才は凡人には理解してもらえないのさ。
■ このスレッドは過去ログ倉庫に格納されています