QR コードと URL

https://goo.gl/KFsnYq

QR コード

香川研究室について
ロングバージョン


香川 考司

教員紹介

  • 香川 考司 (かがわ こうじ)
    香川大学 創造工学部 情報コース
  • 専門分野
    プログラミング言語(コンパイラー・ツール・ライブラリー)
    プログラミング学習支援システム
  • 担当授業

    『プログラミング』『オブジェクト指向言語』
    『プログラミング言語論』(大学院)など

例えると…

Genie emoji clipart (F) Genie emoji clipart (M)
  • コンピューター   魔法のツエ
  • プログラム     呪文
  • プログラミング   呪文を組み立てること
  • プログラミング言語 呪文体系
  • コンパイラー    呪文を解釈する呪文
  • ライブラリー    呪文の部品集・魔導書?
  • 学習支援システム  魔法使いの弟子養成システム

コンピューターの仕組み

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

  • CPUは、+−×÷<>= などの計算をする
    • 単純な計算だが一秒に何十億回も実行する
  • メモリーは、いわば巨大なそろばんである
    • 億や兆を超えるケタを持つ

プログラム

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

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

機械語

  • メモリーの数ケタ分を一まとまりとみなす
    (すごろく🎲の“マス”みたいなもの)
  • CPU は各マスの指示を順々に実行する
  • 一つ一つの指示はとても単純である。例えば…
    • メモリーのあるケタに別のケタの数を足す(引く)
    • 直前の式が成り立つなら指定分マスを進む(戻る)
    など

プログラムの組立て

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

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

プログラミング言語

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

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

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

ポイント

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

  • たくさん覚えて忘れない速くて間違えない、
    『常識』は持ち合わせていない。つまり人間が指示を間違えると、間違ったまま実行する
  • プログラムはとても長い
    プログラミング言語を使って、うまく部品化することで、 大規模・複雑なプログラムを組み立てることができる

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

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

  • パラダイムによる分類
    命令型、オブジェクト指向、関数型、論理型
  • 型付けによる分類
    静的型検査、動的型検査、他
Pieter Bruegel the Elder - The Tower of Babel (Vienna) - Google Art Project - edited

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

香川研究室の研究テーマ

  • プログラミング言語(ツール・ライブラリー)

    大規模で複雑なプログラムを、部品化することで効率よく作り、 しかもプログラムの間違いを起こりにくくすることを目指す

  • プログラミング学習支援システム

    初心者が、楽しく、効率よく、プログラミングを学習できることを目指す

今後のプログラミング言語はどうなる?

  • 組み立ての基本の理解の必要性は変わらない
    • 日本語や英語などの自然言語よりも圧倒的に簡潔に書ける
  • 部品化はますます大事になる
    • AI が作成したプログラムを読解する必要がある
    • ボイラープレート(何度も繰り返されるお決まりの部分)は少ないほど良い
  • 検証や証明が当り前になる
    • プログラムの細部を理解しなくても正しさが保証される、例えば
      • どんな順番・タイミングでイベントが起きても、正常に反応する
      • 前のバージョンより性能が圧倒的に良いが、実行結果は変わらない
      のような証明が一般的になる

やってみよう

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

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

サンプル (1)

やってみる

サンプル (2)

やってみる

興味のある人は…

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