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

TDC設立2周年総会ライトニングトーク

JavaScriptで演算子順位法による構文解析をライブコーディングしました。 あとで、ソース張ります。

タイガーブックを読む(1)

タイガーブックが届いたので読んでいきたいと思います。 まずは、以下が目次です。第1部 コンパイラ基礎編 1.はじめに slp.sml 2.字句解析 driver.sml errormsg.sml sources.cm tiger.lex tokens.sig tokens.sml 3.構文解析 errormsg.sml parsetest.sml sour…

sbazに登録してみる

やったらできてしまいました。わーい。

仕様翻訳しようぜ

SWF

SWFの仕様の日本語訳ってないわけです。で、みんな困ってたりすると思われまする。http://hkpr.info/flash/swf/index.phpということで、翻訳プロジェクトに勝手に手伝いに入りました! 自分は下から、仕様の表だけひたすら、打ち込んでいく作戦を取って見て…

MinCaml読む

次の仕事が決まったので、自由な時間が短くなってしまいました。ってことで、ペースダウンしてしまいます。 てことで、Scalaに移植したものを読んでみてます。 うーん。やっぱりScalaいいよ。Scala。読みやすい。 ということで、MinCamlの把握をようやく出来…

mincamlのScalaへの移植

mincaml をScalaに移植する作業をしてたのですが、ようやく、全体のコンパイルが通りました。 型のチェックがしっかり効いているのでバグは少ないと思いますが、何をやってるかよく把握しない状態で 型だけあわせて行った感じなので、勘違いによるバグの混入…

OCamlのソースをScalaに移植する為のノウハウ(1)

計画 ここのところ、OCaml製の MinCaml を Scala に移植しています。リポジトリ: http://github.com/hsk/mincamlj/tree/結構規模が大きいので、(約 2000 行とはいえ圧縮されているので大きいんです) 闇雲に作業をしているとモチベーションが続きません。 こ…

今日の作業

mincamlのScala移植をとりあえず、コンパイル通さないで、 ひたすらシンタックスの書き換えのみに集中してやることにしました。おかげで、作業は捗りました。 見た目はScalaだけど、動かないプログラムソースが沢山出来ています。 githubにアップロードした…

githubを使う

オープンソースで開発するならリポジトリは必須です。 ということで、githubにソースを置いたりwikiを使って開発をしていこうと思いプロジェクトをいくつか作ってみました。http://github.com/hsk必要になったら作るというよりも、準備しておけば必要になっ…

ダイヤモンド言語構想

■目標C言語属の言語を式ベースとして再構築して、 新しいプログラミング言語インフラストラクチャを作成することを目標とします。 ダイヤモンド言語では4つのフェーズで言語を作成します。・フェーズ1 C言語風式言語を作成 ・フェーズ2 式言語をベースに…

Sendai.as

仙台でActionScriptの勉強会がしたい! ってはなしがあったのでいろいろとお話してきました。 議論が出来たらとおもって、適当に話題提供しつつ、話しかけてたのだけど 結構反応があまりなかったので残念といえば残念な結果だったかもしれません。 でも、や…

構文木からAST(2)

タプルからASTに変換するプログラムを書いてみました。 今回は大部分のステートメントに対応しています。 エラー出力をどうするかの問題がありますが、とりあえず、構文木→抽象構文木の変換がどのようにやれば出来るのかが明確になったと思います。以下ソース

タプルからAST作成

構文木のパーサはそこそこ出来ていて構文木を嘗め回すインタプリタは作成しました。 JVMは構文木を嘗め回すのが妙に速いのでそれなりのスピードで動いてくれます。 しかしコンパイラを作る場合は抽象構文木(AST)に変換する必要があります。 通常の構文解析な…

短いオフサイドルールなパーサ字句解析器

