香川研究室について

# QR コードと URL

https://goo.gl/KFsnYq

香川研究室のオープンキャンパスの展示に使用している、Web ページ の QR コードと短縮 URL です。

# 香川研究室について

# 香川 考司
このスライドでは、香川研究室の研究テーマと、香川研究室のオープンキャンパスの展示、を紹介します。

## 教員紹介

香川 考司 （かがわ こうじ）
香川大学 創造工学部
情報システム・セキュリティ (CSSS) コース
専門分野
プログラミング言語（特に 型システム）
プログラミング学習支援システム
担当授業
『プログラミング』『オートマトン』『コンパイラ』『オブジェクト指向言語』
『プログラミング言語論』など

まずは教員の紹介をします。
「かがわこうじ」といいます。
香川大学創造工学部の電子情報工学領域というところに所属しています。
主に、情報システムセキュリティコースの授業とゼミを担当しています。
専門分野は、プログラミング言語の型システムとプログラミング学習支援システムです。
担当している授業は、大学の学部の『プログラミング』『オートマトン』『コンパイラ』『オブジェクト指向言語』、
大学院の『プログラミング言語論』などです。

## 例えると…

コンピューター　　 ➡ 魔法のツエ
プログラム　　　　 ➡ 呪文
プログラミング　　 ➡ 呪文を組み立てること
プログラミング言語 ➡ 呪文体系
型システム　　　　 ➡ 呪文のミスを減らす仕組み
学習支援システム　 ➡ 魔法使いの弟子養成システム

少し、難しいことばが出てきましたが、たとえで説明してみます。
コンピューターはいわば魔法のツエ、あるいはランプです。
そうすると、プログラムは魔法の呪文ということになります。
ただし、映画やゲームで出てくる魔法の呪文はふつう短いですが、あとで説明するように、プログラムはとてもとても長いものになります。
プログラミングは呪文を組み立てることであり、プログラミング言語は呪文体系です。
ハリーポッターとドラゴンクエストで呪文が異なるように、さまざまなプログラミング言語が存在します。
型システムというのは、プログラムの部品を組み合わせるときに間違った組み合わせが起こらないようにして、プログラムのミスを減らすための仕組みです。
学習支援システムというのは、魔法使いの見習いが一人前の魔法使いになるのを支援するものです。
コンパイラーは呪文体系のあいだを変換するための装置です。
しかし、実際はコンパイラー自体もプログラム、つまり呪文です。

## コンピューターの仕組み

主に、計算する部分（CPU）と、
記憶する部分（メモリー）からなる

CPUは、+−×÷ や
<>= などの計算をする

- 単純な計算だが一秒に何十億回も実行する
- メモリーは、いわば巨大なそろばんである
- 億や兆を超えるケタを持つ
- ここでまずは簡単にコンピューターの仕組みを説明します。
コンピューターは主に、計算する部分と記憶する部分からなります。計算する部分はCPU、記憶する部分はメモリーと呼ばれます。
CPU はたしざん、かけざんや大小判定など、ひとつひとつは単純な計算を実行します。しかし、ひじょうに高速で、一秒に何十億回も計算をします。
メモリーは巨大なそろばんのようなものです。
しかしひじょうに巨大で億や兆を超えるケタを持ちます。
億や兆を表せる桁数ではなくて、桁数が億や兆です。
全然違うので気を付けてください。
一兆を表すには桁数は 13 しか必要ありません。

## プログラム

CPU に与える手順・指示のまとまりである

CPU が理解できる指示は『機械語』という
プログラムはメモリーに記録されている
（フォン＝ノイマン方式）

コンピューターに対して、こういう計算をしろ、という指示をプログラムと言います。
CPU が直接理解できる指示の体系は機械語と言います。
プログラムは先ほど説明した、メモリーに格納されています。
これを、プログラム内蔵方式、または、フォン・ノイマン方式と言います。

## 機械語

メモリーの数ケタ分を一まとまりとみなす
(すごろく🎲の“マス”みたいなもの)
CPU は各マスの指示を順々に実行する
一つ一つの指示はとても単純である。例えば…

メモリーのあるケタに別のケタの数を足す（引く）
直前の式が成り立つなら指定分マスを進む（戻る）

など

機械語のプログラムは、ある意味、すごろくの指示に似ています。
メモリーのある大きさのケタ数を一つのマス、あるいは単語とみなします。
各マスに書かれている数が指示に対応します。
CPU は各マスに書かれている指示を、前から順に実行します。
先ほど説明したように、一つ一つの指示は、ひじょうに単純なものです。
たとえば、メモリーのある場所の数を別の場所にコピーする、メモリーのある場所に別の場所の数を足したり、引いたりする、
直前の計算結果がゼロならば指定分のマスを進んだり、戻ったりする、などです。

## プログラムの組立て

プログラムの組立ての基本は
順次・反復・分岐の 3 つである。
これだけあれば“何でも”できる

順次 ⋯ いくつかの処理を、順に一つずつ実行していく
反復 ⋯ 同じ処理をくり返す
分岐 ⋯ 条件が成り立つかどうかによって、処理を選ぶ

