OCaml

KEEP CAML and CURRY ON

by Stefano Bertolo (http://www.flickr.com/photos/stefanobe/3494646364/)

改造 GCaml の書き直しもしくは $Caml #3: $-abs unification を制御する

さて、じゃあ今度は plus と minus を同時に使ってみましょう。 毎度あんまり面白くない例ですが、x + x - x を計算する(つもりの)関数 id を、前回の plus を参考に書いていみます: let plus : $:(d : 'a -> 'a -> 'a) = d let minus : $:(d : 'a -> 'a -> …

今日のOCaml RSS

Type-safe Unmarshalling for Objective Caml http://www.pps.jussieu.fr/~henry/marshal/index.en.html This type-safe unmarshalling does not need any modification of the OCaml runtime, and in particular uses the current format of marshalled val…

パッチ置いといた

パッチはここよ。 リリース段階でも何でもないので。期待しないほうが良いです。コンパイルの仕方は 慣れ 根性 コンパイルできた場合は今までのエントリと gcamltests/*.ml から推測してみて下さい。うまく動かない場合は、おかしいなー、などと思わずに、即…

改造 GCaml の書き直しもしくは $Caml #1: dispatch 周り

まー要するに何かといいますと、type class の dictionary passing とか、GCaml の flow graph dispatch とか、SML# の polymorphic レコードの index passing とか、結構似ているので、dispatch だけ、それを何に使うか特化せずに書いてみたわけ。んでもっ…

改造 GCaml の書き直しもしくは $Caml #0

型レベルプログラミングの会に参加して昔の仕事を色々いじっている内に、いろいろと思うところあって GCaml を再生産しています。といっても取り合えずは型レベル方向じゃ無いのですいません。六年も前にやったことって人間覚えていない、というか、意識的に…

時代は今、Curses へ

caml-list より: Dear caml-list,I'm writting a program and I'd like to set up a menu in a terminal.I'd like to learn from your experience and if possible to be put in a good direction. I'm studying the Curses module but there is a lack of d…

今日のOCaml RSS

なんだか最近新しい話題が多いので気が向いたエントリはまとめておくことにした。 [Caml-list] [ANN] Diamondback Ruby - Program Analysis for Ruby http://www.cs.umd.edu/projects/PL/druby/ Diamondback Ruby (DRuby) is an extension to Ruby that aims…

今日のOCaml RSS: ocamljs と ocaml-lastfm

ocamljs http://code.google.com/p/ocamljs/ Ocamljs compiles OCaml to Javascript. It uses the standard OCaml front-end, so the full language is supported (the object system is partially supported, should be fixed soon).Included are several l…

改造: type class っぽいのもおk

module Num : sig type 'a t val (+) : $:'a t -> 'a -> 'a -> 'a val (-) : $:'a t -> 'a -> 'a -> 'a val int : int t val float : float t end = struct class type ['a] _t = object method plus : 'a -> 'a -> 'a method minus : 'a -> 'a -> 'a end ty…

改造: こんなことが出来るようになった

module Add : sig type 'a t val (+) : $:('a t) -> 'a -> 'a -> 'a val int : int t val float : float t val string : string t val int32 : int32 t end = struct type 'a t = 'a -> 'a -> 'a let (+) $:d = d let int = Pervasives.(+) let float = (+.)…

昔の仕事を引っ張り出してみる。

id:ytqwerty さんが GCaml での type level programming の可能性にチャレンジされていた。正直六年前の事なので覚えていない事が多いし、そもそも type level programming をするつもりの拡張じゃないのでいろいろアレだが勘弁してほしい。全ソースは最後に…

Ruby Strikes Back, then Fails

from Ruby Strikes Back: http://oldmoe.blogspot.com/2009/04/ruby-strikes-back.html ConclusionRuby is faster the OCaml. Wrong! OCaml is a lot faster than Ruby. But thanks to hard work by some prominent Rubyists you can have a Ruby setup that…

recursive module で polymorphic recursion を書く

OCaml 3.12.0 より明示的に型を書くことで polymorphic recursion (多相再帰) が簡単に書けるようになりました: let rec len : 'a. 'a sep -> int = function | Nil -> 0 | Cons (_, sep) -> 1 + 2 * len sep let rec ... in ... で定義される値は、in の後…

let module は expansive ?

# let id = let module M = struct end in fun x -> x ;; val id : '_a -> '_a = <fun>なんでですか?あんまり考えてないってのもあるけど、ヤバイ例が思いつきません。Caml mantis でも、 What you propose is changing the value restriction to accept a local</fun>…

OCaml job at MyLife

マウンテンビューで OCaml 書きたい人はどぞー: http://groups.google.com/group/fa.caml/browse_thread/thread/c4dec74b901191b1?pli=1 うーん、でも何かこの会社のサービス、会員登録しようとしたら ZIP コード必須だし、無料サービスほとんどないし、残念…

改造中

$label が省略された場合、外側の let で自動的に $-abstract される。 # let f $x y = x,y;; val f : $x:'a -> 'b -> 'a * 'b = <fun> # let g = prerr_endline "hello"; f 1;; (* let g $x = prerr_endline "hello"; f $x 1 になる *) val g : $x:'a -> 'a * in</fun>…

次バージョンから、OCaml のランタイムが HLVWになることに決定

本日、OCaml チームの内部ディスカッションメーリングリスト caml-dev で、次の OCaml のバージョン(3.1415) から、現行のバイトコードコンパイラを廃止して、その代わりに Jon Garrop 氏の開発する HLVW へのバイトコードコンパイラを提供すると OCaml コン…

Autoconf を OCaml プロジェクトで使う

良さげなメモがありました。 http://rwmj.wordpress.com/2009/03/31/using-autoconf-for-ocaml-projects/

MiniLight renderer: OCaml で raytracer を書いたら C++ より早くなりました、という話

MiniLight renderer cleanup, simpler (safer) code is faster MiniLight という簡単な global illumination renderer は、そのアルゴリズムが C++ や OCaml を始め、7種類の言語で実装されています。そのコード行数と速度を比較。その OCaml での実装が幾つ…

バグを見つけた

?? という予約語が lexer に定義されているが、parser で使われていない。 なので、?? という binary operator が定義できない。問題ないのに。

改造中

やっぱ ?$label はかっこ悪いので $label にした。副作用: let f $(x:int) = ... とは書けない $ を binary op として使いたい場合は x $ y のようにちゃんとスペースを入れなければならない $ を lexer token にしないための苦肉の策だが、まーそれでえーや…

改造中

~label, ?label に加えて、 ?$label という新しいラベルを導入した。 ほんとは $label がいいんだけど、そうすると $ を予約記号にせにゃならん。

Caml Trading at CMU を聞いた

Yaron Minsky の Caml Trading(http://ocaml.janestreet.com/?q=node/61) を全部聞きました。POPL2008 に彼が招待された時の話と基本的には同じです。それにいくつかMLを知らない人のための ADT と pattern matching の話が加わっているといった感じでしょう…

Caml Trading talk by Ron Minsky

http://ocaml.janestreet.com/?q=node/61 はい、この陽気なおっちゃんが俺のボスです。 全部見てませんが、POPL2008 での話と大体同じスライドを使っているようです。 Summer Project の話も少しあるみたい。

(relaxed) value restriction を回避する pure magic

よいこは読んではいけません。Obj.magic の話です。よいこは寝てください。、、、、、、、、、はい、悪い子しかいませんね。じゃあ、Obj.magic の話をしましょう。Obj.magic は関数なので、適用された結果は expansive です。なので、結果が polymorphic に…

null ?!?!

F# のことを勉強しようかと思ったが、至るところ null があるって聞いた時点で、萎えた。誰か私にそれは嘘だから元気を出せと言ってください。

泥沼化する Objective Caml Programming Language

http://d.hatena.ne.jp/camlspotter/20090302/1235953483 の続きです。 これは、もう、、、こじれにこじれてますね。 Jason Hickey の言い分(一部): The current text is submitted and ready for publication since Jan 2008, but it has been delayed. Mr.…

Haskell っぽい prelude.ml

prelude.ml は Haskell っぽいイディオムで OCaml プログラムを書くためのモジュールです。 使ってません。ざぁっと見てみました。 Haskell にあって OCaml に無い関数群沢山定義 OCaml の stdlib にある関数名を Haskell 風の物に変更 まぁそんな印象です。…

Objective Caml Programming Language に関する議論、続報

http://d.hatena.ne.jp/camlspotter/20090228/1235791057 の続きです。細かくフォローするつもりはなかったんだけど、もう一方の当事者からのポストが来たので。Tim Rentsch が彼から見た経緯を caml-list に説明しています。(http://caml.inria.fr/pub/ml-a…