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

NEXT STEP

floatが出来たぞ。とりあえず動かせたぞ。 でも、ソースはグチャグチャ。無駄なコード一杯あるぞ。 次は、とりあえず、gitにupだ。 そして、diff作るんだ。 んでもって、写経して練習出来るようにするんだ。 んでもって、1日で作れるようになるんだ。 それ…

簡単にする

floatを入れる為には、 1.0 + 1 なんていう式も自動的に 1.0 + cast(float)1 と変換したいんだけど、コレをするには暗黙の型変換が必要になるぜ。でも float がコンパイル出来るだけのコンパイラを作りたいのにめんどくさいから、float の足し算は OCamlに習…

今後の目標とか

floatを追加する 暗黙の型変換を入れる 型推論を入れる大体今年中にこの3つをスマートに分かりやすく行おうと思ってます。で、まずとにかく、動かす。これが一番しんどい。 動かしたら次は、一から作り直してみる。 次は手順を書き出してみる。 手順通りに…

NetBeans7.2 Betaでログフォルダを無視されたフォルダに登録する。

なぜか、ブラウザでプログラムを実行すると、NetBeansのナビゲータがパラパラ動いて気になってました。 たぶん、プロジェクト内のファイルが書き変わったら反応するようになっていてログフォルダがプロジェクト内にあるからなんじゃないかと思って調べてみま…

markdownを使う

