言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

論文読み David A. Fisher. A survey of control structures in programming languages. 1972

http://portal.acm.org/citation.cfm?id=987361.987363

概要

プログラミング言語で使われる様々な制御構造を取り上げたカタログです。

マシンレベルの制御機構

  • branch 分岐 : 条件に応じて命令をスキップする。
  • control transfar 移転 : 別の場所へ制御を移動する。
  • instruction modification 書き換え : データをプログラムとして実行する。

プログラムレベルの制御構造

  • go to : 別の場所を制御を移動する。
  • iteration : 条件に応じて繰り返し実行する。
  • subroutines : 同じプログラムを複数の箇所から実行する。
    • open subroutines : 参照元を subroutines で置き換える。マクロ。
    • closed subroutines : 移転によって subroutines に制御を移して戻る。
  • recursion : 再帰呼び出し
  • coroutines : 階層構造を持たないプログラム片。三つの見方がある。
    • mutual subroutines 相互呼び出し : お互いがお互いのサブルーチンに見える。
    • procedures with own storage メモリ付きプロシージャ : メモリと実行コンテキストをプログラム片ごとに持つ。
    • symmetrical control : ノンプリエンティブマルチタスクと同じ?
  • parallel processing : 同時にいくつも実行経路がある事。
  • synchronization and monitorging : 同期を取る方法。以下の要素が必要。
    • indivisibility : セマフォなどで、複数のプロセスが同時に資源にアクセスする事を制限。
    • nonbusy wait : 割り込みなどで、他のプロセスを待つ際に、CPU を消費しない事を保証。
  • pseudo-parallel processing : ノンプリエンティブマルチタスクと同じ?同期が不要な parallel processing
  • nondeterministic programs : 深さ優先探索の事。
  • その他
    • 特定のデータ構造に適した物 : snobol の 置換、lisp再帰構造
    • 実行順序を明示しない : Iswim の where 節
    • 左辺に複数の変数を置く(日本語の用語忘れた) A,B <- B,A みたいなの。
    • eval 演算子 : データをプログラムとして実行する。
    • generator : 列を生成するプロセス

関連で見た制御構造の分類

  • subroutines : 二つのプログラムが階層構造を持つ
  • coroutines : 二つのプログラムが交互に動く
  • parallel routines : 二つのプログラムが同時に動く

感想

割と機械よりの話だからか、パターンマッチングや遅延評価に関する話題が全然無いし、nondeterministic programs に対してえらくあっさりしています。