2011年07月11日

Hello, counter

Web1.0時代は、「あなたは○○人目の来訪者です」というカウンタをつけるのが流行っていました。
このチープ感あふれる仕組みを含むページを作ってみましょう。

OPAには組み込みのデータベースがあり、dbの後に続けてパスを指定することでデータベースの構造を定義できます。データベースには「型」を指定する必要があります。カウンタはどう考えても整数ですから、整数を表すint型を指定しましょう。

incr_countは、データベースの値を取ってきて、1増やした値をデータベースに入れ、増やした後の値を返す手続き(opaではこれを関数と呼びます)です。あとは、incr_count()を呼ぶたびカウンタ増えるよぽぽぽぽ〜んという寸法です。簡単ですね?

データベースの初期値はどうなるか、気になる人も居ると思います。データベースの初期値は、型によって決まります。intの場合は0が入りますので、このdbの値は0からスタートします。1増やした後の値を返していたのはこういう理由からです。

あとは、ソースファイルをコンパイルすれば、サーバーができあがります。繰り返しますがopaのデータベースは組み込みですので、ライブラリを持って行ったり、DBの設定をする必要はありません。

この実装を見て「あれ、ロックは?」と思った方。ごもっともです。次の回で詳しく説明します。


db /counter : int

incr_count() = (
c = /counter
do /counter <- c + 1;
c
)

hello() =
<p>
あなたは{
incr_count()}番目のお客様です。
<
/>

server =
Server.one_page_server("Hello", -> hello())


(次回に続く)
posted by chun at 23:32| OPA

Hello, OPA

プログラミング言語を遊ぶ以上、まずは何はともあれHello, Worldです。OPAで書かれたプログラムはコンパイルされ、単体でサーバーとして動作する実行プログラムを出力します。

// hello.opa
hello() =
<h1>
Hello, World!
<
/>

server =
Server.one_page_server("Hello", -> hello())


このファイルをhello.opaとして保存し、
$ opa hello.opa
$ ./hello.exe

とするとlocalhost:8080にwebサーバーが起動します。ページが見れましたでしょうか。Web0.1時代の開幕です。

(次回に続く)
posted by chun at 23:17| OPA

Web1.0で遊ぶOPA

OPAをご存じでしょうか? OPAはMLstateという会社が開発したweb開発用の言語です。
わたしはこのOPAがかなり気に入ってしまったので、これから数回にわたり、ちまちまと紹介記事を書こうかと思います。
といっても、わたしはあまりwebページの作成経験がないので、どちらかというとWeb 1.0的なテーマをネタに、サンプルを作ることになりそうですが。
わたしの思う、OPAの良いところリストは以下の通りです。
・パターンマッチ
・パターンマッチ
・パターンマッチ(大事なことなので3回言いました)
・代数型と、それと親和性の良いDB
・型検査(+推論)
・サーバー側とクライアント側を同一の言語で書ける
これからのシリーズで、この特徴をいくつか見ていければ良いかなと思います。よろしくお願いします。

posted by chun at 22:59| OPA