C/C++にいくつか思うこと (ちなみに、プログラマ始めたのはCができた頃でC++よりも私のプログラマ歴の方が長い)
Cはポインタ というか、ポインタを使いこなすことで、チューニングしていく言語だから ポインタ使いたくない=チューニングしたくない
って人は他の高級言語で良いと思う。ただ、動画などの処理をC/C++又はアセンブラ以外で書く人というのは、あまり聞かないので
速度が必要=C/C++って事かと思う。
昔、全くチューニングしていない、CとJavaを比べて同じ速度だからJavaでもOKというレポートを読んだことがあるのだが、あれは酷かった。
Cはチューニングしたときに、もっとも伸びしろが大きく、必要な場合アセンブラと並記できることで、ほぼアセンブラという領域まで
チューニングできるところが魅力。その際、ポインタは無くてはならない。知っておくべき技術。
繰り返しになるけどチューニングしない人には意味がない言語と言われればその通り。
また、ポインタだけではなく、レジスタについても知っておくとCでの伸びシロが大きくなる。
そして、少なくともアセンブラレベルでのPUSH,POP,CALLは覚えておいた方がよい。
関数コールをすると、レジスタ類の待避がアセンブラレベルでは走り、その上、スタックに引数や返値を積んでジャンプするという
ものすごく遠大な処理がアセンブラレベルでは走っているが、Cレベルでは1行の関数コールに見える。
という事を理解しておくと、C++でのインライン関数の重要性や、再帰関数が実行時にはかなり重い理由が頭の中に浮かんでくる。
こういう言い方をすると、最近はCPUが早いから大丈夫とか言う人が多いが、じゃぁWindows Vistaは売れましたか?と聞きたい。
少なくともチューニングが必要な事もある。必要ないこともある。という事で選択すれば良いと思う。
たかだか、数行のスクリプトでチューニング不要ならそりゃ、Perlつかうさ
参考までに書いておくと、個人的感覚ではC++はオブジェクト指向言語ではない。
アセンブラにまで行き着く C言語を大規模開発する時に最低限必要となる抽象化をするための言語
そのために、まともにOOPで設計するとC++では重くなる事が多い。いかに、崩せるかがキモ。
またC++使いか?エセC++使いか?の見分け方は
constを正しく使えるか?参照を正しく使えるか? vtableの説明ができるか?
という質問に正しく答えられるか?で見分けると結構見分けがつくと思っている。
使用できる環境が多いから 言語仕様がコンパクトだから ポインタと言う概念を学べるから プログラミング言語として、二番目以降に学ぶには良い。(最初のプログラミング言語には...
少少梃子摺るけど、Cを最初に学ぶべきだと思う。ポインタを理解しないと他の言語でポインタを隠蔽している仕様を理解できない。 あたしはいつのまにかC#しかつかわなくなったけ...
http://anond.hatelabo.jp/20081230060518です。 自分の中で「プログラム言語を学ぶ」ということが「コンピューターの動作を理解する」と同義でした。実際にはポインタなんて暴走するプログラム...
C/C++にいくつか思うこと (ちなみに、プログラマ始めたのはCができた頃でC++よりも私のプログラマ歴の方が長い) Cはポインタ というか、ポインタを使いこなすことで、チューニング...
Cはプログラミング言語の速度の基準になるくらい速いよね。 でも、チューニングに行き着くのは最後の最後じゃないかなあ。問題の立て方、解き方が間違ってる(最適でない)事が多い...
組み込みだとコンパイラの最適化以前にそのハード用のコンパイラ自体なかったりするからやはりCって事になるんじゃないかと。組み込みやるのが一握りって事もないはず。
組み込みって言っても、最近は、ほとんど、マーベルかシグマテル、なくてもARM系の亜種、大手家電メーカーの独自チップとほとんど決まり切ってるから、さすがにコンパイラが無いって...
チューニングは最初と最後にやる物だと思う。 最初にチューニングの方向性を決めて設計。 実装 必要な部分からチューニング という方法でないと、いざ、チューニングと思っても、設...
元増田っす 言語仕様がコンパクトなのがなぜ良いのかと言うと、実は2つ理由があります。 学ぶのが楽だから コンパイラを作るのが楽だから 1つめは「全体像を把握するのが楽」と...
ポインタと一口に言っても メモリポインタもあるけど、関数ポインタもあるっしょ? いまは、Code Exploitなどのクラックに使われちゃうので、やらないといえばやらないけど。 ディスク...
関数ポインタも、結局関数がメモリに乗ってて、関数の開始位置をメモリのアドレスで表せるから使えるわけで、やっぱメモリポインタで良いんじゃないの? それをいうなら変数ポイン...
その辺のメモリポインタと関数ポインタのあいまいさがCのポインタの面白いところだと思うよ? よくわからんが何が曖昧なんだろう。 区別されているでしょ。 クラックされるから関...
×クラックされるから関数ポインタを使わない ○メモリ上にプログラムを自力でロードして、それを関数ポインタに変換して関数コールすると、Exploit系のバグなのか、わざとやっている...
Exploit系のバグなのか、わざとやっているのかが外部ツールで判別付かない場合がある ツールにひっかかるから、ですらないと思う。単にそういう技が必要なくなっただけ。 そもそもexp...
単にそういう技が必要なくなっただけ 必要が無くなったのは大前提だと思うけど? だから、昔はやったけど、今はやらない。DLLやSOがあるというのが1番の理由。でも、なんでDLLやSOが...
あきらかに素人さん相手の説明でそりゃーないでしょ。というか、第1の問題点として指摘しているかのように書いてあるし。まぁいいけど。。。 そもそも、まさに動的リンク機能がOSに...
最初期の増田っす。 そもそも関数ポインタって、最近流行の言葉(笑)で言えばバッドノウハウだから、別に細かいこと良いんじゃないの? 関数呼び出しってのも「式」にしちゃうとコン...
関数ポインタはバッドノウハウどころか、手続き的な抽象を使いたいところで多用しますぜ。 C++やオブジェクト指向言語だと 継承と仮想関数を使うけど、同じようなケースで C言語では...
いや、「プログラミング」という行為を学ぶのにポインタという概念は、隠せるほどのものでしかないのだから、Cは2番目でいいだろう。 ちなみにおいらはCから習った。だが、一学...
ポインタはアセンブラでよいんじゃないか?
少少梃子摺るけど、Cを最初に学ぶべきだと思う。ポインタを理解しないと他の言語でポインタを隠蔽している仕様を理解できない。 あたしはいつのまにかC#しかつかわなくなった...
C言語におけるポインタの使い方って、ほとんどがメモリを直接弄るってものじゃない。今の言語で、あるアドレスに一定の値を加減算したアドレスを求めたり、そのアドレスの中の内...
とはいえ、参照や配列を理解するのにポインタは必須ではない、というか別概念だよね。 Cでは参照や配列を扱うときにポインタという生の実装がむき出しになってしまうけど。 OCamlやSML...
元増田だけども。 「プログラミング」の最初期は、 逐次実行 変数 分岐 繰り返し 入出力 を使って、思ったことを実現すること(問題→モデル化→実装→実行)を実現するだけで充...
あんま関係ないけど、 どうやって作るか?より、 何を作りたいか?から始めた方がいいんじゃないのかな PICとかの組み込みが楽しそう!とかなれば、 やっぱりC覚えたほうが何かとら...
どうかなあ、C覚えるのは教養の幅も広がるし潰しも利くぜってのが発端だからなあ。 最もやりたいことに向いている言語を覚えたほうが早いってのはその通りだと思うんだけれども。定...