1999年〜2000年の進捗報告
Progress reports in 1999-2000
東工大在籍中の1999年〜2000年までの月々の進捗報告とセミナー等の際に使用したレジュメです。
Author: KANDO Takayuki
Homepage: http://www.nerimadors.or.jp/~kando/
E-mail: kando@nerimadors.or.jp
CSS: http://www.nerimadors.or.jp/~kando/kando_std.css
Notice: http://www.nerimadors.or.jp/~kando/Notice.html
[index]
Contents
- 月報 (Monthly Progress Reports)
-
[2000]
[1999]
- セミナー資料 (Seminar resumes):
-
[2000]
[1999]
(Word file viewer for Windows: Wdview97.exe)
- 10
- 例えば多項式データを解釈して関数値を計算する(例:Hornar法)プログラムを
部分評価器で特定の多項式に特化して得られたものはその多項式により定義された関数値を
計算するプログラムと考えられるが・・・、実用上の意味はあるか?
- 部分評価についてLS Seminarで発表。(概要)
- 09
- 演算によって組み立てられた多項式を関数定義と見たいときと値と見たいときで適切に区別できるか?
- 演算子の多重定義を利用して、
算術演算式を被演算子にある不定元の型を手がかりに多項式型の定義と判定できるか?
- 久野ゼミ2000後期の教科書は"Distributed Operating Systems and Algorithms"(Randy chow and Theodore Johnson, Addison-Wesley, 1998)
- 久野ゼミで発表。
[Resume](2000.09.18)、[Resume](2000.09.25)。
- 08
- 例えば多項式等が「計算対象としての値」と「計算手続きとしての関数定義」との
両方の性質を持っていることに関して、それを実装する手段にならないかと
部分評価についての論文を探索し始めた。
- 先月に引き続き型についての教科書を読み、型推論周りの基礎について調べた。
- 07
- 型についての教科書「プログラミング言語の基礎理論」(大堀 淳, 共立出版, 1997)を読み、型推論周りの基礎について調べた。
- 06
- LS Seminarで多重定義と型推論に関する論文を紹介(概要)。準備不十分で失敗。
- 型付きλ計算と型推論に関して勉強するために柴山先生に
計算工学専攻の
西崎先生を
紹介していただき、
西崎研究室の
ゼミを聴講させて頂くこととなる。
- 05
-
- 04
- LS Seminarで総称型と型推論に関する論文を紹介(概要)。
- 博士後期課程(情報理工学研究科、数理・計算科学専攻)入学
- 03
- 型推論全般に関する論文を読む。
- LS Seminarで論文紹介(概要)。準備不十分で失敗。
- 02
- 大学院受験準備、特に院試口頭試問向けの資料作成と練習。
- Seminarで口頭試問の練習(概要)
- 01
-
- 12
-
- 11
-
- 10
-
- 静的な解析に詳しい
"High Performance Compiler for Parallel Computing"
, M. Wolf, Addison Wesley, 1996を発注。
- 前月からの続きで、関数型言語における配列の実装に関する論文を読んで、
まとめ始めた。
- 久野ゼミの発表準備開始。1999後期の教科書は"Software Design Methods for Concurrent and Real-Time Systems"(Hassan Gomaa, Addison-Wesley, 1996)。
- 09
-
- 関数型言語における配列の実装に関する論文には目を通した。
- アクセスのオーダが定数だとしても今時の
High Performance Computingにおけるパイプラインや命令mixを考えると
そのテのオーバーヘッドが要素アクセス毎に掛るのは、
やはり受け入れ難い。そこで
更新履歴やバージョン・スタンプの単位として
キャッシュ向けのブロック化をうまく利用できないか?と思っていたが、
キャッシュを書き出すタイミングが制御できるわけではないので
利用は難しいかも知れない。
- 結局、動的な実装を利用するとしても
静的な解析と組み合わせるしかないらしい。
- 静的な解析に詳しい
"High Performance Compiler for Parallel Computing"
, M. Wolf, Addison Wesley, 1996の入手を検討
- 漸化式表記に関するメモ
- 08
-
- A gentle introduction to Haskell に関しては一通り目を通した。
- 5月のLS Seminar(概要)で考えていた
素朴な漸化式は
list complehensionの延長線上で記述できる
("A gentle introduction to Haskell"によれば
list complehensionはMonadで記述できるらしい)。
結局の所、問題はむしろ行列(二次元配列)の部分的な更新。という訳で、
配列の実装について論文を読んでいる。
更新履歴やバージョン・スタンプの単位として
キャッシュ向けのブロック化をうまく利用できないか?
配列の実装に関するメモ
- 07
-
- (論文については前月からの続き。)Monadに関しては一通り目を通した。
- 上記についてLS Seminarで発表(概要)。
- 06
-
- (論文については前月からの続き。)
- 漸化式(reccurence relation)を記述できるプログラミング言語についての文献を探索するが芳しくない。
- 05
-
- 自己紹介を兼ねてSeminarで発表(概要)。
- 関数型言語における命令型表記に関してMonadについての論文を読んでいる。
- A Gentle Introduction to Haskell - Version 1.4 -を読み始めた。
- 04
-
- 大学院研究生(情報理工学研究科、数理・計算科学専攻)として入学
- 環境整備(Xの設定、メール、Web閲覧):
佐々木氏、志筑氏、古河氏、酒井氏に感謝。
- 関数型言語についての資料をWebで探索
- 10/05 LS Seminar 論文紹介:「部分評価の紹介」
"An Introduction to Partial Evaluation"
(Neil D. Jones, ACM Computing Survey, Vol.28, No.3 Sep., 1996)
- 部分評価器(partial evaluator)は、
ある汎用プログラムから特定の入力に特化した
プログラムを生成するプログラム特殊化器(program specializer)とみなせる。
このような部分評価の第1の目的は高速化で、
あまり変更されない部分(静的入力)を前もって評価して特殊化できれば、
何度も走らせた場合に高速化できることになる。
部分計算とそのself-applicationは多くの応用があり、
プログラム・ジェネレータ(コンパイラ、コンパイラ・ジェネレータ、プログラム変換系)
の生成とその高速化に役立つ。
[Resume]
[Resume(Word 2000 file)]
[Slides]
[Slides(Powerpoint 2000 file)]
- 06/01 LS Seminar 論文紹介:「多重定義に関する2度目の考察」
"A Second Look at Overloading"
(Martin Odersky and Philip Wadler and Martin Wehr, 1995,
Conference on Functional Programing and Computer Architecture)
-
入出力や算術演算など多くの処理は必ずしも総称的には書けないが、
呼び出される際の構文では区別をつけず多相的に呼び出せることが望ましい。
そこで型推論を拡張し、多重定義したい関数は多重定義されていると宣言し、
かつそれらの引数については型を明示することにして、
呼び出し時には型環境を通じてそのように宣言されているものから適切なものを選ぶ
(総称関数のようにインスタンスを作るのではなく)ようにすることを考える。
[Resume]
[Resume(Word 2000 file)]
[Slides]
[Slides(Powerpoint 2000 file)]
<参考>
- 03/31 LS Seminar 論文紹介:「多態型推論」
"Polymorphic type inference"
(Daniel Leivant 1983 POPL)
-
強い型付けによるコンパイル時のエラー検出とプログラムの検証の利点は良く知られている。
強い型付けは、関数の適用が中心的な構文である関数型言語では特に自然で、
そこでの型の整合性の検査はプログラムの検証の中心だが、
全ての式に意識して型を割り当てるのは大変煩雑になり得るので、
与えられた型のない式からシステムが型を推定する型推論というものを考えれば、
ユーザーは型のないプログラミング言語のようにプログラミングでき、
ジェネリックな関数を書くことができる。
しかし多相型(型変数を持つような型)を許さない古典的な型推論だけでは、
関数がプログラム中で一回呼び出されれば
関数の型はそこで確定してしまうので、
一つのジェネリックな関数を色々な型の引数について呼び出すことが出来ない。
しかし無制限に型変数を導入した型システムの型推論は計算不能であるという問題がある。
そこで型変数を含むような関数の宣言に制限をつけて計算可能にすることを考える。
[Resume]
[Resume(Word 2000 file)]
<参考>
- "A Theory of Type Polymorphism in Programming"
(Robin Milner, Journal of Computer and System Science 17, 348-375, 1978)
(型推論に関する古典的な論文)
[note]
[note(Word 2000 file)]
- 02/04 Seminar 02/17の院試口頭試問に向けた練習:
「修論以降の研究経歴及び数学ソフトウェア向け言語の設計について」
- 修論以降の研究経歴を概説した。主な話題は以下の通り。
- C++クラスによる既存ライブラリへのインターフェース・ライブラリ
- 多倍長浮動小数点演算と初等関数値計算ライブラリ
- 多項式の対話的表示法
- 数式処理システムの並列計算機への移植
博士課程に入学後の研究テーマ「数学ソフトウェアの記述に向いた言語」について、
Fatemanの規準を紹介し、関連する幾つかの課題を述べた。
- 文脈依存
数式の記述には文脈が省略され勝ち
- 関係と計算
数式は関係を宣言するが、プログラムの実行には計算手順が必要
- 値の格納と参照
数式には値の記憶領域指定がない
[Resume]
[Resume(Word 2000 file)]
[Slides]
[Slides(Powerpoint 2000 file)]
<参考>
- 11/16 LS Seminar 論文紹介:
"A new method for functional arrays"
(Melissa E. O’Neill and F. Warren Burton,
J. Functional Programming 7(5): 487-513, Sep. 1997)
- 純粋な関数型言語では関数の数学的な定義と同様に副作用が許されない。
通常の命令型言語におけるような配列の要素の更新は代入であり、
副作用を持つ。そこで純粋な関数型言語では、更新という操作は
配列のようなデータについて更新済の値を持つ複製を(論理的に)作成する
と考える。このような機能をサポートする配列をPersistentな配列型という。
ここで紹介している論文ではPersistentな配列型の実装として
binary treeに基づく方法と
version tree(trailer arrays)に基く方法を紹介した後、
新しい実装方法としてfat elementを用いる方法を提案し、
(理論と実験で)評価している。
結論としては、以下の二点を述べている。
- fat element方式は平均でO(1)最悪でO(log n)で要素をアクセスでき、
いつでも最速というわけではないが、
上述の2方式のような特に弱いパターンのアクセスはないので、
配列について標準の実装方法として有用であること。
- 定数時間とはいえ、単純な命令型配列ほど早くはないので、
静的な解析と組み合わせて補助的に利用すると効果的だと考えられること。
[Resume(HTML file)]
[Resume(Word 2000 file)]
- 07/22 Seminar 論文紹介:
"How to Declare an Imperative"(Philip Wadler. ACM Computing Surveys, 29(3), p.240-263, Sep., 1997
(
WWW:Wadler: Monads
)
- pure関数型言語に相互作用を命令型プログラミング風に追加するものとして
monad方式を紹介。
理論的な要点は、入出力関数から入力出力意図を意味する値を返させるようにし、
それらを結合演算子で簡単に結合できるようにしておいて、
トップ・レベルの変数に束縛された際に実際の動作に束縛すること。
そしてpureかつlazyな関数型言語であるHaskellにmonadを導入した結果、
何が簡単になったかを他の各方式(synchronized stream、continuations、
linear logicやside effect)との比較によって紹介。
(例は全て単一monadの事例)
最後に課題として一階の言語、論理型言語へのmonadの導入について紹介。
[Resume(HTML file)]
[Resume(Word 2000 file)]
- 05/17 LS Seminar「数学ソフトウェアの記述を考える - 自己紹介に代えて(仮)」
- 自己紹介を兼ねて今までやってきたことを概説した。主な話題は以下の通り。
- C++クラスによる既存ライブラリへのインターフェース・ライブラリ
- 多倍長浮動小数点演算と初等関数値計算ライブラリ
- 多項式の対話的表示法
- 数式処理システムの並列計算機への移植
これに関連して、ポリモルフィズムと数学ソフトウェアの関係について述べた。
最後に今後どういう方向で勉強して行くつもりかについて述べた。
その中でアルゴリズムを漸化式で記述する件について、
有効性に疑問が提示された。今後、文献を漁って遅延評価言語を中心に
依存関係と評価順序について理解を深めつつ、
アイディアを具体化していきたい。
[Resume]
[Slides]