Top
Photo Drawings Software Writing Reading Memo Study Profile Bookmark 

Writing

学士論文

FactoryとFleet
- 17世紀初期20年、東・東南アジアにおけるイギリス東インド会社の貿易機構

会社制度史研究において、イギリス東インド会社は、株式会社に連なる、近代的会社制度の源流として注目される。大塚久雄は、東インド会社の初期20年を、商人の寄合に過ぎなかった「制規組合 regulated company」から、統一した人格を持つ会社企業への移行としてとらえる。

 そして、その制度的変化の実体的前提となったのは、株式によって会社に提供される資本の増加であった。

 ジョイントストックという巨大なボールを手にした会社は、それを転がしつづけることのできる機構も、同時に強化しなくてはならなかった。本稿が対象とするのは、この創成の時期、本国の投資家が会社に投げ込んだ巨大な資本を、どのようにして、東インドの現地使用人らが受け止め、手際良くたがいに受け渡し、そして本国に投げかえすことができるようになったか、その機構を移行発展させていく過程である。

本文および注( pdfhtmlMS word)
史料データ(htmlMS excel (1)MS excel (2))
)

修士論文

Functional Scripting
汎用的関数型言語における系統的外部リソース操作の原理と実装
概要

複雑さを増すソフトウェアシステムに対処するため、 コンポーネントを組み合わせてアプリケーションを構築する手法が広まっている。 これを受けて、 他言語で記述されたライブラリを取り込むインターフェースを備 えて「開放性」に優れたスクリプティング言語が、 コンポーネントを結び付けて一つのシステムに組み立てる 「アプリケーション記述言語」として用いられている。 しかし、元来これらの言語は小規模なプログラムの記述を用途に 想定して生みだされたものであり、 複雑化かつ大規模化するソフトウェアシステムを記述するには不十分 である。

一方、関数型言語は、 既存のスクリプティング言語に引けをとらない記述力の高さを誇ると同時に、 その強力な型システムが、大規模なアプリケーションの構築にも堪えうる 安全なプログラミングを支援する。 しかし、 型システムが課す厳密な制約に従ったうえで 種々の言語および形式で記述された多様なデータモデルを表現することは困難であ るため、 既存の関数型言語では 概念上のモデルに一致したプログラミングインターフェイスを提示することができ ず、 外部ライブラリのごく低レベルなインターフェイスをそのままプログラマに露出 するのみにとどまっている。

本研究は、関数型言語の「安全性」とスクリプティング言語の「開放性」を両立する 理論と実装技術の構築を試みた。 とくにオブジェクト指向にもとづいて記述された外部ライブラリとの連携実現に重 点をおき、具体的には以下に述べる問題点を解決した。

データの物理的な構造を隠蔽しながら、 それに対するパターンマッチを可能とする「オブジェクト型」を導入し、 Ohoriによる多相型レコード計算をもとに オブジェクト型を導入した型システムを構築した。 外部ライブラリが提供するオブジェクトをオブジェクト型 の値として表現することで、オブジェクトとしての特質を 損なうことなく関数型言語上でそれらを扱えるようになる。

つぎに、オブジェクト型と多相型レコード計算とを応用して、 オブジェクト指向言語にみられるクラス間の階層関係を 関数型言語の型システムで表現する手法を開発した。 これは、クラスベースの型システムが課す制約が、 関数型言語の型システムにより守られることを保証する。 関数型言語とオブジェクト指向との対等な統合を試みる既存の研究とは対照的に、 本研究による手法は関数型言語としての自然な拡張により実現しており、 より汎用性が高い。

上記の理論的基礎を現実のプログラミング言語として具体化するため、 ML-likeな言語Amethyst を設計した。 Amethyst は、Standard MLのCore syntaxをベースとし、 オブジェクト型宣言文を始め 外部リソースの使用を宣言する構文をいくつか追加している。 これらの構文が導入する外部リソースに対する操作は、 型システムによりチェックされその安全性が保証される。

