====== プログラミング言語概論 ====== ===== プログラム言語の分類 ===== * 汎用プログラム言語 * 第四世代言語 * スクリプト言語 * 特殊問題向き言語 コンピュータ上で動作するプログラムは、 プログラム言語で書かれており、処理する 内容に依って使い分けられる。 ===== 汎用プログラム言語 ===== * 低水準言語 * 機械語 * アセンブリ言語(アセンブラ) * 高水準言語 * 手続き型言語 * 非手続き型言語 * 構造化言語 * オブジェクト指向型言語 ===== 第四世代言語 ===== ; 第四世代言語 : 4th generation language(4GL) 高水準言語(第3世代言語)よりさらに抽 象度の高い命令をもつプログラム言語 - 高生産性、習得が容易 - データベース機能を標準的にサポート - 環境からの独立性 - 非手続き型 4GLの指す内容は文脈によって異なるので 注意が必要 ===== スクリプト言語 ===== エンドユーザ向き言語 小規模で簡単な処理に向く * 表計算のマクロ言語 * Webのサービスプログラム(cgi)に利用 ; 代表的なスクリプト言語 : perl, ruby, python (独立汎用型) : awk, sed (目的別unix系プログラム) : sh, csh (バッチ処理型インタープリタ) ===== 特殊問題向き言語 ===== ; シミュレーション言語 : GPSS, DYNAMO ; 数値制御用言語 : APT ; 土木建築用言語 : COGO, STRESS ; 統計処理用言語 : SAS ===== 言語処理プログラム ===== ; 機械語 : 通常唯一の命令列 : 通常0/1の2進数で表現される : 人間に理解し易いように16進数が使われることもある プログラム言語->機械語 言語処理プログラム ===== 機械語 ===== ON OFF ON OFF OFF OFF ON ON SW LED 実験用マイクロコンピュータボードで 入力SWに対応するLEDを点灯する ただし、入力SWのポート番号は11111001(F9) 出力LEDのポート番号は11111000(F8)とする 1101101111111001 1101001111111000 DB F9 D3 F8 低水準言語 機械語 アセンブリ言語 人間に解りにくい 特定のハードウェアに依存する プログラムを小さくすることができる プログラムを高速に実行することができる アセンブリ言語 ON OFF ON OFF OFF OFF ON ON SW LED 機械語と一対一に対応 入力SWのポート番号は(F9)、出力LEDのポート番号は(F8)、 プロセッサはZ80 IN A, (??) → DB ?? OUT (??), A → D3 ?? IN A, (F9) DB F9 OUT (F8), A D3 F8 アセンブリ 言語 機械語 アセンブラ 高水準言語 人間の言語表現に近い構造をもつ 記述に、汎用性・可搬性がある 特定のハードウェアに依存しない 現在の主流 COBOL, Fortran, c, pascal, c++, java lisp, prolog, SQL 高水準言語 ON OFF ON OFF OFF OFF ON ON SW LED c言語 unsigned int a; a = get_SW_status(); set_LED_on(a); 入出力関数は専用ライブラリで 用意されなければならない Fortran INTEGER A READ (9, *) A WRITE (8, *) A 入出力装置番号8/9はシステム により定義されていなければな らない ===== コンパイラとインタープリタ ===== コンパイラ(翻訳型) 高水準言語で書かれたプログラムを機械語 に一括翻訳した後、実行する 高速、エラーを取り除くのが難しい インタープリタ(解釈型) 高水準言語で書かれたプログラムを一行づ つ機械語に解釈し逐次実行する 低速、扱い易い プログラムの作成から実行まで #include int main(void) { printf("Hello\n"); } 原始プログラム (Source program) testc.c 00101Hello11000 101_main0011001 10101_printf0001 目的プログラム (Object module) testc.o 001010101110001 010011001100110 101010111100001 実行可能プログラム (Executable module) a.out 0011_printf00010 1101_getc000111 1011_scanf11100 ライブラリ (Library) libc.a * コンパイラ *リンカ * コンパイル リンク(連係編集) ===== プログラム作成手順 ===== - 原始プログラム(Source program)の作成 - 原始プログラムをコンパイルし、目的プログラム(Object module)に変換 - 目的プログラムを連係編集(link)し、実行可能プログラム(Executable module/Load(able) moduleに変換 - 実行可能プログラムをメモリ上にロードし実行する 概要 プログラムの作成から実行まで hello.c int main(){ printf("Hello,world\n"); } hello.o 0110010100_main_000 110001100110_printf _0 a.out 0110010100001110000 1100011001100101010 10 コンパイラ リンカ Source program Object module Loadable module プログラム(モジュール)の保存 ファイル T97E121 T97E121 T97E121 85 48 72 A D B フィールド レコード 011000 011110 110100 ビット列 ===== プログラム作成用語集 ===== ; 原始プログラム : source program/source code/source file :プログラム言語によって記述されたもの ; 目的プログラム : object module/object code/object file : コンパイラによって変換されたものアドレスなどが未定義のため実行不可 ; 実行可能プログラム : executable file/load module/command : プログラムの実行に必要なサブルーチンや関数などを含めた計算機で実行可能なもの ; リンク(連係編集) : 目的プログラムのサブルーチン、関数のアドレス定義を行いライブラリなどと結合させて実行可能プログラムを作成する。リンケージエディタ(リンカ)によって行う ===== コンパイル ===== * 原始プログラムを機械語に翻訳する作業 処理過程 - 字句解析 - 構文解析 - 意味解析 - 最適化 - コード生成 ===== アプリケーションの種類 ===== ; GUI アプリケーション : (GUI: Graphical User Interface) : 高水準言語からOSの提供するAPIを呼び出すことにより作成する ; コンソールアプリケーション : OSの提供する標準入出力を使用して作成し、CUIから利用する (CUI: Character User Interface) ===== 主なプログラミング言語 ===== ; Fortran : 最初の高水準言語、科学技術計算に向く ; COBOL : 主に事務処理用に用いられる ; c言語 : unixの標準開発環境、汎用性が高い ; Pascal : プログラミング教育用 ; c++ : c言語にオブジェクト指向の機能を付加 ; LISP : 関数型言語、人工知能やリスト処理用 ; Smalltalk : 最初のオブジェクト指向言語 ; Java : 高可搬性オブジェクト指向インタープリタ