Writing
学士論文
FactoryとFleet
- 17世紀初期20年、東・東南アジアにおけるイギリス東インド会社の貿易機構 |
会社制度史研究において、イギリス東インド会社は、株式会社に連なる、近代的会社制度の源流として注目される。大塚久雄は、東インド会社の初期20年を、商人の寄合に過ぎなかった「制規組合 regulated company」から、統一した人格を持つ会社企業への移行としてとらえる。
そして、その制度的変化の実体的前提となったのは、株式によって会社に提供される資本の増加であった。
ジョイントストックという巨大なボールを手にした会社は、それを転がしつづけることのできる機構も、同時に強化しなくてはならなかった。本稿が対象とするのは、この創成の時期、本国の投資家が会社に投げ込んだ巨大な資本を、どのようにして、東インドの現地使用人らが受け止め、手際良くたがいに受け渡し、そして本国に投げかえすことができるようになったか、その機構を移行発展させていく過程である。
本文および注(
pdf,
html,
MS word)
史料データ(html,
MS 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.
|
ソフトウェアドキュメント
講義課題で作成したソフトウェアを説明したドキュメントなど。
おサルによる、おサルのための関数型言語コンパイラのつくりかた |
型付きラムダ計算+パターンマッチのコンパイラを説明しています。
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ソース
|
プログラミング言語Jflat |
ソフトウェア環境特論のレポートでJava言語のサブセット
Jflatのコンパイ
ラを作成しました。
ps
pdf
LaTexソース
(JflatはJsharpにバージョンアップされています。)
|
ゼミ資料
関数型言語の処理系実装
"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の実装方法を解説した論文。 |
|
パターンマッチ
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" |
|
HaskellDB:Domain Specific Embedded Compiler |
|
プログラム変換
"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" |
|
"The Essence of Compiling with Continuations" |
|
その他
|