香川研究室の紹介 香川 考司 [email protected] 香川研の研究テーマ 1. プログラミング言語の型システムの研究 (理論) 2. プログラミング学習支援システムの研究 (実践) 2 プログラミング言語の 型システムの研究 究極のプログラミング言語を 求めて 3 プログラミング言語の歴史 ※ 1949 (EDSAC) ただし, 誕生(公開)と流行には大きなズレがある場合が多い 1967 Simula 1954 FORTRAN 1958 LISP 1958 ALGOL 1959 COBOL 1980 Smalltalk 1970 Pascal 2003 Scala 1983 C++ 1972 C 1972 Prolog 1974 ML 1975 Scheme 1987 Perl 1990 Python 1990 Haskell 1995 Java 1995 Ruby 今後も新しいプログラミング言語が誕生するのは間違いない! 様々なプログラミング言語 Fortran, C, C++, Java, C#, Haskell, Scala, O’Caml, CommonLisp, Scheme, Prolog, Perl, Ruby, Python, Smalltalk, JavaScript, VB, PHP, Closure, Go, … • パラダイムによる分類 命令型、オブジェクト指向、関数型、論理型 • 型付けによる分類 静的型検査、動的型検査、他 • 実行方式による分類 コンパイラー方式、インタプリター方式 現状では、万能の言語はない 型あり vs. 柔軟 * 型なし *ほんとうは「型なし」という言い方は語弊がある コンパイル時 型検査なし 理想 epicurean? 快楽主義 Lisp, JavaScript, PHP, Ruby, Perl, Python, … stoic? 互いに影響 C, C++, Java, ML, Haskell, … 窮屈 危険 禁欲主義 コンパイル時 型検査あり 安全 関数型 (FPL) vs. OOPL OOPL GUIなど ク用 ラ途 スに (特 デ化 ーし タた 型デ )ー のタ 増型 加 理想 (が得意) C++, Java, … 複数のデータ型を 扱う処理を 定義することが得意 という点は同じ ML, Haskell, … 文字列・記号処理など 汎用のデータ型 関数(メソッド)の増加 FPL (が得意) 7 純関数型 vs 命令型(OOPを含む) 有用 任意の 副作用あり 命令型 言語 理想 プランA (着実) プランB (過激) 純関数型 役立たず 危険 副作用なし 安全 Simon Peyton Jones: “Caging the effects monster: the next big challenge” より引用・和訳 8 関数型プログラミング言語 Haskell, O’Caml, F#, Scala, など • 本質的に単純な構造 • 高度な型システム … 型推論など • OOPL とは異なる方向の拡張性 • 副作用撤廃、または強く制限 メジャーな言語とは、まったく違う方向から 理想に近づく! 9 プログラミング 学習支援システムの研究 魔法使いの弟子を育成 10 ここからの話 • プログラミングの学習の問題点 • 香川研究室での研究テーマの例 – WappenLite について • WappenLite の構成 • まとめ – その他 “The camel has two humps” by Saeed Dehnadi & Richard Bornat 2006 • プログラミングの学習者の成績は 良い/悪いに二分され、中間がない。 (論文自体はプログラミングの素質のテスト法の提案) プログラミングの学習の問題 • 学習者側の問題 – 時間の割に多種の言語を学ぶ必要がある – 処理系のインストール・使用法や詳細な文法 規則に煩わされる – 統合開発環境は初心者向けに設計されたもの ではなく、時折不可解な状態になる 13 プログラミングの学習の問題 • 教育者側の問題 – ドキュメントを用意しても、コンパイラなど と連動しないため学生が利用しづらい – 学習を支援するためのカスタムツールを用意 しても、今度はその使用法が煩雑になる – 他の教師が用意した教材は、カスタマイズし ないと利用しにくい なぜ複数の プログラミング言語を学ぶのか • 汎用、領域特化を含め多くのプログラミング言 語がある C, C++, Java, C#, Haskell, O’Caml, F#, CommonLisp, Scheme, Prolog, Perl, Ruby, Python, Smalltalk, JavaScript, VB, PHP, Yacc (Bison), Lex (Flex), assembler, … • 「井の中の蛙大海を知らず」にならないよう、 別の世界の存在を知る • 将来の新しい言語に備える 大目標 • 「特定のプログラミング言語、慣用の計 算機システム、ルーティン化したプログ ラム作成の手順などに規定される閉じた 世界から解き放ち、次元の異なった抽象 的な視点からプログラミング言語やプロ グラムを眺める機会を与える」 中島玲二 著「数理情報学入門」 マイナーな言語の場合の問題 • その言語専用の開発環境など期待できない ➨ あったとしてもそれはそれで大変かも • エディタの syntax highlight (色分け) 機能なども期待できない ➨ スペルミスなどつまらないミスで苦労する • 手軽なグラフィックスライブラリがないか、 あっても情報が少ない ➨ つまらない。 教師にとっては、魅力的な例題・課題を作ることが 難しい Wappen とは? http://guppy.eng.kagawa-u.ac.jp/Wappen/ • Web-based applications for programming paradigms enlightenment プログラミング学習用Webアプリケーションのため の EclipseRCP ベースのフレームワーク • 学習者は Web ページ上のリンクのクリックだけで 学習用のプログラミング環境を起動可能 • 教師は Wappen のプラグインとして、複数の言語 処理系や学習者の理解を支援するツールを提供 ➨ プログラミング学習の取っ掛かりを良くする 18 Wappen の欠点 • サイズ が 大きく、(キャッシュはされるが) 学外で利用するには重い • Eclipse のツールキット SWT が pure Javaでなく、配備に手間がかかる • Eclipse プラグインのプログラミング自体 が情報が少なく難しい http://guppy.eng.kagawa-u.ac.jp/WappenLite/ • より軽量の Web アプリフレームワーク • 通常のWeb アプリとして作成する – UI は HTML などを使って記述する – 非 UI 部は、Java Servlet として作成する • 対象プログラミング言語に依存する部分 は、一つのクラスにまとめられる WappenLite の構成 Client host Back-end Front-end Server host config Jetty (Web app. container) invoke invoke Starter applet Browser download より詳細な構成 Server host Client host Back-end (non-UI) Context class Servlet classes (language-independent)(language-dependent) Login Front-end (UI) console.js AuthFilter editor.js Load Save Run Write Read View Timeout Listener start() load() save() run() write() read() stop() … WappenLite スクリーンショット Ajax による Front-end • エディタ部には CodeMirror などの既存 の Ajax ベースエディタを使用 • コンソール部は プログラム出力の読込み に WebSocket を使用 • コンソール部は普通の HTML なので、プ ログラム出力中に HTML タグ などを使う ことができる ➨ より魅力的な例題・課題の可能性 画像の使用例 (WappenLite for Scala) Conal Elliot: “Functional Images” (in The Fun of Programming)の作品を使用 WappenLiteのまとめ • 簡単な配備・格段に速い起動 それでもアプレットが遅いけど • かゆいところに手が届く UI ➨ よりきめ細かいカスタマイズの可能性 • 拡張のための情報が豊富 (HTML, Ajax) 今後の研究テーマ例 • Scratch や Alice のような Lego ブロック風エディタ • C, Java, Bison/Flex などに対する 高機能な Web ベースエディター (emscripten などを使用) • プログラム可視化システム・ デバッグ支援システムの構築 (WebSocket, WebGL などを使用) 研究紹介 研究紹介 研究紹介 その他の研究テーマ例 • スマホ・タブレット向けのフロントエン ドとコンテンツ • Web 上で C, Haskell などのプログラム を安全に実行できる環境の構築 • 課題提出用サーバーシステムの改良 (自動採点・リアルタイムメッセージ・ 教師用可視化システムなど) 研究紹介 卒研ゼミについて ゼミのやり方 深夜にやったりはしません 3年生 • 主に輪講 Haskell, アルゴリズム(英語の本), etc 4年生以上 • 進捗報告 • 論文紹介 最後に こういう人を求めています • プログラミングが得意に興味がある • 新しい技術に挑戦するのが好き • 英語が得意に拒否反応がない
© Copyright 2024 ExpyDoc