HaskellやPythonオフサイドルールのパーサレキサーをjavascriptで書いてみました。 例はわざとレアなケースで書いてあります。 <script> Array.prototype.toString = function() { return "[" + this.join(",") + "]" } function run() { var ls = (document.getElem…

マクロは低級な言語でより生きる。

高級言語なら多態性やクロージャ、遅延評価等によって表現力を豊かに出来ます。 マクロでも表現力を豊かにすることは可能です。 しかし処理を追いかけにくいので高級言語では好まれません。 一方、低級言語ではスピードが求められます。多態性を使うようなテ…

Flash cola

言語ゲームのプロペラさんがFlash上でLispをLispでSWFファイルにコンパイルして実行できるという、 Flash Colaを完成させたそうです。 すごい。自分も考えてみてはいたんですけど、あきらめちゃっていました。 実際に作れるか作れないかの違いは大きい。 Fla…

の提案

2chでいろいろな議論があるなか叩かれつつも考えが進んだので文章にしてみました。 日本語は苦手ですが、それなりにがんばったつもりです。 一般的な言語は文脈自由文法により定義されます。 文脈自由文法とは文章の流れによって構文が変わることがなく文脈…

戦うパーサ

戦闘力表を元に戦って勝ったほうが結合するように書いてみました。 <script> // 式 function Exp(l,op,r){this.l=l;this.op=op;this.r=r} Exp.prototype.toString = function() { return "["+this.l+",\""+this.op+"\","+this.r+"]" } // 戦闘力表 var powers = {} /…

FLOPS会場に下見に行く

例によってボケていて、今日が19日だと思い込み、FLOPS2010の会場に思わずダッシュで行ってしまいました。 でも、誰もいない。途方にくれてしまったので、それっぽい人に話しかけてみるも、地震学会かなにかの関係者の人で 恥ずかしいんだけど、どうしたらい…

居酒屋プレゼン行く

超ローテンションで行ってきました。 sendailockの実装の話をしたのだけど、画面写らないとかいってるので、この辺にあるはずーってかんじで。 やる気出す方法とか、モテる男は仕事も出来るとか、参考になったような、ならなかったような。 逆に落ち込むよ、…

Gizzard

http://www.publickey1.jp/blog/10/twittergizzard_scalasharding.htmlGizzardてのはtwitterで使われている技術でシャーディングを行うものだそうです。 シャーディングってのはパーティショニングとレプリケーションを使ってDBを分散して管理できるようにす…

いろいろ調べたリスト

いろいろありすぎて死ねる hiphop php c++でコンパイルして高速化 resin Quercus phpをjvm上で動かして高速化 細かい仕様が違うのが問題。 scalaでliftはxmlベースゆえに、いまいち jetty resin 非同期IOWebサーバ Gizzard twitterで使われている分散DB管理 …

設定パターン2

/etc/init.d/iasrecompd 等を作っていい感じに。 /recompile.phpがアパッチ上でリコンパイルをするようにします。あとは、ファイルを書き換えたりしてみればうまくいったり行かなかったりします。 うまく行かない場合はコマンドライン上でinotifyapcsmartyre…

設定パターン1

php.iniを変更してinotifyapcsmartyrecompiler.phpが永遠に止まらないようにします。 apacheの起動シェルにwgetでinotifyapcsmartyrecompiler.phpを一瞬取りに行くようにします。1秒くらいで終わらせるようにします。

Inotify APC Smarty Recompiler

PHP

これは何? PHPの高速化をするにはAPCを使ったりSmartyのオプションを色々変えたりということをすると高速化できます。 特にファイル変更のチェックをはずすと高速化出来ますが、その代わりPHPの利点であるサーバを動かしながら変更を加えるということが 出…

仙台Ruby会議02

rubyとビジネスっていうテーマで田舎でビジネスしたり、東京でビジネスする際のいろいろなはなしを聞けて楽しかったです。 いなかにこだわる理由みたいな話で、ずっと優秀な後輩とかと話したいのに東京に行ってしまって寂しいのでなんとかしたい って話は自…

SendaiLockサーバ

どうも、ずーっとプログラムを動かしているとエラーが出るので原因を調べると、 しばらくソケットが使えなくなることがあるそうです。 SO_LINGERとか、setReuseAddressとかを使うことで対応できるらしいので対応してみました。 phpのクライアントもSO_LINGER…

sendailockサーバ

というわけで、この間の非同期型echoサーバをいじって、非同期型のロックサーバを作ってみました。ノンブロッキングIOを使ってロック要求を受け付け、ロック用のマップにリクエストのリストに登録します。 リストが空ならロック取得でき、そうでなければ待ち…

scala nio echo server 改

ScalaといえばErlangの好敵手で、Actorモデルも扱える関数型言語です。 となれば、Actorモデルできれいにnon blocking io を使ったサーバを書いてみたくなるものです。 ということで、scalaのnioを使ったサーバの例を探してみるとyuroyuroさんの書いたすばら…

もしも、自分がシンタックス屋さんなのだとしたら

と、ふと風呂に入って考えた。 カラオケのシダックスじゃないよ。プログラミング言語の構文屋だったらと。 自分は、いろいろな面白そうな構文を考えてブログに書く。 それでいいんじゃないかと。 論文の体裁はないかもしれないけど、読んで新しい知識やアイ…