Linux/misc/プログラミング言語の選定
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
] [
リンク元
]
開始行:
[[Linux/misc]]
#contents
*前提 [#d7c216e3]
話の前提として,以下のような状態を考える.
- 複数人でのプログラム開発
- メンバーのスキルは様々
-- メンバーのスキルアップ,という手段は考慮しない.((実現...
- 仕様通りのプログラムの完成が第一目標
このような条件で
> いかにプログラムの品質を一定レベル以上に保つか
というあたりを考えてみる.
「スキルの高い人間が効率よくプログラミングできる」という...
**環境 [#g994a614]
Linux のシェルプロンプトから実行可能な言語とする.
つまり,Visual Basic や JavaScript は対象外とする.
*速度 [#lb9f194d]
プログラムの実行速度は,もちろん速いにこしたことはない.
「実行速度が遅い」ということで仕様を満たさないプログラム...
速過ぎる場合はウェイトを入れれば済むだけの話なのだから.
あと,実行速度が遅いために,変にコードの最適化を行わなけ...
最適化によりプログラムのコード量も増え,見通しも悪くなり...
それから「論理的には間違っていないが効率の悪いプログラム...
議論の対象は,トップレベルのプログラマが書いたプログラム...
つまり,言語の実行速度については
>速さこそ正義
ということが言えるだろう.((プログラムの速度,でないこと...
速度に関しては,perl, ruby, python のようなインタプリタ型...
** プロファイラ [#j41b8ed3]
もし,実行速度に不満のある場合,お世話になるのがプロファ...
プロファイリングを有効にしたプログラムを実行すると,ルー...
プロファイラが無い場合,「ここが実行に時間かかっていそう...
が,「80-20の法則」((CPU 時間の 80 % を占めているのは,プ...
この「20 %」にヒットするまでプログラムを書き換えていくの...
また,ほとんど関係なかった部分を元に戻す,というのもこれ...
つまり
> プロファイラはあったほうがいい
ということである.
*文字列 [#b7533d8a]
文字列の取り扱いというのは,非常に重要な問題であろう.
バッファオーバフロー,というのは,サーバへの攻撃手段とし...
サーバが想定していた文字数以上の文字を与え,スタック領域...
sendmail などの有名なプログラムもこのような問題を抱えてい...
sendmail は C で記述されている.
つまり,C で文字列領域を徹頭徹尾完璧に管理するのは,一流...
これに対し,perl, ruby などの言語の文字列は言語環境側で管...
C++ にも,領域管理のある string クラスがあるが,C 流の ch...
この点に関して C++ に対する評価は微妙なところであろう.
*ヒープ管理 [#o4bed691]
要するに C でいうところの malloc(3), free(3) である.
原則として malloc() した領域は必ず free() で解放する必要...
でないと,malloc() したもののポインタ変数が消滅((自動変数...
いわゆるメモリリークである.
メモリリークは短時間で終了してしまうプログラムなら問題と...
electric fence などのデバッグツールがあることからしても,...
ここで「なぜ malloc() を呼び出すのか」ということについて...
malloc() で確保した領域になんらかのデータを格納したいから...
ということは,オブジェクト指向言語においては,malloc()/fr...
このとき,free() に相当する処理は,そのオブジェクトが参照...
つまり,ヒープの解放処理の抜け,というのは生じないことに...
**ガベージコレクション [#ae1fa0db]
オブジェクト指向言語の処理系で,参照されなくなったヒープ...
で,現在メジャーな言語では,主に以下のようなアルゴリズム...
*** reference counting [#o4bc4945]
各オブジェクトの「参照されている数」を保持し,その数が 0 ...
処理速度は速いが,a → b → c → a のような循環参照は,プロ...
循環参照された領域を解放するには,どれかのリファレンスに ...
perl はこのアルゴリズムを使用しているため,このような参照...
*** mark and sweep [#f954db05]
現在有効な変数からリファレンスをたどって,到達可能なオブ...
この場合,reference counting で問題となった循環参照してい...
終了行:
[[Linux/misc]]
#contents
*前提 [#d7c216e3]
話の前提として,以下のような状態を考える.
- 複数人でのプログラム開発
- メンバーのスキルは様々
-- メンバーのスキルアップ,という手段は考慮しない.((実現...
- 仕様通りのプログラムの完成が第一目標
このような条件で
> いかにプログラムの品質を一定レベル以上に保つか
というあたりを考えてみる.
「スキルの高い人間が効率よくプログラミングできる」という...
**環境 [#g994a614]
Linux のシェルプロンプトから実行可能な言語とする.
つまり,Visual Basic や JavaScript は対象外とする.
*速度 [#lb9f194d]
プログラムの実行速度は,もちろん速いにこしたことはない.
「実行速度が遅い」ということで仕様を満たさないプログラム...
速過ぎる場合はウェイトを入れれば済むだけの話なのだから.
あと,実行速度が遅いために,変にコードの最適化を行わなけ...
最適化によりプログラムのコード量も増え,見通しも悪くなり...
それから「論理的には間違っていないが効率の悪いプログラム...
議論の対象は,トップレベルのプログラマが書いたプログラム...
つまり,言語の実行速度については
>速さこそ正義
ということが言えるだろう.((プログラムの速度,でないこと...
速度に関しては,perl, ruby, python のようなインタプリタ型...
** プロファイラ [#j41b8ed3]
もし,実行速度に不満のある場合,お世話になるのがプロファ...
プロファイリングを有効にしたプログラムを実行すると,ルー...
プロファイラが無い場合,「ここが実行に時間かかっていそう...
が,「80-20の法則」((CPU 時間の 80 % を占めているのは,プ...
この「20 %」にヒットするまでプログラムを書き換えていくの...
また,ほとんど関係なかった部分を元に戻す,というのもこれ...
つまり
> プロファイラはあったほうがいい
ということである.
*文字列 [#b7533d8a]
文字列の取り扱いというのは,非常に重要な問題であろう.
バッファオーバフロー,というのは,サーバへの攻撃手段とし...
サーバが想定していた文字数以上の文字を与え,スタック領域...
sendmail などの有名なプログラムもこのような問題を抱えてい...
sendmail は C で記述されている.
つまり,C で文字列領域を徹頭徹尾完璧に管理するのは,一流...
これに対し,perl, ruby などの言語の文字列は言語環境側で管...
C++ にも,領域管理のある string クラスがあるが,C 流の ch...
この点に関して C++ に対する評価は微妙なところであろう.
*ヒープ管理 [#o4bed691]
要するに C でいうところの malloc(3), free(3) である.
原則として malloc() した領域は必ず free() で解放する必要...
でないと,malloc() したもののポインタ変数が消滅((自動変数...
いわゆるメモリリークである.
メモリリークは短時間で終了してしまうプログラムなら問題と...
electric fence などのデバッグツールがあることからしても,...
ここで「なぜ malloc() を呼び出すのか」ということについて...
malloc() で確保した領域になんらかのデータを格納したいから...
ということは,オブジェクト指向言語においては,malloc()/fr...
このとき,free() に相当する処理は,そのオブジェクトが参照...
つまり,ヒープの解放処理の抜け,というのは生じないことに...
**ガベージコレクション [#ae1fa0db]
オブジェクト指向言語の処理系で,参照されなくなったヒープ...
で,現在メジャーな言語では,主に以下のようなアルゴリズム...
*** reference counting [#o4bc4945]
各オブジェクトの「参照されている数」を保持し,その数が 0 ...
処理速度は速いが,a → b → c → a のような循環参照は,プロ...
循環参照された領域を解放するには,どれかのリファレンスに ...
perl はこのアルゴリズムを使用しているため,このような参照...
*** mark and sweep [#f954db05]
現在有効な変数からリファレンスをたどって,到達可能なオブ...
この場合,reference counting で問題となった循環参照してい...
ページ名:
-->