香川 考司 kagawa@eng.kagawa-u.ac.jp 香川研究室の紹介 香川 考司 kagawa@eng.kagawa-u.ac.jp.

Slides:



Advertisements
Similar presentations
プラグイン作成講座 Control System Studio 3.0 Takashi Nakamoto
Advertisements

オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
MOSA プログラミングセミナー Mac OS X プログラミング 事始め 新居雅行( MOSA 理事) 2002/4/28.
2002/2/8 ASUG Conference in PAGE 2002 Mac OS X 開発環境と AppleScript MDOnline 編集長 新居雅行.
オブジェクト指向 言語 論 知能情報学部 新田直也. 講義概要  私の研究室: 13 号館 2 階 (13-206)  講義資料について :  参考図書 : 河西朝雄 : 「原理がわかる プログラムの法則」,
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
プログラミング言語ADP 大藤雄久.
第3回参考文献発表 PHP言語 岩永逸平.
Java I 第2回 (4/18)
プログラミング入門 (教科書1~3章) 2005/04/14(Thu.).
名古屋大学大学院人間情報学研究科 物質生命情報学専攻 情報処理論講座 原 崇
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
アプレット (Applet)について.
オブジェクト指向言語論 知能情報学部 新田直也.
応用情報処理V 第1回 プログラミングとは何か 2004年9月27日.
卒研:データベースチーム 第4回 DOMを使った処理
プログラミング言語論 理工学部 情報システム工学科 新田直也.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
第一回 Java言語 04A2029           古賀慎也.
MATLAB測位プログラミングの 基礎とGT (1)

「C++言語」習得のための実践的研究 -「テンプレート」,「例外処理」,「実行時型情報」-
Webを利用した授業支援システムの開発 北海道工業大学 電気電子工学科 H 渋谷 俊彦.
①データ構造 ②アルゴリズム ③プログラム言語 ④マークアップ言語
JavaBeans とJSP データベース論 第5回.
応用情報処理V 第1回 プログラミングとは何か 2003年9月29日.
オブジェクト指向 プログラミング 第一回 知能情報学部 新田直也.
C#とC++とオブジェクト指向 上甲 健史.
基礎プログラミング演習 第1回.
2004年度 サマースクール in 稚内 JavaによるWebアプリケーション入門
2003年度 データベース論 安藤 友晴.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
50年前のプログラミング言語 50年後のプログラミング言語
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
ソフトウェア情報学総論 基盤ソフトウェア学講座
プログラミング言語入門.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
東京大学人間環境学専攻 奥田・橋本研究室 修士1年 相良 光志
JAVAについて 高橋 雅哉.
多種多様なプログラミング言語        チーム名  まほうびん 情報数学5 まほうびん 2019/04/08.
Fortranについて 高エネルギー加速器研究機構 平山 英夫.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
Java における 先進的リフレクション技術
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語入門 2013 (C言語 初級) 演習期間 担当 参考資料 採点 10/24 - 1/23 (全10回) 松澤,鈴木,児玉
★C++/オブジェクト指向実践企画★ Othelloゲーム作成
高度情報演習1A スクリーンセーバ作成 2016年4月13日 情報工学科 篠埜 功.
情報基礎Ⅱ (第1回) 月曜4限 担当:北川 晃.
統合開発環境によって表現された 言語機構によるコードのモジュール化
ガイダンス 電子計算機 電気工学科 山本昌志 1E
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
vc-1. Visual Studio C++ の基本操作 (Visual Studio C++ の実用知識を学ぶシリーズ)
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
第2回 Webサーバ.
第6回放送授業.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第一回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
1.2 言語処理の諸観点 (1)言語処理の利用分野
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
就職活動.
Presentation transcript:

香川 考司 kagawa@eng.kagawa-u.ac.jp 香川研究室の紹介 香川 考司 kagawa@eng.kagawa-u.ac.jp

香川研の研究テーマ プログラミング言語の型システムの研究 (理論) プログラミング学習支援システムの研究 (実践)

プログラミング言語の 型システムの研究 究極のプログラミング言語を 求めて

プログラミング言語の歴史 今後も新しいプログラミング言語が誕生するのは間違いない! 2013/4/23 プログラミング言語の歴史 ※ ただし, 誕生(公開)と流行には大きなズレがある場合が多い 1949 (EDSAC) 1967 Simula 1980 Smalltalk 2003 Scala 1954 FORTRAN 1970 Pascal 1983 C++ 1958 LISP 1958 ALGOL 1972 C 1972 Prolog 1987 Perl 1990 Python 1990 Haskell 1974 ML 1959 COBOL 1995 Java 1995 Ruby 1975 Scheme 今後も新しいプログラミング言語が誕生するのは間違いない!

様々なプログラミング言語 パラダイムによる分類 命令型、オブジェクト指向、関数型、論理型 型付けによる分類 静的型検査、動的型検査、他 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 (が得意) 文字列・記号処理など 汎用のデータ型 関数(メソッド)の増加

