OCaml

OCamlと順序付き線形型で効率のよいXML処理 (to be continued)

この記事は OCaml Advent Calendar 2012 の 24日目の記事です。 が、実際にアップロードしたのは2013年1月18日です。 本当はもっと実用的なネタを書く予定だったのですが、飽きた ので、いっそ思い切り趣味に走った記事を書くことにしました。追記: 動作す…

最強OCamlでセッション型を実現

この記事は OCaml Advent Calendar 2012 の 18日目の記事です。OCamlでセッション型を実装した、というお話です。ちょっと時間がないので簡潔に書いています。 ソースはこちら セッション型 セッション型とは: 通信チャネルの型です プライベートな二者間の…

OCamlで使える同値再帰型 (equi-recursive types) は恐ろしいけど、すごい

この記事は OCaml Advent Calendar 2012 の 17日目の記事です。同値再帰型が何であるか知りたい方は、今後発売される TAPL日本語版を読むと良いと思います(私も翻訳しています。*1)。 Wikipedia英語版にもありますね。 同値再帰型は、再帰型の定式化の方法…

第一級モジュールでジェネリックなSet操作

この記事は OCaml Advent Calendar 2012 の 8日目の記事です。昨日のエントリでは無理矢理 'a t の形で扱える Setモジュールを作りましたが、これには欠点があり、 'a t型をもつ各集合で、'aの同値性の付け方が異なってしまいます。 昨日の記事に @garriguej…

第一級モジュールでSetの多相性を復活させてみよう

この記事は OCaml Advent Calendar 2012 の 7日目の記事です。OCaml 3.12より導入され、4.00でさらに便利になった 第一級モジュール (First-class modules)を使った小技を紹介します。ある種の単相的に定義された抽象データ型(ADT)を多相的にするという技で…

実務で使うOCaml - 泥臭い仕事をサクっとこなす方法

プログラマが実務で出会うのは、問題が整理されたキレイな仕事ばかりじゃない。プロダクトに本質的じゃない部分でもプログラムを書く必要に迫られる。いわゆる開発方法論では抽象化されてしまう、今ここにいるソフトウェア開発者の悩みだ。今日は、私が仕事…

OCaml toplevel on Android : マジカルなラクダをAndroidで飼おう

