プロフィール
| |
- Author:あろは (alohakun)
- 若槻俊宏 (WAKATSUKI toshihiro)
連絡先 : alohakun ___at___ gmail.com mixi : http://mixi.jp/show_friend.pl?id=182927 twitter : http://twitter.com/alohakun
abstract
プログラミングという人間の知的行為を体系化し,単なる職人芸ではなく,サイエンスにするための研究をしています.
具体的には,等価変換計算モデルに基づいた,仕様記述からのプログラム合成の研究をしています.
もっと噛み砕くと,プログラムの正しさをどのように定式化し,どのような枠組みで,どのように変換を進めていけば,正しさを保証したまま,効率的なプログラムを手に入れることができるのか,ということについて研究しています.
キーワード : equivalent transformation, computation model, programming paradigm, formal specification, program synthesis





|
FC2カウンター
| |
|
ブロとも申請フォーム
| |
この人とブロともになる
|
|
++ の起源
| 2007/07/24(火) 10:50:07
|
偉そうに昔の自分のブログ記事を張って答えておいて,思いっきり昔と同じ間違えをして,昔と同じ一人ツッコミを自分にするという大ボケを人様のコメント欄で晒してしまったので (寝ぼけすぎ),もう一度確認しておく.
The Development of the C Language の第二パラグラフ意訳
More History
Thompson は ++ と -- (インクリメントとデクリメント演算子) の発明という貢献をした.それらは前置するか後置するかによって,オペランドの値の変更を先に行うか後に行うかということを決定する.初期の B 言語にこそ,まだこれらの演算子は存在しないものの,その後様々なところに現れている.
往々にして人々は,C 言語と UNIX が載ったことによって有名になった DEC PDP-11 が提供する,オートインクリメントとオートデクリメントという 2 つのアドレッシングモードを使用するために作られたのだろうと推測する.
しかし B が開発された当時 PDP-11 は存在しないため,それは歴史的に不可能である.
ただし PDP-7 は,メモリの間接参照の際に,セルの内容をインクリメントした後に,その内容を使って参照するという性質を持った,オートインクリメントメモリセルを少数持っていた.おそらくこの機能が,Thompson にそのような演算子を示唆したのではなかろうか (前置と後置による一般化は,彼独自のものである).
明らかに,オートインクリメントセルは,演算子の実装に直接使用することはできないので,その発明に対する彼の強いモチベーションは,もっぱら ++x を変換するようにすれば,x=x+1 と書くよりも短くなるという点にあったと思われる.
(Thompson went a step further by inventing the ++ and -- operators, which increment or decrement; their prefix or postfix position determines whether the alteration occurs before or after noting the value of the operand. They were not in the earliest versions of B, but appeared along the way. People often guess that they were created to use the auto-increment and auto-decrement address modes provided by the DEC PDP-11 on which C and Unix first became popular. This is historically impossible, since there was no PDP-11 when B was developed. The PDP-7, however, did have a few `auto-increment' memory cells, with the property that an indirect memory reference through them incremented the cell. This feature probably suggested such operators to Thompson; the generalization to make them both prefix and postfix was his own. Indeed, the auto-increment cells were not used directly in implementation of the operators, and a stronger motivation for the innovation was probably his observation that the translation of ++x was smaller than that of x=x+1.)
全くの推測だけど,数学の初等教育を受けた人間ならば誰でも,x = x + 1 という書き方は,本能的に気持ち悪く感じるのではなかろうか ?
なので (もちろん簡潔さを好むというハッカー精神もあったのだろうけど) その気持ち悪さを隠蔽するために, ++ や += のような,普通の数学には存在しない独自の演算子を無意識のうちに求めて発明したのかもしれない.ナンチャッテ
|
翻訳|TB:0|CM:0|
|

▲
| |
|
プログラミング言語 ゲーデル
| 2007/01/26(金) 17:31:06
|
The Gödel Programming Language
う〜ん,よりによって,トンでもない名前付けたな〜と.少々名前負けしてるんじゃないですかね ? とか.正直,開発は止まってるっぽい印象.
やっぱり,人名を言語名するってのは,いろいろ難しいな.ハスケルとか,カレーとか.
いきなり世界的な名前を付けるんじゃなくて,最初は,ローカルなところから攻めていった方が良いような.偉大な論理学者に敬意を表して,JINSEI とか (いろいろマズイ)
Gödel is a declarative, general-purpose programming language in the family of logic programming languages. It is a strongly typed language, the type system being based on many-sorted logic with parametric polymorphism. It has a module system. Gödel supports infinite precision integers, infinite precision rationals, and also floating-point numbers. It can solve constraints over finite domains of integers and also linear rational constraints. It supports processing of finite sets. It also has a flexible computation rule and a pruning operator which generalises the commit of the concurrent logic programming languages. Considerable emphasis is placed on Gödel's meta- logical facilities which provide significant support for meta-programs that do analysis, transformation, compilation, verification, debugging, and so on.
(ゲーデルは,論理型プログラミング言語に近い,宣言的な汎用プログラミング言語です.パラメトリックポリモーフィズムを加えた多ソート論理に基づいた型システムにより,強く型付けられます.モジュールシステムを備えています.ゲーデルは,無限精度の整数と有理数,そして浮動小数点数をサポートします.整数の有限領域上の制約と,線形関係制約を解消できます.有限集合演算をサポートします.コミット型並行論理型言語を一般化した枝刈りオペレータと柔軟な計算ルールを備えています.特筆すべき特徴として,ゲーデルのメタ論理的機能の上に構築されている,解析,変換,コンパイル,検証,デバッグなどメタプログラミングのサポートがあります)
12 年前と,かなり古いものの,一応 2 分冊の本が出ているらしい (もち洋書).
Who should be interested in Gödel?
どのような人がゲーデルを使うべきなのか ?
- Those doing research in program transformation, program analysis, debugging, and a wide range of other meta-programming tasks. Gödel provides significant advantages for such tasks since it is much more declarative than Prolog, for example, and also a great deal of effort has been put into providing special support for meta-programming. Gödel makes possible advanced software engineering tools such as declarative debuggers and compilergenerators.
(プログラム変換,プログラム解析,デバッグ,そしてその他幅広いメタプログラミングの研究領域があげられる.ゲーデルは ,例えば特別なサポートを提供しているなど,メタプログラミングに対して大きな力が注がれており,Prolog よりもはるかに宣言的であるため,そのようなタスクに対して明らかに有利である.ゲーデルはコンパイラ自動生成や宣言的デバッグのような,先進的なソフトウェア工学のツールを可能とする)
- Those doing research in parallel implementations of logic programming languages. The declarative nature of Gödel greatly eases the task of building a parallel implementation of the language (compared to Prolog,
for example, whose non-logical facilities cause serious difficulties for parallel implementations) and offers substantial scope for parallelization in such implementations.
(論理プログラミング言語の並列実装という研究領域があげられる.ゲーデルの宣言的性質は,言語の並列実装の構築を劇的に容易にし(例えば Prolog と比較してみると,Prolog の非論理的な機能は,並列実装を深刻に難しくする),そのような実装における並列性に対して頑健なスコープを提供する)
- Those teaching logic programming. Gödel fits much better than Prolog, for example, into the undergraduate and graduate curricula since it has a type
and module system similar to other commonly used teaching languages such as Miranda and Modula-2. Also most of the problematical non-logical predicates of Prolog simply aren't present in Gödel (they are replaced by declarative counterparts) and so the cause of much confusion and difficulty is avoided.
(論理プログラミングの教育分野があげられる.例えばゲーデルは,Miranda や Modula-2 のような,よく教育目的に使用される言語に似たモジュールと型システムを持つため,Prolog よりも,学生や院生のカリキュラムにより良くフィットするだろう.また,頭痛の種になりがちな,素朴な Prolog の非論理的述語は,ゲーデルには現れず (それらは対応する宣言的な機構に取って変わられている),それゆえに混乱と困難を避けることができるだろう)
- Those working in the theory of logic programming. There has always been a large gap between the theory of logic programming (as in "Foundations of
Logic Programming", for example) and the much more complex and unsatisfactory semantics of practical logic programming languages, such as Prolog. Gödel significantly narrows this semantic gap. This means that theoreticians can apply their "pure" theories of program transformation, program analysis, etc., more or less directly to Gödel and do not have to be concerned with complications of extending their theories to cope with the many non-logical aspects of languages such as Prolog.
(論理プログラミングの理論の研究分野があげられる.そこでは常に,大きなギャップが,論理プログラミングの理論 (例えば,ロイドの「論理プログラミングの基礎」) と,Prolog のような現実の論理プログラミング言語の複雑で不満足な意味論の間に存在し続けてきた.ゲーデルは,この意味論のギャップがあきらかに小さい.これは,理論家が,彼らの 「純粋な」プログラム変換や解析などの理論を,ゲーデルに対して,おおかれ少なかれ,ほぼそのまま適用できるということを意味する.そして,Prolog のように,多くの言語の非論理的な側面に対応するために,理論を無理に拡張し,複雑化させる必要も無い)
しっかし,ゲーデルのコンパイルには,商用の Prolog コンパイラ SICStus Prolog が必要という.
あと,Windows は一切サポートする気が無いらしい.
なんか,Mercury といい,Goedel といい,処理系のインストールが面倒臭すぎるんだよなぁ.その点では,Haskell と ML はエライ.論理型言語がずっと日陰者なのは,ここらへんに原因がある気がする.
まぁ,SWI-Prolog とか,(歴史が古いだけに) Prolog はそれなりにがんばってるんだけど,いかんせん時代遅れという.もう LISP とか PROLOG は,理論的には特に見るべきところが無いんだよなぁ.
もちろん,実践的には意義があるんだけど,個人的に,LISP とか PROLOG の柔軟性ってのは,アセンブリ言語のそれと同じ.構造化されてない,というか,構造そのものが存在しない,いわばアセンブリ言語と同質の強力さなんだよなぁ.個人のノウハウや実力がモロに出る,職人芸に過ぎないというか.アカデミックな論文にはなりにくいよね.良さが客観的に議論できないから.そんなこんなで,時代は型システムなんですよ.当然,世界に構造を導入すれば,制限も生まれるんだけど.人間は,枠が無いと考えを先に進められないのよね.そういう意味では,理論は重要というか.もちろん,それに囚われたら本末転倒なので,両刃の剣なんだけど.
そんなこんなで,最近 S 式がどうのこうのとう議論が盛り上がっているみたいだけど,僕的には,S 式とかλ計算とかはあまりにもプリミティブなんだよね.むしろ,その中に,どのような構造を見つけて理論化していくか.僕はそっちの方に関心がある.
ということを,m-a-o さんのブログを見ていて思ったのであった (実際に研究用のプロトタイプシステムを作るときは,やっぱり型が無い方が楽なんだけど.あと,Haskell とか OCaml なんて,テキストエディタのマクロ言語にすらならないじゃないか〜 みたいな).
2006-12-17
今年を振り返ると、Haskellに触れたのがよかったなぁ。新しい言語を覚えること自体は、まあどうでもいいけど、Haskellを通して理論的なあれこれに触れられたのが。Scheme(やLisp)は、所詮、型無ラムダ計算+αなので、理論的にはあまり面白いことはないし。 parametric polymorphismは素晴らしい!こういうことを知っても、あまり役には立たないかもしれないけど、存在すら知らないというのは、やっぱよくないなと、そんな気がした。流体力学を学んでも飛行機はつくれないけど、知らないとダメだよねみたいな、なんかそういう感じで。
嘘
・別に私はCSの研究者でも、職業プログラマでも、飛行機作る人でもないので、ダメではない
・今年を振り返るとって言いながら、Haskellに触ったのは、2ヶ月前のことなので、それ以前の10ヶ月を振り返っていない
そんなこんなで,今年は型がある論理型言語を触ってみようと思っていたのであった.関数型言語とかは,他にやってる人がいっぱいいるしー,という中二病全開.
■他力本願
(そういうことは,一番最初に書くべき ! いまさら w)
しかし,処理系のインストールすら面倒くさくて,早くも挫折気味である.
とりあえず,Mercury, Goedel ときたので,次はいよいよカレーである. A Truly Integrated Functional Logic Language Curry
カレーは,比較的処理系のインストールが容易そうな感じが.コンパイラも枯れてるらしい.しっかし,やはり Windows 用の処理系は無いっぽいという.
|
翻訳|TB:0|CM:0|
|

▲
| |
|
GCC internals 翻訳開始
| 2007/01/18(木) 22:59:23
|
DA gccint-4.1.1.chm を作成。誰かこれ日本語に訳してくんないかな。
てなわけで,ついカッとなって作った.
GCC 翻訳 Wiki/GCC internals
まだ何もありませんが.だらだら気が向いた時にちょっとずつやってくつもり.
ちなみに,僕は tree (フロントエンドのための中間表現) のところと GGC のところしか興味無いので,9 章と 20 章が終わったら飽きる予定です.後の部分はテキトーに興味ある人が翻訳してくれたりするとうれしいです (なげやり)
というか,こういう現実逃避にかっこうの材料は,ホント危険だよな.プレゼン資料作りの合間の軽い現実逃避のつもりが,ついつい麻薬のように.本当に何やってんだ… > 俺 orz
同僚はみんな,輝かしい未来をつかむため就活に励んでいるというのに,研究も進めずにこんなことばっかやってる僕はどうみても穀潰しです.本当生きててすいません.腹を切って死ぬべきである.
(負け組にーと管理人)
|
翻訳|TB:0|CM:2|
|

▲
| |
| |
|
|
最近のコメント
| |
| リンク
| |
このブログをリンクに追加する
| 最近のトラックバック
| |
| 人生の残り日数
| |
日本人男性の平均寿命は 28700日.
| RSSフィード
| |
| カテゴリー
| |
|
|