純関数型 vs 命令型(OOPを含む) 理想 任意の 副作用あり 有用 プランA (着実) 命令型言語 プランB (過激) 副作用なし 役立たず 安全 危険 Simon Peyton Jones: “Caging the effects monster: the next big challenge” より引用・和訳

関数型プログラミング言語 Haskell, O’Caml, F#, Scala, など 本質的に単純な構造 高度な型システム … 型推論など 高度な型システム … 型推論など OOPL とは異なる方向の拡張性 副作用撤廃、または強く制限 メジャーな言語とは、まったく違う方向から 理想に近づく!

プログラミング 学習支援システムの研究 魔法使いの弟子を育成

ここからの話 プログラミングの学習の問題点 香川研究室での研究テーマの例 WappenLite について その他 まとめ その他

“The camel has two humps” by Saeed Dehnadi & Richard Bornat 2006 プログラミングの学習者の成績は 良い/悪いに二分され、中間がない。 (論文自体はプログラミングの素質のテスト法の提案)

プログラミングの学習の問題 学習者側の問題 時間の割に多種の言語を学ぶ必要がある 処理系のインストール・使用法や詳細な文法規則に煩わされる 統合開発環境は初心者向けに設計されたものではなく、時折不可解な状態になる

プログラミングの学習の問題 教育者側の問題 ドキュメントを用意しても、コンパイラなどと連動しないため学生が利用しづらい 学習を支援するためのカスタムツールを用意しても、今度はその使用法が煩雑になる 他の教師が用意した教材は、カスタマイズしないと利用しにくい

なぜ複数の プログラミング言語を学ぶのか 汎用、領域特化を含め多くのプログラミング言語がある 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 のプラグインとして、複数の言語処理系や学習者の理解を支援するツールを提供 ➨ プログラミング学習の取っ掛かりを良くする

Wappen の欠点 サイズ が 大きく、(キャッシュはされるが) 学外で利用するには重い サイズ が 大きく、(キャッシュはされるが) 学外で利用するには重い  Eclipse のツールキット SWT が pure Javaでなく、配備に手間がかかる Eclipse プラグインのプログラミング自体が情報が少なく難しい

WappenLite より軽量の Web アプリフレームワーク 通常のWeb アプリとして作成する http://guppy.eng.kagawa-u.ac.jp/WappenLite/ より軽量の Web アプリフレームワーク 通常のWeb アプリとして作成する UI は HTML などを使って記述する 非 UI 部は、Java Servlet として作成する 対象プログラミング言語に依存する部分は、一つのクラスにまとめられる

WappenLite の構成 Server host Client host config Front-end Back-end Jetty (Web app. container) download invoke invoke Starter applet Browser

より詳細な構成 Client host Server host Back-end (non-UI) Servlet classes (language-independent) Context class (language-dependent) Login Front-end (UI) start() load() save() run() write() read() stop() … AuthFilter Load editor.js Save Run Write console.js Read View Timeout Listener

WappenLite スクリーンショット

Ajax による Front-end エディタ部には CodeMirror などの既存の Ajax ベースエディタを使用 コンソール部は プログラム出力の読込みに WebSocket を使用 コンソール部は普通の HTML なので、プログラム出力中に HTML タグ などを使うことができる ➨ より魅力的な例題・課題の可能性

画像の使用例 (WappenLite for Scala) Conal Elliot: “Functional Images” (in The Fun of Programming)の作品を使用

WappenLite デモ Java 1 (SVG 使用), Java 2 (WebGL 使用) , Applet C Haskell http://guppy.eng.kagawa-u.ac.jp/WappenLite/ Java 1 (SVG 使用), Java 2 (WebGL 使用) , Applet C Haskell 

WappenLiteのまとめ 簡単な配備・格段に速い起動 それでもアプレットが遅いけど かゆいところに手が届く UI ➨ よりきめ細かいカスタマイズの可能性 拡張のための情報が豊富 (HTML, Ajax)

今後の研究テーマ例 Scratch や Alice のような Lego ブロック風エディタ C, Java, Bison/Flex などに対する 高機能な Web ベースエディター (emscripten などを使用) プログラム可視化システム・ デバッグ支援システムの構築 (WebSocket, WebGL などを使用)

研究紹介

研究紹介

研究紹介

その他の研究テーマ例 スマホ・タブレット向けのフロントエンドとコンテンツ Web 上で C, Haskell などのプログラムを安全に実行できる環境の構築 課題提出用サーバーシステムの改良 (自動採点・リアルタイムメッセージ・教師用可視化システムなど)

研究紹介

卒研ゼミについて

ゼミのやり方 深夜にやったりはしません 3年生 主に輪講 Haskell, アルゴリズム(英語の本), etc 4年生以上 進捗報告 論文紹介

最後に こういう人を求めています プログラミングが得意に興味がある 新しい技術に挑戦するのが好き 英語が得意に拒否反応がない