Androidで動作するOCamlインタプリタ OCaml toplevel on Android を Android Market に公開しました。 OCamlのトップレベル(インタプリタ)をAndroid上で操作できます。 enjoy! 仕組み OCamlトップレベルはネイティブ実行されます(OCamlバイトコード+libcamlr…

pa_monad を通して camlp4 のコマンドラインを思い出す

pa_monad は OCamlで モナドを使いやすくするための構文拡張だ. ついこの前 id:camlspotter さんが pa_monad の拡張を書いてくださった.ありがたや. 早速使ってみようと思い,コンパイルした.hg clone https://bitbucket.org/camlspotter/pa_monad_custo…

OCamlベースのAndroidアプリに向けて

O'Caml on Android というパッチを作っている. 柔軟かつ信頼性の高いOCamlでAndroidのアプリを書くのが目標だ. ここ2ヶ月ほどocamljs (OCamlからJavaScriptへのコンパイラ) を使っていて、OCamlの信頼感と柔軟性にとても満足したので,ではAndroidでもOCam…

Haskell厨を6年やってる俺がOCamlを仕事で2ヶ月使ってみた

Haskell Advent Calendar jp 2010のためのエントリです(17日目). 6日目の id:camlspotterさんの 経験15年のOCaml ユーザーが Haskell を仕事で半年使ってみた に対するカウンター(になってるかどうか分からないですが)みたいな感じです. 近くて遠い隣…

モジュールの集約に多相バリアントを使ってみた

OCamlならではの型機能である多相バリアントとプライベート列型を「なんとなく」使ってみた話.タイトルはやや(かなり?)大げさで,小ネタです. 追記: プライベート列型は使わなくて済んだ… ストーリー 仕事でOCamlを使っている. ボスに命ぜられた通り,…

ocamljs を使おう : OCamlからJavaScriptへの変換

ocamljs は OCamlから JavaScript へのトランスレータだ。前回の記事と順番が逆になってしまったけれど今回はocamljsについて書く (基本的に http://jaked.github.com/ocamljs/ 以外のことは書いてないです。)。 JavaScriptは歴史的経緯とその簡潔さからweb…

ocamljsが生成したソースをclosure compilerで圧縮する

ocamljsは OCamlからJavaScriptへのトランスレータ。 closure compilerは JavaScriptのコードを圧縮/最適化するツール。 ocamljsが生成するJavaScriptのソースは大きくなりがちなので、minifier等でできるかぎり小さくできることが望ましい。その点で closur…

OM2010 in Nagoya近し

名古屋でのOCaml meeting 2010が近いけれど、何かと忙しくて内容にcontributeできそうにない…。OCamlJSを使って何かやるつもりだったけど間に合わない…。 などといいつつ、気分転換にJavaScriptをポチポチ書いた。

可変状態モナドと安全な入出力とセッション型 in OCaml

今日は関数型言語の型で副作用(入出力)の制約を表現する、というお話を書きます。 (勢いで書いたので、わかりやすいかどうか不明です。) Safeio in OCaml ガリグ先生による Caml-list への投稿に Safeio というお話があります。 任意個のチャネルへの入出力…

multi-promptな限定継続 in Haskell (失敗編&成功編)

multi-promptな限定継続の方が型がわかりやすい件について。なんだかshift/resetの型付けはむつかしいなーと思っていた。 限定継続のOCaml実装を見てみたくて、Olegさんのdelimccライブラリとその論文を眺めていた。 こちらはmulti-promptな限定継続といい、…

pthread の フェアネス (と ocamloptのコンテキストスイッチ)

pthread のスケジューリングがイマイチ公平でないように見えたので各環境での振る舞いについてざっと調べた. (あんまりOCamlと関係ない) 動機 前回のコードは 私の環境(MacOSX 10.5.8)では コンテキストスイッチがなかなか起こらず しばらく片方のスレッド…

マルチスレッドなFFIの実装

マルチスレッドでOCamlからCを呼ぶ場合、または CからOCamlにコールバックする場合、 C側からOCaml のデータを触るとき C側からOCaml のコードを呼ぶとき は、その部分を (OCamlを触らないコード) leave_blocking_section(); (OCamlを触るコード) enter_bloc…

メモリアロケーションとコンテキストスイッチの関係

OCamlのコンテキストスイッチのタイミングを調べた。OCaml では OSネイティブのスレッド (pthread) を使える。 しかし、OCamlのランタイム内で同時に走るネイティブスレッドは1本だけ、という制限がある。OCamlはスレッドセーフなGCを備えていないためだ。 …

OCamlをAndroidにポーティングした

最新版はこちら (2010/12/8)OCaml を Android に移植しました。具体的には OCaml のバイトコードを Android で実行できるようになった OCaml のソースから Androidのネイティブコードを生成できるようになった という感じです。 caml-listにもポストしたよ。…

Mac OS X で F#

MacPorts から F# を入れて触ってみました. インストール sudo port install fsharp インタプリタの起動 fsi しばらく待つと mono がむっくりと起き上がって,プロンプトがでます。 もし起動しない場合は, bashrc に export DYLD_FALLBACK_LIBRARY_PATH=/us…

Ocsigenについて OCaml Meeting Tokyo 2009 で話しました!

ピンチヒッターとしてLTではなく普通のセッションをいただきました! スライドは以下: http://www.agusa.i.is.nagoya-u.ac.jp/person/sydney/ocaml/ocsigen-omt2009-black.pdf# slideshareがこのスライドを受けとってくれません

Ocsigen/Eliom と PG'OCaml を使った Web開発サンプル (OMakefile付き)

明日の OCaml Meeting Tokyo 2009 で Eliom/Ocsigen について LTします! これに備えて、 Eliom と PG'OCaml を使ったサンプルアプリを準備しました! Eliom は OCaml 用の Webプログラミングのライブラリです。 Ocsigen上で動作します。 OCaml の静的型付け…

findlibとMacOSX を使う時に通しておきたいパス?

Camlp4: Uncaught exception: DynLoader.Error ("/opt/local/lib/ocaml/site-lib/pcre/pcre.cma", "error loading shared library: dllpcre_stubs.so: dlopen(dllpcre_stubs.so, 138): image not found")と出た。 .bashrc に、 export DYLD_FALLBACK_LIBRARY…

Eliom/Ocsigen の XHTML型

EliomではXHTMLを表現する型でページを構成する.たとえば、 というタグは型 [>`Html ] XHTML.M.elt の値として扱う. このおかげで、Eliomが出力するXHTMLは必ずwell-formedかつ(ほぼ?)validだ. [>`Html ] XHTML.M.elt という型を見れば分かるように、 幽…

Eliomで入力値検査 (4) Eliom_parameters.regexp バグ?

以前 ここで書いた 電子メールアドレスを表現するリクエストパラメータの param_type で let email_string s = Eliom_parameters.regexp emailregex "$0" s と書くと、 なぜか 文字列 "ocsigen" が帰ってくる。 正規表現の $0 はマッチする文字列全体を指す…

Ocsigen/Eliomで開発中 - パラメータの山!

Eliomで、とある講義の受講申し込みアプリを作っている。こういうのにありがちだが、リクエストパラメータはすぐに増えてしまう。このパラメータの山はなんとかならないか。 フォームを作る関数 get_form や post_form は、パラメータの個数分ネストされた対…

Ocsigenでfindlibのパッケージをロード

例えばEliomでextlibを使う場合 <library findlib-package="extlib"/> とする。</library>

Eliomで入力値検査 (3) メールアドレスのチェック

よくある話、正規表現でメールアドレスっぽくない文字列を弾きたい. Eliom の, 正規表現で入力値を弾く param_type を生成する Eliom_parameters.regexp を使う OCamlには pcre-ocamlというPCREインタフェースがあるのでそれを使う. ソース (* どこかから…

Eliomで入力値検査 (2)

(Ocsigenは Webサーバーの名前なので フレームワークの名前 Eliom で呼ぶことにした) 昨日の記事で、 入力値バリデーションに失敗して元のページに戻るとテキストが消えてしまう問題 について書いた. 重要な機能が欠けている気がするのだが、こんなことでせ…