それは、C 言語のレベルでもわかると思う。
以下のようなプログラムだと、マシン語というか OS の知識が必要になるかもしれないけど。
#define ARYLSIZ 4096 #define ARYHSIZ 10240
int main() { char ary[ARYHSIZ][ARYLSIZ]; int h, l; #if 1 for ( h = 0; h < ARYHSIZ; ++h ) { for ( l = 0; l < ARYLSIZ; ++l ) { ary[h][l] = 1; } } #else for ( l = 0; l < ARYLSIZ; ++l ) { for ( h = 0; h < ARYHSIZ; ++h ) { ary[h][l] = 1; } } #endif return 0; }
言語の弊害でしょう (スコア:2, 興味深い)
機械語を理解しなきゃいけない高級言語は欠陥言語です。
この前提からすると、プログラマはマシン語を理解する必要はない!
理解しなければならないとすると、使ってる言語が悪い
Re:言語の弊害でしょう (スコア:1)
>機械語を理解しなきゃいけない高級言語は欠陥言語です。
それは流石に言い過ぎかと。
パイプラインストール一つとってみても、下位レイヤーの影響が
完全になくなるということはあり得ない。
Re:言語の弊害でしょう (スコア:2, すばらしい洞察)
「影響がなくなる」なんて言ってませんよね。「意識しないで済む」ということです。
たとえば、Squeak/Smalltalkでプログラミングするとき、
x86なんて知っていてもほとんど無意味でしょう。
もちろん、パイプラインがどうこうなんてのも無意味。
そんなのは、「Squeak/Smalltalkでプログラミングする」ために必要な知識じゃなくて
VMをつくるために必要な知識なんです。
で、VMの知識が必要か?というと微妙ですが、ほとんど要らない。
「プログラミング言語が提供するモデル」に対する知識が必要なのです。
C/C++系(Java/C#/Perlも?)言語の提供するモデルはノイマンアーキテクチャが直に見える、
かつ、C/C++系が主流。
だから、機械語やVMレベルの知識が必要とかいう話になるんでしょう。
List系とかSmalltalk系とかを考えたら、下層レイヤはLispマシン系?のVMになるけど
そんなところの知識なんかなくても、大抵デバッグできるし、困らない。
言語仕様やクラスライブラリなど知識のほうが圧倒的に重要でしょう。
Cが欠陥言語とは思わないけど、提供するプログラミングモデルの差だと思いますよ。
「高級アセンブラ」とか言われるゆえんでしょう。
Re:言語の弊害でしょう (スコア:0)
いまだに結構使われていると思われる C は「低級言語」とか「高級アセンブラ」とか呼ばれたりすることがありますが、やはりアセンブリ言語レベルでの理解はいくらかは必要なものと思います。
たとえば、メモリがどのように使われるかを理解していないと、
上記のようなコードがなぜ問題なのか理解できないことでしょう。こーゆーのは多少高級になった C++ でも同様ですね。まあ欠陥言語ですけど。
Re:言語の弊害でしょう (スコア:1)
以下のようなプログラムだと、マシン語というか OS の知識が必要になるかもしれないけど。
Re:言語の弊害でしょう (スコア:0)
Re:言語の弊害でしょう (スコア:1)
Re:言語の弊害でしょう (スコア:1, 参考になる)
CPUのキャッシュにのったまま処理されるかどうかが問題であってOSは一切関係ない。
簡潔に理解するためにCPUキャッシュが4096バイト×1しかないとしよう。
#if 1 から #else までの場合、
1.メモリからCPUキャッシュに4096バイト読み込む。
2.4096バイトを全部1にしてキャッシュからメモリに戻す。
3.1~2を10240回繰り返す。
となるけど、#else から #endif までは
1.メモリからCPUキャッシュに4096バイト読み込む。
2.1バイトを1にして(次の1バイトでキャッシュヒットしないために)キャッシュからメモリに戻す。
3.1~2の処理を4096回繰り返す。
4.1~3の処理を10240回繰り返す。
となって大幅にパフォーマンスが低下する。
Re:言語の弊害でしょう (スコア:0)
必ずしもOSは関係無いとは言えないよ。
MMUとかTLBとか知ってる?
Re:言語の弊害でしょう (スコア:0)
Re:言語の弊害でしょう (スコア:0)
そうだとしてもOSの知識が必要というのが良くわからんが。
Re:言語の弊害でしょう (スコア:0)
Re:言語の弊害でしょう (スコア:0)
Re:言語の弊害でしょう (スコア:0)
Cだとsetjmpなどを理解するにはアセンブラレベルの理解は必要でしょう。
でも、Prologくらい高級言語だとアセンブラは不要かな?
Lispだと???
Re:言語の弊害でしょう (スコア:0)
Re:言語の弊害でしょう (スコア:0)
Lispマシンがどんな実装になってるのか知らないけど。
Re:言語の弊害でしょう (スコア:0)
チューニングのためにdisassembleしたり、デバッガでステップ実行するときはこのインストラクションレベルを普通に読んだり触ったりします。
これらのインストラクションはマイクロコードで実装されていて、OSのスピードクリティカルな部分等は直接マイクロコードで書かれていたりしたらしいので、OS実装者はマイクロコードの知識も必要だったのかもしれませんが、普通はそこまで見えなかったと思います。
Re:言語の弊害でしょう (スコア:0)
Re:言語の弊害でしょう (スコア:0)
「スコープ」と「オブジェクトの生存期間」の区別もつかない人がいるわけで、
まずは自分の使っている言語を知ることが最も重要なのだと思います。