2013-01-01から1年間の記事一覧

今年を振り返る

1. 単純なスタックマシンのJITするようなコンパイラを作ってた。SML#の勉強をする。 Scalaでコンパイラを結構本気で作る。 D言語に移植してみる(中途半端) SML#に移植する。2. LLVMに移植したバージョンを作る。ScalaとF#で書いたんだったかな?3. オブジェ…

プログラミング言語の基礎概念(ライブラリ情報学コア・テキスト24)を読み直してます

ジェネリックスを作りたいのですが、その為にはTAPL等のより深い理解が必要です。でも、未だに良くわからないです。久しぶりに見ると、分け分からない。見たくないと拒絶反応が出ます。こういう反応は、英語苦手話したくないっていう反応に良く似ています。…

クリエイトのデッドポイント

ゲームには、どうも、ある一定以上の複雑さが求められるようです。その複雑さを生み出すには、淡々と、作業をし続ける能力が必要なんだろうと思います。淡々とした作業の継続が、1つ1つは単純なものであっても、組合わさる事で、組み合わせの数は爆発的に…

[JavaScript] Mammouth

スマホのアプリをJavaScriptを使って作ってます。 それで、調べれば調べるほど、Node.jsまわり面白いなぁっと思う今日この頃です。CoffeeScriptのような、PHPに変換するPythonのようなオフサイドルールの言語を弄ってみました。PEGJSっていう、PEGライブラリ…