最後に、外部ライブラリとの連携実現を基本方針として Amethyst 処理系を設計した。 とくに、外部ライブラリが意図する概念的なモデルを損なうことなく関数型言語に取り入 れることを目指し、 バイトコードインタプリタと外部ライブラリとの間に、 ドメインモジュールと呼ぶプラグイン可能なレイヤを設けている。 このレイヤは、ライブラリの物理的詳細を隠蔽し、 ライブラリが本来意図する抽象的インターフェイスを再構築する役割を果た す。

この基本設計のもとに、 コンパイラ、バイトコードインタプリタ、ドメインモジュールから構成される処理 系を実装し、 以上の研究成果の実用性を実証した。 コンパイラは、 外部型を組み込んだ型推論機構と、 外部型の値を操作するソースコードを外部関数呼び出しをおこなうバイトコードへ変換するコンパイルとを、 多相型レコード計算を応用して実装した。 バイトコードインタプリタはLeroyによるZINC抽象機械をベースとし、 外部データおよび外部関数に対応して抽象機械命令の追加、変更を加えた。 また、ガーベジコレクション機構に外部データへの対応を組み込んだヒープ 管理方式を実装した。

最後に、本研究の成果が現実のアプリケーション構築に対して適用可能であることを示すため、 PostgreSQLデータベースとのインターフェイスを提供するドメインモジュールと、 Javaクラスライブラリを操作可能とするドメインモジュールを実装した。

修士論文(日本語)( ps  pdf)
要旨(日本語)(ps  pdf)
要旨(英語)(ps  pdf)
LaTexソース


論文

Atsushi Ohori, Kiyoshi Yamatodani An Interoperable Calculus for External Object Access in Proc. ACM ICFP conference, 2002
By extending an ML-style type inference system with record polymorphism, recursive type definitions, and an ordering relation induced by field inclusion, it is possible to achieves seamless and type safe interoperability with an object-oriented language. Based on this observation, we define an ML-style language that can directly access external objects and methods, and develop a type inference algorithm. This calculus enjoys both features of higher-order programming with ML polymorphism and class-based object-oriented programming with dynamic method dispatch. To establish type safety, we define a sample object calculus with multiple inheritance as the target calculus for interoperability, define an operational semantics of the calculus, and show that the type system is sound with respect to the operational semantics. These results have been implemented in our prototype interpretable language, which can access Java class files and other external resources.

ソフトウェアドキュメント

講義課題で作成したソフトウェアを説明したドキュメントなど。


Blog
算譜工論

おサルによる、おサルのための関数型言語コンパイラのつくりかた
型付きラムダ計算+パターンマッチのコンパイラを説明しています。

1,構文解析
1.1,式の単純化 (ps  pdf  LaTexソース)
2,演算子解決など
MLでは演算子優先度をプログラム中で変更できるので、 C言語などのように文法によって+や*などの演算子の結合順序を定義することができません。 スタックを用いてこれを解決する方法を説明します。
(ps  pdf  LaTexソース)
3,型推論
MLで用いられている型推論アルゴリズムを説明しています。
(ps  pdf  LaTexソース)
3.1,多相型レコード型システム
大堀先生の開発した多相型レコード型システムについて説明します。
(ps  pdf  LaTexソース)
4,印字式の生成( ps  pdf  LaTexソース)
5,パターンマッチ
パターンマッチ式(case式)をよりプリミティブな演算の組み合わせに変換す る方法について説明します。
(ps  pdf  LaTexソース)
6,DeBrujn変換
(ps  pdf  LaTexソース)
7,仮想機械(Eager)(下のzincの要約で代用)
8,仮想機械(Lazy)(下のG-machineの紹介で代用)
9,ランタイム(Eager/Lazy)

現在作成中のラムダ式コンパイラDum-Lambdaのドキュメントです。
リンクされていないものは今後作成予定。


プログラミング言語OOPS
人工知能特論の自由課題で、Prologに似たプログラミング言 語OOPSを設計・実装しました。
これはそのドキュメントです。
ps  pdf  LaTexソース

