コンピュータ概論B ー ソフトウェアを中心に ー #10 プログラミング・言語

Slides:



Advertisements
Similar presentations
情報処理基礎 A ・ B 第 5 回 プログラミング入門 操作の自動化を実現する仕組み. 2004/11/16 ・ 17 情報処理基礎 A ・ B 2 本日の内容 処理の自動化~プログラムの概念 ハードウェアとソフトウェア プログラミング言語 Excel における処理の自動化 入力支援の機能 分析ツール.
Advertisements

オブジェクト指向 言語 論 知能情報学部 新田直也. 講義概要  私の研究室: 13 号館 2 階 (13-206)  講義資料について :  参考図書 : 河西朝雄 : 「原理がわかる プログラムの法則」,
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
情報処理3 アプリケーション プログラミング 今井孝明.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
Java I 第2回 (4/18)
プログラミング入門 (教科書1~3章) 2005/04/14(Thu.).
FORTRAN 科学技術計算用 数値演算精度を重視したシステム K=0 DO 10 I=0,N,1 K=K+I 10 CONTINUE
情報工学基礎(改訂版) 岡崎裕之.
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
オブジェクト指向言語論 知能情報学部 新田直也.
応用情報処理V 第1回 プログラミングとは何か 2004年9月27日.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
聴き比べに特化した 音楽の鑑賞と知識学習のための Webアプリケーション
情報工学科 二宮 洋・鈴木 誠 小林 学・高畠俊徳 火曜日 1コマ目
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
応用情報処理V 第1回 プログラミングとは何か 2003年9月29日.
オブジェクト指向 プログラミング 第一回 知能情報学部 新田直也.
心理学情報処理法Ⅰ コンピュータ言語の歴史.
プログラムはなぜ動くのか.
発表者 2011/01/08 楽しい256バイトイントロの 世界 発表者 2011/01/08.
2016年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
「ソフトウェアのしくみ」.
コンピュータの原理 1E17M053-9 奈良 皐佑 1E17M070-7 師尾 直希        1E17M078-6 渡邊 惇.
【プログラミング応用】 必修2単位 通年 30週 授業形態:演習.
型付きアセンブリ言語を用いた安全なカーネル拡張
プログラミング言語入門 手続き型言語としてのJava
言語プロセッサ2007 平成19年9月26日(水) (Ver.2 平成19年10月3日変更)
大岩 元 慶応大学環境情報学部 数式の表現と日本語 大岩 元 慶応大学環境情報学部
情報リテラシー2014 part 5/5 (亀田担当分最終回)
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
プログラミング言語入門.
TA 高田正法 B10 CPUを作る 3日目 SPIMの改造 TA 高田正法
コンピュータ概論B ー ソフトウェアを中心に ー #02 システムソフトウェアと アプリケーションソフトウェア
プログラミング基礎a 第1回 ハードウェアとソフトウェア プログラミング総論 ~プログラミング言語とは~
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
プログラミング基礎a 第1回 ハードウェアとソフトウェア プログラミング総論 ~プログラミング言語とは~
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
情報とコンピュータ 静岡大学工学部 安藤和敏
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
B演習(言語処理系演習)第2回 田浦.
2010年度 情報科学序論 ~ 内部構造と動作の仕組み(2) ~.
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
2013年度 プログラミングⅠ ~ はじめてのプログラミング ~.
コンパイラ 2012年10月1日
コンピュータアーキテクチャ 第 2 回.
数式の表現と日本語 データ構造とプログラミング(6)
情報基礎Ⅱ (第1回) 月曜4限 担当:北川 晃.
2013年度 プログラミングⅠ ~ 内部構造と動作の仕組み(2) ~.
2017年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
プログラミング入門 電卓を作ろう・パートI!!.
ソフトウエアの正体 vol.1 なるほどIT豆知識
コンピュータアーキテクチャ 第 2 回.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語 1.
コンピュータ概論B ー ソフトウェアを中心に ー #00 概要説明
情報処理Ⅱ 2006年11月24日(金).
プログラム分散化のための アスペクト指向言語
SMP/マルチコアに対応した 型付きアセンブリ言語
コンパイラ 2012年10月11日
2014年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
オブジェクト指向言語論 第一回 知能情報学部 新田直也.
2008年度 情報科学序論 ~ 内部構造と動作の仕組み(2) ~.
情報処理の概念 #0 概説 / 2002 (秋) 一般教育研究センター 安田豊.
C#プログラミング実習 第1回.
1.2 言語処理の諸観点 (1)言語処理の利用分野
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
プログラミングの原理 データ構造とプログラミング (第4回).
Presentation transcript:

コンピュータ概論B ー ソフトウェアを中心に ー #10 プログラミング・言語 京都産業大学 安田豊

自然言語と人工言語 自然言語 人工言語 言語の起源、獲得、自然さ 人間が日常生活で用いている言語 日本語、英語、etc.. 人間が意図的に作り出した言語 エスペラント (1887年 L.L. Zamenhof , ポーランド) 全てのプログラミング言語 言語の起源、獲得、自然さ 言語学の分野でも研究テーマ ここでは境界については気にしない

人工言語 エスペラント 日本語ローマ字表記運動 言語学でも(おそらくは)難しいテーマ 延々と続く普及の努力、しかし普及せず 学習が難しい、西欧並みの文化水準へ 明治、戦後などたびたび起きる 何故成功しなかったか? 言語学でも(おそらくは)難しいテーマ しかしプログラミング言語は普通に使われている 教科書 pp.108

プログラミング言語 コンピュータと対話するために利用 手順指示書のようなもの 例えばどのようなものか?

C 言語でのプログラム例 main(argc, argv) int argc; char *argv[]; { FILE *ifp,*ofp; int i,l; char ifile[256],ofile[256],dt[4096]; if(argc == 1) { printf("Usage: %s infile outfile¥n",argv[0]); exit(1); }; strcpy(ifile,argv[1]); strcpy(ofile,argv[2]); printf("I:%s O:%s¥n",ifile,ofile); ifp=fopen(ifile,"rb"); if(ifp == 0) { printf("Cannot open input file %s.¥n",ifile); return(-1); ofp=fopen(ofile,"wb"); if(ofp == 0) { printf("Cannot open output file %s.¥n",ofile); fclose(ifp); return(-1); }; while(1) { fgets(dt, 255, ifp); if( dt[0] == 10 || ( dt[0] == 13 && dt[1] == 10 ) ) break; while( !feof(ifp) ) { l=fread(dt, sizeof(char), 256, ifp); fwrite(dt, sizeof(char), l, ofp); fclose(ofp); }

機械語 教科書 pp.109 機械語 (machine language) コンピュータ (CPU) にとっての Native Language 汎用性無し (CPU 依存、互換性無し) CPU にとっては直接的でも 人間には解釈が困難 例: Sparc 用バイナリ 7400 2e64 796e 616d 6963 002e 706c 7400 2e65 785f 7368 6172 6564 002e 6461 7461 002e 6461 7461 3100 2e62 7373 002e 7379 6d74 6162 002e 7374 7274 6162 002e 7374

プログラミング言語 機械語を理解する アセンブリ言語 ! 9 j=0; それでも古典的には機械語で書いた mov 0,%l0 st %l0,[%fp-12] ! 10 for(i=0;i<l;i++) { st %l0,[%fp-8] ld [%fp-8],%l1 ld [%fp-16],%l0 cmp %l1,%l0 bge .L18 nop 機械語を理解する それでも古典的には機械語で書いた 直接数字が何を意味するかを記憶している アセンブリ言語 さすがに機械語は辛いので、これをわかりやすい略語で記述 最初のプログラミング言語 教科書 pp.113

プログラミング言語 アセンブリ言語 アセンブリ言語から機械語への変換 機械語へ変換する必要がある ほぼ一対一対応 結果的に CPU 依存、ハードウェア依存 それでも機械語よりは楽に書ける バグも減る(勘違いが減る) アセンブリ言語から機械語への変換 略語を単語置換で自動翻訳するようなもの これがプログラミング言語の本質

プログラミング言語 プログラミング言語とは? 教科書 pp.109 に良い図が 人間の思考をCPUへの作業指示に変えるための表現言語 思考を助け(拡張し) 楽に表現でき コンピュータを決定的に動作させるもの。 その表現作業を楽にすることも重要 教科書 pp.109 に良い図が

プログラミング言語の特徴 教科書 pp.110 決定的動作のために (解釈系による違いを防ぐ) 文脈・前後関係なしに一義的に決まる 決定的動作のために (解釈系による違いを防ぐ) 文脈・前後関係なしに一義的に決まる 一点一字の間違いも許されない 限定的な語彙(C言語では予約語は 32) 簡単な文法

具体例:アセンブリ言語 教科書 pp.112 特徴 低水準プログラミング言語の代表 自然言語に近いほど「高水準」と考える 歴史的には低水準から高水準へと進化 特徴 CPU 依存(移植性がない)CPU の機能を直接指定 機械語とほぼ一対一 ニーモニックコード (mnemonic : 記憶を助ける) 可読性が悪く、保守性が悪い 作成が難しく、生産性が低い 機械語に変換するソフトをアセンブラと呼ぶ

具体例:C 特徴 (アセンブラよりは)高水準な言語 CPU 依存なし (CPU 命令は直接指定できない) メーカー、OS が変わっても再利用できる 移植性が高い ニーモニックより更に抽象度が高く、自然言語に近い(プログラマにやさしい)語彙と文法 コンパイラ(Compiler)と呼ばれるソフトを利用してアセンブリ言語または機械語に変換 可読性が高く、保守しやすい プログラミングが容易で生産性が高い

抽象度 a=b+c 47 F0 E0 57 F0 E4 E7 F0 E8 二つの整数を加算する場合 機械語 アセンブリ言語 高水準言語 一時使用するレジスタ番号、メモリアドレスを指定 アセンブリ言語 レジスタ番号などはまだ残る 高水準言語 ハードウェアの中身から独立している 抽象度が高まった、移植性が高まった LD G1, F0E0 ADD G1, F0E4 ST G1, F0E8 a=b+c

プログラミングとは 教科書では料理の例 音楽の例 悪くはないが、、、、 プログラムとコンピュータは楽譜と楽器の関係に似る プログラマは音楽家に似る 音楽を作ったとしても、楽譜の書き方が分からなければ演奏家に伝えられない やりたいことがあってもプログラムの書き方が分からないとコンピュータに指示できない 音楽を楽譜に移す作業=目的をコンピュータの動作手順に変える作業=プログラミング

プログラミングとは 自己表現の一つの手段である 利用者の立場ではどうか? やりたいこと(その中でコンピュータにやらせたいことを)を表現する アプリケーションをソフトを使うだけ 音楽を聞くだけに似る 悪くはない 音楽の価値・意味の半分しか手にしていない

プログラミングとは? 音楽と同じように ただし アマチュアが作らないわけではない プロだから作るわけでもない 作りたいから作る、作る必要があるから作る ただし 現時点では業務システムを作るようなプロ向けの言語と開発システムに焦点が当たっているのは事実 これからはコンピュータを使って自己能力を拡張するために学ぶ機会が増えるだろう それに適した言語・環境も増えてくるだろう

人間と機械のあいだで プログラミング言語の条件 (教科書pp.116) 人間と機械の間で、 処理の考え方を計算機に処理可能な手順に変え、 具体的な手順指示を文法に従って書き、 機械語まで「噛み砕いて」はじめて実行される 人間と機械の間で、 人間にわかりやすく書かれなければならない →論理明晰で、可読性にすぐれた記述が重要 機械にわかりやすく書かれなければならない →厳しい文法に則って書く プログラマは両者のインタフェイスとなっている