このような機械語の組み立てかたの基本は、順次・反復・分岐、の 3 つです。
順次はいくつかの処理を、前から順に一つずつ実行していくことです。
反復は、ある条件が成り立つあいだ、同じ処理をくり返すことです。
分岐は、条件が成り立つかどうかによって、実行する処理を選択することです。
これだけあれば何でもできる、ということがわかっています。

## プログラミング言語

機械語で大きなプログラムを作るのは難しい。
そこで…

人にわかりやすい体系（プログラミング言語）でプログラムを作って機械語に翻訳する
指示のまとまりを部品化することで、さらに複雑な指示を組み立てられる

部品化の考え方の違いによって、たくさんの種類のプログラミング言語がある

しかし、実際には機械語で大きなプログラムを作ることはひじょうに難しいことです。
そこで、より人間にわかりやすい言語でプログラムを作成して、それを機械語に翻訳する、という手法が取られます。
この人間にわかりやすい言語をプログラミング言語と言います。
機械語と区別する場合は、高級言語とも言います。
指示のまとまりを部品化することで、より複雑なプログラムを組み立てていくことができるようになります。
この部品化の考え方の違いによって、多くのプログラミング言語があります。

## ポイント

コンピューターは、一つ一つは単純な指示を、
何億回・何兆回⋯でも疲れずくりかえす

たくさん覚えて忘れない、速くて間違えない、

- 『常識』は持ち合わせていない。つまり人間が指示を間違えると、間違ったまま実行する
- プログラムはとても長い
- プログラミング言語を使って、うまく部品化することで、
大規模・複雑なプログラムを組み立てることができる
- ここまでのポイントをまとめます。
コンピューターは、一つ一つは単純な計算の指示を、ひじょうに高速に実行する機械です。
たくさんの数を記憶することができ、決して疲れないし、忘れない、間違いないし、速いです。
しかし常識、というものは持ち合わせていません。
プログラムで指示された通りに計算を実行します。
つまり、指示が間違っていると、間違ったまま実行します。
大きなプログラムをつくるためには、プログラミング言語を使って部品をつくり、部品をうまく再利用しなければいけません。

## さまざまなプログラミング言語

Fortran, C,
C++, Java, C#, Haskell, Scala, Scheme, Prolog, miniKanren,
Perl, PHP, Ruby, Python, JavaScript, Clojure, Kotlin, Go,
Swift, Rust, …

パラダイムによる分類
命令型、オブジェクト指向、関数型、論理型
型付けによる分類
静的型検査、動的型検査、他

言語によって得意分野が異なる

現在では、フォートラン, C, C plus plus, Java, C シャープ, ハスケル, スカラ, スキーム, Prolog, ミニカンレン, Perl, PHP, ルビー, パイソン, JavaScript, クロージャー, コトリン, ゴー, スイフト, ラスト、 などなど多くのプログラミング言語があります。
これらの分類方法もいろいろあり、パラダイムによる分類、型による分類、などがあります。
言語によって得意分野が異なり、複数の言語を使い分ける必要があります。
まさにバベルの塔のような状態です。
ただし、ひとりの人がいくつかのプログラミング言語を使いこなすのが普通です。

## 香川研究室の研究テーマ

プログラミング言語処理系（特に型システム）
大規模で複雑なプログラムを、部品化することで効率よく作り、
しかもプログラムの間違いを起こりにくくすることを目指す
プログラミング学習支援システム
初心者が、楽しく、効率よく、プログラミングを学習できることを目指す

香川研究室では、プログラミング言語の型システムとプログラミング学習支援システムを研究しています。
型システムはプログラムの部品を組み合わせるときに、間違いが起こりにくいようにするためのものです。
学習支援システムは、初心者が、楽しく、速く、プログラミングを学習できるように手助けするものです。

## やってみよう

香川研究室の展示「お絵かきプログラミング」では、
ここまでで説明した、
順次・反復・分岐
を使って、コンピューターに規則正しい絵を描かせる体験をします。

Processing という言語を参考にして、お絵かき用の機能を部品化しました。

香川研究室のオープンキャンパスの展示である「お絵かきプログラミング」は学習支援システムを応用したものです。
機械語のところで説明した、順次・反復・分岐は、どんなプログラミング言語でも基本となるものです。
これを使って、コンピューターに規則にもとづく絵を描いてもらおうというものです。
プロセッシングというプログラミング言語を参考にして、お絵かき用の機能を部品化しました。

## サンプル (1)

やってみる

この例は、規則に基づいて、いくつかの線を引いて、模様を描きます。

## サンプル (2)

やってみる

この例は、絵文字を規則に従って配置していきます。

## 興味のある人は…

以下のリンクへ進んでください。

サンプル集
チュートリアル（ブックカバー編）
チュートリアル（シール・カード編）
印刷の仕方
データダウンロード

興味のある人は、次の、シール・カード編か、ブックカバー編のどちらかのチュートリアルへのリンクを選択してください。

# 終

これで香川研究室の紹介を終わります。