プログラミング言語Jsharp
副テーマでJava言語コンパイラ (Jsharp) を作成しました。
これについて80ページほどにまとめています。
ps  pdf  LaTexソース

プログラミング言語Jflat
ソフトウェア環境特論のレポートでJava言語のサブセット Jflatのコンパイ ラを作成しました。
ps  pdf  LaTexソース
(JflatはJsharpにバージョンアップされています。)


ゼミ資料

関数型言語の処理系実装

G-machine
原著・著者 1,"Functional Programming"Field, Harrison
241-256p(Graph reduction) 387-405p(G-machine)
2,Implementing functional languages:a tutorial" Simon L Peyton Jones, David R Lester 86-149p
3,Efficient Compilation of Lazy Evaluation" Thomas Johnsson
和訳・要約 基本編 (ps  pdf  LaTexソース )
内容 Call-by-needを採用したラムダ計算のコンパイ ルをグラフリダクションにより実現しています。
基本編はベータ簡約とデルタ簡約のみで構成される最小限のラムダ計算を説明 しています。

"The Zinc Experiment:An Economical Implementation Of The ML Language"
原著 原著
著者 Xavier Leroy
和訳・要約 Camlの実装を解説しています。 正確にはCaml light(?)。
第3章 ZINC抽象機械についての説明(ZINC仮想機械のエミュレータ とごく基本的なML式のコンパイラのコードを付録しています。)(ゼミ発表時か らさらに説明を補足しています。)
(ps  pdf  LaTexソース )
第24ページ「環境付きラムダ計算」の解釈 (ps  pdf  LaTexソース)
第5章2.5節から第6章まで バイトコード生成やランタイムを説明しています。 (ゼミ発表後修正を加えています。) (ps  pdf  LaTexソース)
内容 CAML Lightの実装方法を解説した論文。

パターンマッチ

Typed Pattern Calculus
原著 A Typed Pattern Calculus
著者 Delia Kesner, Laurence Puel, Val Tannen
和訳・要約 前半の要約(後半は主に定理の証明なので省略)
(ps  pdf  LaTexソース )

内容 関数型言語にみられるパターンマッチをcalculus形式で記述しています。 ラムダ計算でletやラムダ抽象によっておこなわれる変数束縛を、 パターンマッチによる束縛に置き換えたようなものです。

Compiling Pattern Matching by Term Decomposition
原著 Compiling Pattern Matching by Term Decomposition
著者 Laurence Puel
Ascander Suarez
和訳・要約 要約
(ps  pdf  LaTexソース )
内容 たとえばMLでは、パターンマッチにおいて、つぎのようにかさなり合うパター ンを認めています。
case x of (1, a) => e | (b, 1) => f
xの値が(1,1)であった場合、(1,a)(b,1)の両方のパターンにマッチします。 このような場合に対応するために、MLでは最初に現れるパターンを選択するように 優先規則を定め、 いずれかひとつのパターンだけが選択されるようにしています。
本稿は、このように優先規則により順序付けられたパターン集合を、 重複しないパターンの集合へ変換する方法を示します。 この変換によって得られるパターン集合を用いれば、 ある値に対してそれぞれのパターンが選択されるかどうかを (他のパターンとの関係によらず)パターンのみによって特定できるので、 項と比較するパターンの順序を、 比較コストが最小となるように並べ替えることが可能になります。

関数型言語と外部とのインタフェイス

"Principles of Programming with Complex Objects and Collection Types"
原著 Principles of Programming with Complex Objects and Collection Types
著者 Peter Buneman, Shamim Naqvi, Val Tannen, Limsoon Wong
和訳・要約 15pまでの要約(これ以降はCategory-theory,Equational-theoryな どが絡んでくるので私の手には負えません。)
(ps  pdf  LaTexソース )

内容 Kleisliのクエリー言語CPLの基礎理論であるNRC(Nested Relational Calculus)を説明しています。

