====== プログラミング言語概論 ======
===== プログラム言語の分類 =====
* 汎用プログラム言語
* 第四世代言語
* スクリプト言語
* 特殊問題向き言語
コンピュータ上で動作するプログラムは、
プログラム言語で書かれており、処理する
内容に依って使い分けられる。
===== 汎用プログラム言語 =====
* 低水準言語
* 機械語
* アセンブリ言語(アセンブラ)
* 高水準言語
* 手続き型言語
* 非手続き型言語
* 構造化言語
* オブジェクト指向型言語
===== 第四世代言語 =====
; 第四世代言語
: 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
: 高可搬性オブジェクト指向インタープリタ