[F#] MinCamlを移植してみる

コンパイラを実際に作ってみて実装に大分詳しくなってきました。暗黙的な型変換が含んでいることもあって、MinCamlよりもずっと行数が多くなっています。今なら難しいと思っていたMinCamlが簡単に思えるかもしれません。出来れば、より良い型推論を含んだ型…

BallBlastを移植しました

FSharpで作成していたネイティブコンパイラな言語に、id:abaさん作のwonderflのBallBlast(http://wonderfl.net/c/euqw)を移植してみました。移植後のソース:(https://github.com/hsk/fstype7/blob/master/sample/ballBlast.lll) プログラムの行数 元のasファ…

クラスが動いた

とりあえず、以下のようなコードが動くようになりました。 https://github.com/hsk/fstype7FSharp版が最新になってます。 コンストラクタもstaticなメソッドもないのでいろいろ不便ですけど、やっぱりコードが奇麗になって 嬉しいです。 typedef A = class {…

FSharpに移植してみました

池袋バイナリ勉強会に行ってるので、FSharpで書いてみました。 作業時間が1週間くらいで、移植できました。 バイナリはosxのxamarin studioで作成しました。 すぐ動くかどうかは謎ですけど、LLVMが動いて、.netframeworkが動けば動くんじゃないかと思います…

LLVM化したプログラムが動くようになりました。

テストが通って、サンプルのOpenGLプログラムが動くようになりました。 アイコンも作ってみました。https://bitbucket.org/h_sakurai/lllong/スタックマシン的なコードはなくなって、最初からレジスタマシン用のコンパイラになりました。 型チェックが色々と…

LLVMのコンパイラの実装が大分進む

いちお、LLVMのコンパイラはグローバル変数と関数ポインタ周り以外は出来上がってきました。スタックマシン的コンパイラをよりスリムに修正して、レジスタマシンに移植したら楽に作れました。ってことで、猛烈に作業したら猛烈にやる気無くなったりして、調…

LLVM用の素直なコンパイラ書いてます

x86_64なら安心だと思ってたけど、LLVMのほうがもっと安心だった。 ってことで、LLVM用の素直なコンパイラを書いてます。スタックマシン的なコンパイラは作った訳ですが、仮想スタックが邪魔臭いので、素直にレジスタマシンへコンパイルする物を作ろうってわ…

[Scala][LLVM] 言語の実装いろいろを公開しました

mac osx 用のx86_64のコンパイラのScala実装https://bitbucket.org/h_sakurai/x86_64_typed_compiler/wiki/Homemac osx 用のx86_64のコンパイラのD言語実装 バグあり未完成https://bitbucket.org/h_sakurai/dtype/mac osx 用のx86_64のコンパイラのSML#実装h…

TAPLの話は、はてなブログに移動します。

Haxe 3.0 でx86_64の簡単なコンパイラを作ってみた。

四則演算を複数行って出力出来るだけですけど、 HaxeをC++に変換して実行すると、x86_64のアセンブラを吐き出し、gccを呼んでアセンブラをアセンブルしてます。 /** * Haxeでosx用のx86_64用のコンパイラのコア */ import haxe.io.Eof; import sys.io.File; …

Coqで証明中ですよと

えーと、TAPLの3.2.5をCoqを使って、証明しようと思ってたところです。TAPLの3.2.5を証明するには、Coqで実装する方法を知らないと出来ないのでした。なので、実装方法を知らねばならず、4章の内容を知らないと出来ない事をやろうとしてますと。しかも、Coq…

FJを探してみる。

論文は見つかったのですけど、英語で難しい。 ってことで、実装ないんかと探してみると、実装の論文は見つかったんですけど、実装そのものは見つかりませんでした。http://d.hatena.ne.jp/osiire/20090507http://ocaml-nagoya.g.hatena.ne.jp/yoshihiro503/2…

圏論について

ムツカシイので、何が難しいのか考えてみました。プログラミング言語を数学として考える場合には、何もない状態からの数学的な体系を構築する事が必要になります。ゼロから構築するので、自由にどのように構築しても良い訳です。自由ではあるのだけど、一般…

関数ポインタを弄る

コンパイラを作り、SML#を勉強し、コンパイラをLLVM化し、TAPLを読みつつ、Coqを勉強し、集合論を勉強し、、、疲れました。そこで、気分転換にスタックマシン的なLLVM用のコンパイラの関数ポインタをこうすればうまく行くんじゃないかなと思ってたので修正を…

「集合とはなにか」を読んでます。

面白いです。良くわからないので何回も見直してます。 ついでにと思って、「層と圏とトポス」も買ってみました。 集合がある性質を表す物の集まりなんだけど、それを色々拡張して行くと、この方が便利だ、あの方が便利だって話になって行って、圏論が産まれ…

Coq の コアライブラリ(Prelude)を見て数学が分かった気になる

集合はどうも、数学の基礎にあたるようです。でも、集合を把握すする前に「定義、公理、命題、定理とは何か?」を把握すると良いです。この辺の話はCoqの構文を覚えることでプログラミング言語を覚えるように覚えることができます。http://homepage3.nifty.c…

分からない理由8 演習をやってない

演習は、本を書いた人が学習する為に繰り返し覚えるといいよって思う所を問題として出している訳です。問題なのですぐ答えが出せる訳では有りません。答えを見ようと思えば答え乗っていれば見れば言い訳ですが、問題意識を持ってみることが大切です。演習は…

分からない理由7 反射的に眠くなるように訓練されている

この説明をだだだっと、姉にしてみた所、倒れて「眠い。授業したらすぐに寝れる教授になれるよ。」と言われたのでした。どうも、ああ駄目だ、理解出来ないでも、話は進んで行くとなんともたまらなく眠くなるように訓練されてしまっているんじゃないかと思い…

分からない理由6 定義や定理、補題、命題、証明がごちゃまぜになっている。

恥ずかしい話ですが、定義と定理の違いが良くわかってませんでした。出来るだけ避けるべき存在になってました。でも、Coqをやってみて考え方が変わりました。定義とか定理とかは、typedefとかdefとかのようなキーワードであり、構造化された文章を書く為の構…

定義2.1.3.

R ⊆ S1×S2×...×Sn n-ary relation n項関係 ⊆ subset of or eauql to サブセット s1∈S1...sn∈Snに対して(s1,s2...sn)がRの要素 n-ary relation 要素(s1,s2...sn)はRによって関係ずけられる 単項関係 項が1つだけの関係 S上の単項関係 S上の述語 今までは∈??…

定義2.1.2.

N Nat (Natural number) 自然数 0,1,2... ホントは2重線のNです - countable set 可算集合 自然数と一対一に対応付けられる集合

定義2.1.1

{...} Enumeration 列挙 {x ∈ S|...} Comprehensions 内包表記 x ∈ S x is element of S xはSの要素 ∅ Empty set 空集合 S ∖ T Set Minus 差集合 S ∪ T Union 和集合 UnionのU Andの反対でOrな感じ S ∩ T Intersection 積集合 共通部分,Unionをひっくり返し…

定義2.1

S T U Set 集合 R Relation 関係 f(x) Function 関数 x s t u Element 要素 集合と関係と関数、要素は英語でなんと言うのかまとめてみました。 関数がFunctionと、要素はElementは有名だと思います。 関係はRelationで集合がSetが繋がってない人は多いかもし…

分からない理由5 記号を覚えられない

システムを作る際には仕様書を作って実装をするわけですが、仕様書にはそれほど記号は出てきません。理由は演算子を使えないとか、使えても限りがあるからです。そのシステムを作る為の演算子を使うってことはあまり多くないのです。記号は使わずに、英単語…

分からない理由4 すぐ実装してみることが出来ない

Coqのような定理証明系の言語を覚えれば、理論や証明をコンピュータ上で実装してみることが出来ます。 覚えるのには時間がかかります。地道に勉強しましょう。昨日は、Coqチュートリアルをやってみました。以下のようなファイルを用意して、CoqIDEで上行った…

分からない理由3 標準的な集合の記法が書いていない

2.1.1で集合は標準的な記法を用いると書いているので、これが分からないんですね。標準的な方法を知らないので、分かる訳けないですね。標準的な集合の記法を覚えよう!!「プログラミング言語の基礎概念」や「プログラミング言語の基礎理論」、「論理と計算…