Kleisli
原著 Kleisli,a Functional Query System
BioKleisli: A Digital Library for Biomedical Researchers
著者 Limsoon Wong
和訳・要約 Kleisli概要メモ(CPL,NRCなどコアな部分には触れていません。)
(ps  pdf  LaTexソース )

内容 heterogeneousなデータソースを対象にした検索システムKleisliを紹介してい ます。 とくにクエリー言語Collection Programming Language(CPL)は データベースクエリーを関数型言語的なスタイルで記述することを可能として います。

HaskellDB:Domain Specific Embedded Compiler
原著 Domain Specific Embedded Compilers
著者 Daan Leijen  Erik Meijer
和訳・要約 要約
(ps  pdf  LaTexソース )
内容 SQLのようなデータベースクエリー言語をHaskell内の「サブ言語」として実装する手法を説明しています。

"HaskellScript"
原著 Haskell as an Automation Controller
Functional Components
著者 HaskellScript project
和訳・要約 HaskellからCOMオブジェクトを操作する/HaskellでCOMオブジェ クトを実装する方法( ps  pdf  LaTexソース )
サンプル(Haskellで記述したCOMオブジェクトをVBで記述したク ライアントから操作する/VBで記述したCOMオブジェクトを Haskellで記述したクライアントから操作する)
(HaskellScriptSample.zip)
内容 関数型プログラミング言語Haskellに、Microsoftのコンポーネ ントフレームワークCOM(Component Object Model)とのインターフェ イスを実装したものです。

Monad
原著 The essence of functional programming
Monads for functional programming
著者 Philip Wadler
和訳・要約 要約
(ps  pdf  LaTexソース )
内容 関数型言語の原理を侵すことなく、入出力や例外など「副作用」 をともなう機構を実現するために重要な役割を果たしているmonadを紹介して います。 とくにHaskellではmonadが大きな位置を占めています。

プログラム変換

"Monitoring Semantics"
原著 in Preceedings of ACM SIGPLAN '91 Conference on Programming Language Design and Implementation.
(図書館に配架されています。)
著者 Amir Kishon, Paul Hudak, Charles Consel
(Amir Kishonは現在Soft Watchという会社のCEOらしい。)
和訳・要約 要約
(ps  pdf  LaTexソース  )
内容 トレーサやプロファイラなど、プログラムの実行を監視するシステ ムを形式的に構築する方法について述べています。

"Continuation-Passing,Closure-Passing Style"
原著 原著
著者 A.Appel,T.Jim
和訳・要約 要約 (ps  pdf  LaTexソース )
内容 SMLNJの開発者がその実装方法について手短に解説しています。
"Compiling with continuations"の要約です。

"The Essence of Compiling with Continuations"
原著 原著
著者 C.Flanagan, A.Sabry, B.Duba, M.Felleisen
和訳・要約 和訳(図は省略しているので原著も参照してください) (ps  pdf  LaTexソース )
内容 継続渡し方式によるコンパイルの定式化と、それと等価でなおかつ より直接的なコンパイル方法について述べています。

"Back to Direct Style"
原著 原文
著者 Olivier Danvy
和訳・要約 和訳(図は省略しているので原文も参照してください。) (ps  pdf  LaTexソース )
内容 継続渡し方式とソースプログラム間を相互に変換する方法について述べています。

その他

Moby
原著 Foundations for Moby classes
The design of a class mechanism for Moby
Inheritance-based subtyping
Extending Moby with inheritance-based subtyping
著者 Kathleen Fisher & John Reppy
和訳・要約 メモ(visibility control,structural/inheritance-based subtyping,Moby Object Calculusについて) (ps  pdf  LaTexソース )
内容 クラスに基礎を置くオブジェクト指向を取り入れたML-likeな言 語Mobyについての論文です。

"An Overview of AspectJ"
原著 原文
著者 AspectJ project
和訳・要約 和訳(図は省略しているので原文も参照してください。) ( ps  pdf  LaTexソース )
内容 オブジェクト指向のつぎのプログラミングパラダイム「アスペ クト指向」によりJavaを拡張したAspectJの概説です。