基礎的な技術の問題はなくなったので、次は実装をしていきます。 でも、今週は体調がよくなかったので寝てました。(汗 仕事を頑張りすぎた。周りに比べたらそれほどでもないような気もしますが、やっぱ、疲れた。 パソコンしようとすると、頭痛がします。む…

リターン

ということで、リターンを考える。 リターンの嫌な所は、関数内の色々な箇所で脱出されること。式が値を持たないのかな? リターンは関数の型になるけど、式の型にはならないと。 scala> def a():Int = { val a = return 1; a+1} :8: error: value + is not …

ブロック の型推論の環境 immutable な変数

とりあえず、再帰で呼び出しまくれば良いんじゃね? グローバルな環境で既に定義がある変数を再定義して使う場合に、定義する前に参照してたら普通どうなるの?って言う話がある。 Cだと、未定義動作になる。Javaだと、参照不可、Scalaだと前方だか後方参照…

とりあえずメモ

今日はコンパイラ実装会があったので、参加してきました。 なかなか一人でやってると苦しいので、みんながいるところで実装出来ると楽しく実装出来てホントに助かります。やる気をもらって頑張れました。本当に感謝です。

letを変える

letは変数に値を束縛し次の式で使えるように出来る素晴らしい式です。 しかし、作ろうとしている言語では、Scalaのvarとvalとblockが必要です。 そこで、構文木の定義にblockとreturn, varを追加します。 blockは式のリストで、型は一番最後の式の型です。た…

型推論

PHP

以下のサイトを参考にhttp://dysphoria.net/2009/06/28/hindley-milner-type-inference-in-scala/hindley-milnerの型推論をPython版をPHPで実装してみました。 Modula2->Perl->Scala->Python->PHP という流れで移植に移植を重ねられています。 洗練されたり…

テストコード

テストをつけました。 今2日くらいで、以下のコードを12段階に分けて書く練習をしてます。 trait Exp case class Const(a:Int) extends Exp case class Var(a:String) extends Exp case class Add(a:Exp,b:Exp) extends Exp case class Let(a:String,b:Ex…

分かりやすくしよう!

難しい問題は、小さく分割することで簡単にする事が出来ます。また、分かりやすくするには、動くプログラムを徐々に大きくして行くのがよいようです。 なにかをしようとして問題が出てきて、その問題をクリアして その結果として、プログラムは大きくなって…

コンパイラ実装会行く

新宿でやってたので、行ってみました。 13:00からだったのですが、例によって悪い癖が出てしまって、遅刻してしまいました。 でも、とにかく、静かに作業が出来たのでよかった。作業内容住井さんのOCamlで型推論する記事をScalaに移植して理解する。 ってこ…

型推論が出来たなら

型推論が出来るようになったら、もうバラ色である。 型を持った、コンパイラが作れるわけだ。 Lisp級マクロが当然のように動く。 実装は美しく簡単で、解説も書いてある。 型推論があるので、プログラムはスッキリ書ける。 型推論が分かったので、C++やScala…

キレイなイベントの回し方

php

ここのところ、オーダーメイドなカスタマイズでオラオラ回してた訳です。 でも、再利用性が低い問題がありました。 そこで設定で何でも出来ればいいということで、もしもし文を沢山書いた訳です。そして、マクロが嫌いになりました。 さて、そこでオブジェク…

エイプリールではないユニフィケーションをしてる話

とくに嘘なネタはないので書いてません。面白くなくて申し訳ないんですけど。ここのところ日記の更新出来てません。 型推論の基本はパターンマッチングとユニフィケーションです。 実はパターンマッチングは理解していたのだけど、ユニフィケーションは理解…

ここのところ

日記、書いてないので書いておくと、型推論をやるぞー!ってことで、型推論をいろいろ勉強中です。 型推論って要するに、プログラムにunify(単一化)してやって、型が分かるところから引っ張って来て分かったらそれを使うってだけなんだけど、 それが難しいん…

NetBeans7.1の不満な点

NetBeans7.1でScala2.9のコンパイルが速くなったっぽいです。 矩形選択も嬉しい。 NetBeans7.1.1も出た!でも、非常に不満な点があって結局今は、NetBeans7.0を使ってます。不満なところは、Subversion周りと、検索が遅くなったのです。 Macだとspotlightで…

暗黙の型変換を考える(3)

型の中に式があるのではなくて、型と式のタプルに修正しました。 こんな感じで、式に対して、castを必要な箇所に挿入できるようになります。 これを、関数のある言語について拡張していければいいんでしょうが、 その為には環境を持ってうんぬんしないといけ…

暗黙の型変換を考える(2)

とりあえず、インタプリタ的に考えるとScalaだと以下のように書けました。 object testt { def main(argv:Array[String]) { var prg = (1,"+",2.2) var rc = t(prg) println(rc) } def t(p:Any):Any = p match { case (a,"+",b) => ic(a,b,{case (a:Int,b) =…

コンパイラ作り

暗黙の型変換をどうやったらいいんだ?よくわからんぞ。 って悩んでます。 基本は上の型に合わせてcastを追加する感じで演算は同じ型でやればいいらしいのだけど、、、。

引きこもる

えーっと、引きこもって2chに書き込んで叩かれてました。 おかげさまで、考えがまとまってよかった。JVMコードリーディングに行ってみたかったです。 デブサミにも行ってみたかったです。 仙台にも帰りたかったです。 仕事プログラムやり過ぎで、冷静な判断…

Scalaでアンドロイドアプリを作ろう

かなり悩んだので、メモしておきます。使った環境 Mac OSX 10.7Eclipse Indigo Service Release 1 Scala Plugin 2.9.1 Android Plugin AndroidProguardScalaAndroid2.1で開発。Scala2.7時代と違うのは特に、scala-android.jarが無くてもとりあえず動いたこと…

妄想を書いた物。それがテストだ!

今年は汚くても、ゴリゴリ実装するのだ。 テストもちゃんと書く。泥臭くても書く。 でも出来れば、テストを楽しく書きたい。なんとか進まねばならない!でもやりたくない。 うじうじ悩む中、とにかくTODOリストを作る。 どうも、インタプリタでまだ、無い機…

テストを書いてます

まだまだ、テストは苦手ですが、テストすると着実性があがっていいですよね。 ということで、テストを書いてます。 Scalaの場合はいろいろなテストのライブラリがあるようなんですけど、 Eclipseで楽にUnitテストできそうなのが、JUnitなので、JUnitを使って…

ふわふわコンパイラ作成

https://github.com/hsk/tscala今週末は、今まで型を付けていなかったデータに対して型を付けました。 ScalaではNetBeansよりEclipseのほうが高速にコンパイル出来るので、 Eclipseで開発してJUnitでテストを書いて徐々にブラッシュアップして行こうとしてま…

NetBeansのいい点

仕事のPHPの開発のときはNetBeansを使ってるのですが、7.1が出てました。 いままで矩形選択ができなかったのですが、矩形選択出来るようになっていて嬉しいです。で、NetBeansのどの変がいいか書いてみます。1.PHPのデバッグをブレークポイント指定してさく…

コンパイラ実装会

特に準備もなく、行ってみました。 元旦に結構がんばってコンパイラ作ってて、その後、android携帯を手に入れて面白くなって遊んでたり、 仕事がそれなりに忙しいけど楽しかったりで、コンパイラ作りが進んでなかったので進めてよかったです。kimurayaさんが…

phpmyadminにコメントを付けよう

http://d.hatena.ne.jp/yasuhallabo/20111207/1323274746 http://ameblo.jp/oyayubi-giken/entry-10807475949.html何かと、便利なのでやっておくとよさそうです。

レジスタ割り付けをしたい(2)生存情報を求める。

だいぶ、時間が空いてしまい、自分の中でもなにがどうなっているのかわからなくなってきてしまいました。 やばい。風化する。ソースがどこかに消えてしまう。 消える前に、多少分かりにくくとも、きちんと記録に残さねばならない。 という、使命感にかられこ…