学会発表の準備で文芸的プログラミングについて調べているうちに、自分でも一度、やってみないといけないと思いたち、ちょっとやってみました。
使用したツールは”nuweb”です。MacPorts でさくっとはいりました。まずは以下を見て下さい。
中央の「Hi!」ボタンはもちろんだけど、左上のリンクをクリックするのをお忘れずに。ここを見ないと文芸的の意味がないですから。

東京工業大学大学院 数理・計算科学専攻 准教授
現在、カテゴリ「研究」の投稿記事を表示中です。
学会発表の準備で文芸的プログラミングについて調べているうちに、自分でも一度、やってみないといけないと思いたち、ちょっとやってみました。
使用したツールは”nuweb”です。MacPorts でさくっとはいりました。まずは以下を見て下さい。
中央の「Hi!」ボタンはもちろんだけど、左上のリンクをクリックするのをお忘れずに。ここを見ないと文芸的の意味がないですから。
今朝は、ビジュアルプログラミングとの関連で、”tex.web” というプログラムを斜め読みしています。
そこでひとつの発見をしたかもしれません。バグのないコードは短いです。少なくともKnuthのTeXは。TeXのプログラムは1,379個のモジュールから構成されていますが、そのうち8個の例外を除いてすべて1ページに収まっています。それも、コメントどころではない非常に詳しい解説つきで。
なにが言いたいのかというと、プログラムは一画面で見渡せる程度の規模のモジュールの組み合わせから作るべきだということです。で、それがどうしてビジュアルプログラミングに関係するかと思ったら、それは先を読んで下さい。
続きを読む »
少し苦労したけれども Mac OS X の上で Google V8 を使って、構文解析器生成系の JS/CC を動かすことに成功した気がします。以下は自分のためのメモも兼ねた簡単な説明です。
続きを読む »
JS/CC のサンプルファイルが少しみにくかったので、ちょっと整形してみました。まずは文法定義ファイル(calc.grammar)です。LALR パーザを使った方ならば、だいたい理解できると思います。サンプルの文法定義ファイルにやたらに使われていたTABを除去し、構文解析木のドライバルーチンを除去しました。
JS/CC は JavaScript 用のコンパイラ生成器で、字句解析器生成系と構文解析器生成系が一緒になっているようです。JavaScript の実装としては、ウェブブラウザに組込まれたもののほか、Microsoft JScript, Mozilla Rhino, Mozilla SpiderMonkey, Google V8 など主要なものに対応しているようです。
ちょっと研究上の都合から、小さな小さなインタプリタを書く必要性が生じました。作ったプログラミング言語の拡張 BNF はこんな感じ。
program ::= (command* command ::= | <変数> = e | <変数> := e | if e then { (command
* } [ else { (command
* } ] | while e { (command
* } | print e | dump e ::= <整数> | <変数> | unary e | e binary e unary ::= - binary ::= + | - | * | / | % | = | == | <> | < | > | <= | >=
全部でぴったり 300 行です。バイト数が 8,837 というのはつまらなかった。コメントでも書いて 8,888 バイトにすればよかった。Objective Caml を使いました。ビルドには OMake を使っています。
よかったらzip を公開してますので拾って行って下さい。ダウンロードされた方はコメントしてね。LALR 文法の shift/reduce 衝突が 13 個も出るので文法記述のお手本にはなりませんね。S 先生@東工大かN 先生@筑波大にお願いして直してもらおうか。。。
PPL 2010 のプログラムが発表されたようです。うちの研究室からは初日の晩のポスターセッションで三つの発表をします。
ちょっと詳しい内容については以前にこのブログで紹介しました。
3月3日から3月5日に香川県で開催される第12回プログラミングおよびプログラミング言語ワークショップ (PPL 2010) に参加してきます。研究室からは以下の発表があります。萌芽段階なためにポスター発表ばかりですけれども、いずれも興味深い話題を提供します。是非、ご期待下さい。
荒井くんの研究は、プログラミング言語にマクロ機能を追加する試みです。マクロと言ってもC言語のCPPやM4のようなちゃちなものではございません。Hygeinic macro systemと言って、従来から指摘されていたマクロがひこ起こす名前の衝突を解決し、パターンマッチを用いて複雑な構文を定義することができる高級マクロ機構に関する研究です。
実は、この高級マクロは20年ほど前にSchemeのために提案されてから、他のプログラミング言語に応用されたことがありません。それというのも、Lisp の一種である Scheme ではあまり問題にならなかった構文の拡張をプログラミング言語のコンパイル中に施すという技術的な問題が解決できていなかったからです。
もうひとつの問題は、Scheme で現在、標準的に用いられている高級マクロの実装において、高級マクロが用いられていることがあります。つまり、高級マクロシステムを他のプログラミング言語に移植するためには、その言語自身が予め高級マクロシステムを備えていないと移植が困難だということになります。
この発表では、荒井くんがこの問題にどのような指針を与え、実装の状況がどのように進展してくれるかを話してくれると思います。
津田くんの研究は、Liu、Lian、Hanが2006年に提唱したプログラミング言語のデバッグ手法に注目したものです。このデバッグ手法は、プログラムの実行における統計的な振舞いの違いから、バグの所在を言い当てるというものです。簡単に説明すると、プログラムのなかのそこここにif文がありますね。そのif文は条件式を評価した結果を受けて二者択一の動きをします。Liuらのアイデアは各if文で条件式が真の値となる確率を調べることでプログラム実行の特徴づけをできるのではないかという点です。
このBayesian Debugと名付けられたデバッグ手法では、同じプログラムに対して、正当な結果を出力する正答入力と間違った結果を出力する誤答入力を与え、それぞれについて各条件式ごとの真偽値の確率を収集します。そして、両者を比較し真偽値のずれがひどい箇所の近くにバグがあるだろうという発想です。
Bayesian DebugはC言語について提案されたのですが、津田くんはこれをSchemeにおいて試しました。Schemeのような関数的言語はCと異なり、プログラムが式から構成され、関数閉包が一級オブジェクト*2として扱える点が拡張されています。このために津田くんは、原論文の統計理論の枠組みを拡張し、条件式のような二値データだけではなく、一般の多値データを扱えるような工夫をしました。
津田くんは、Cと比べてSchemeのような関数的言語を扱うときにどのような問題が生じるのか、そしてその解決のためにどのようなことを考えればよいのかを語ってくれるでしょう。
吉永くんの研究対象はウェブブラウザを使った開発環境に関するものです。彼が目指しているのは、エディタや統合開発環境のようなものは一切使わずに、ウェブブラウザだけでウェブアプリケーションを開発できるような基盤ソフトウェアです。
ただ単に、アプリケーションが作れるだけでなく、ウェブブラウザの上で動いているウェブアプリケーションをアプリケーションを動かしつつ、データやコードを置き換えることで、動作状況を確認しつつシステムの開発ができるようにすることです。
このような仕組みは少くとも、parc の Smalltalk プロジェクトから発したプログラミング言語 Self には取り入れられており、Live Edit環境と呼ばれています。
吉永くんは、JavaScript を元に Dan Ingalls らが作った Lively Kernel という Live Edit 環境に触れるなかで、その問題点を見つけ、それを修正する形で独自の Live Edit 環境を提案しています。文章で書いても分りにくいのですが、当日はデモをしつつ分りやすく発表してくれると思います。
最近のコメント