タグ

ブックマーク / camlspotter.hatenablog.com (20)

  • 超簡単にオモチャ LWT を実装してみた - camlspotter’s blog

    OCaml は現時点でマルチコア対応じゃないので、マルチスレッドにしてもマルチコアの恩恵を享受することができません。ですので、OCaml で thread を使う旨みというのは、関数を並行に走らせる事ができるってことだけです。でも並行に走らせる事が出来ればいろいろ便利ですよね。 でもマルチスレッドプログラミングで一番困るのが排他制御。これを上手くやってやらないと、OCaml で type safe なはずなのに、 segfault という事になります。もちろん OCaml プログラマは普段から type safety に慣れきっているので、 type system で保障されない排他制御を完璧に書けるはずがないのです。心が折れます。 そこで、light weight thread。こいつは実は thread じゃありません。要は同一スレッド内でタスク関数をとっかえひっかえ asynchro

    超簡単にオモチャ LWT を実装してみた - camlspotter’s blog
  • List の ; と tuple の , - camlspotter’s blog

    List, Array, Record などの要素区切りの ; はとても奇妙に見えるかもしれない。 OCaml を使っている人でもあまり意識していないのだが、実は一貫性がある。 A ; B は B ; A と書いても型は変わらない A , B は B , A と書くと型が変わる場合がある 例: print_string "hello"; print_string "world" { a = 42; b = "hello" } [ 1; 2; 3 ] [| 1; 2; 3 |] これらの要素を入れ替えても型は変わらない。もちろん意味は変わる場合がある。 例: (1, "hello") (int, float) Hashtbl.t これらの要素を入れ替えると型が変わってしまう。

    List の ; と tuple の , - camlspotter’s blog
    ryskosn
    ryskosn 2024/09/30
    実は一貫性があるという話。自分では気づけなかったな。
  • 1モジュール1データ型主義 - camlspotter’s blog

    OCaml の「1モジュール1データ型スタイル」。このプログラミングスタイルは21世紀に入ってからモジュールを多用する OCaml コミュニティで流行りだしたもので私も採用しています。源流は SML 方面にあると聞きましたが…私自信は確認していません。要出典です。 「1モジュール1データ型スタイル」の意味するところは簡単です: データ型一つ一つにモジュールを一つ一つ作る。 モジュール名は型の意味する名前をつける。人なら Person。 モジュール内で定義するデータ型は常に t という抽象的な名前にする。 t を主対象とする操作はモジュール内で定義する。 ただし、全ての OCaml プログラムはこのように書かれるべし、というものでもありません。 例えば、 OCaml のコンパイラのソースコードはこのスタイルでは全く書かれていません。 「1モジュール1データ型スタイル」の利点は: モジュール名

    1モジュール1データ型主義 - camlspotter’s blog
  • コードレビューについて - camlspotter’s blog

    このところ立て続けにコードレビューについて話をする機会があったので 私が経験した最高のレビュー体制を簡単にまとめておこうと思います。 利点 何故必要か 何が嬉しいのか コスト うまく回すためには何が必要か 細かい運営方法 はっきり言って当たり前の事しか書きません。 私も当時は当たり前のことだと思っていましたから、特に気にもしていなかったのです。 ただ見聞するところによると、これをちゃんとやっているところはとても少ないようです。 ウォールストリート系のファンドでもろくにレビューしてないとかどういうことなんでしょう。 だから時々会社が吹っ飛ぶんですね… 結局は、ああだ、こうだ各論を言っても、ちゃんとやれるのか、それ一点に尽きてしまう話なのですが… 利点 レビューを何のためにするか、それはまず第一に自分達の書いているコードに潜在するバグによる損失をできるだけ少なくすることでしょう。 型システムや

    コードレビューについて - camlspotter’s blog
  • オブジェクトファイルのリンク順 - camlspotter’s blog

    OCaml のオブジェクトファイル(.cmo, .cmx)を並べる順番には意味がある。 順番を間違えると: Reference to undefined global Hogehoge などと言われるので注意。 a.ml: let x = 1 b.ml: let y = A.x c.ml: let z = B.y というソースがあったとする。 a.ml, b.ml, c.ml の順に分割コンパイルする。これは問題ない: $ ocamlc -c a.ml $ ocamlc -c b.ml $ ocamlc -c c.ml さて、これをリンクする場合、依存関係の順にリンクしなければいけない: $ ocamlc -o a.out a.cmo b.cmo c.cmo    # a.out 実行ファイルへとリンク これを間違えると Reference to undefined global Hoge

    オブジェクトファイルのリンク順 - camlspotter’s blog
  • Planck という monadic parser combinator を公開しました - camlspotter’s blog

    Planck: A Small Parser Combinator Library for OCaml I have released Planck, a small monadic parser combinators for OCaml. It includes a proof of implementation: OCaml syntax lexer and a parser which create 100% identical AST as the original OCaml's lex+yacc, and available at https://bitbucket.org/camlspotter/planck . http://camlspotter.blogspot.com/2011/05/planck-small-parser-combinator-library.ht

    Planck という monadic parser combinator を公開しました - camlspotter’s blog
  • omake: OCamlフレンドリーな超強力ビルド ツール - camlspotter’s blog

    omake という make のパチモンみたいなものがある。だが、「おまけ」の癖にこれが素晴らしいツールなのだ。私が仕事でOCamlプログラムを書く時には必ずこれを使う。 念のために言っておくと、OCamlMakefile という、OCaml でよく使う定義を集めた Makefile 集のようなものがあるが、これは omake ではない。omake は超強力 make コマンドだと思ってもらえれば良い。 詳しいチュートリアルを書くつもりはない。それは omake の作者にまかせて、特徴を並べよう: OCamlプログラムをコンパイルする際のルールが既に登録されている。.SUFFIXES: .ml などと書く必要はない。 依存解析が自動かつ強力。依存ルールを書く手間が大幅に減る。 ディレクトリを跨いだプログラムのビルド。依存解析は OMakeroot ファイルの存在するディレクトリを頂点として

    omake: OCamlフレンドリーな超強力ビルド ツール - camlspotter’s blog
  • オブジェクトは OCaml の鬼子 - camlspotter’s blog

    前から言いたかったことでもあるので、釣られてみることにした。(長文) without objects!? より: 継承を使わないのは分かる。オブジェクト使わないってなんだよ!?多相レコード使いたい時にJSCの人々はどうやって書いてるんだ!? なんか、FP vs OOの構図でOO嫌いといいたいのかもしれないけど、こーゆー激しく誤解を生みそうな話を広めないでほしい。JSCの人々はせっかくすばらしい仕事して影響力あるんだから。 はい、OCamlにおけるオブジェクト、クラスはとっても大事だと思います。というか、オブジェクトなしでOCamlのプログラミングなんて考えられません。別に惹玖先生の肩を持つとかそーゆー意味でなく、純粋に技術的に。 これは誤解でも何でもありません。J社 ではオブジェクトは使っていないようです。Caml team でもまずオブジェクトは使いません。Jacques Garrigu

    オブジェクトは OCaml の鬼子 - camlspotter’s blog
  • OCaml 標準ライブラリ探訪 #2 List : スタックと計算量に注意 - camlspotter’s blog

    関連リンク: OCaml 標準ライブラリ探訪 第0回 その他の回は第0回のトラックバックよりご覧ください。 やあこんにちは。ちょっとショッキングなことがあってブルーな筆者です。他にも 3kg は一瞬で減量できたんですがね、そこから先がなんともです。まーみなさんには関係有りませんね。 標準ライブラリ探訪第二回は List です。このモジュールは関数型言語で最も基的な再帰データ型である list 型のデータを扱う関数群からなっています。 OCaml では list は predefined な型で、その定義は標準ライブラリにはなく、コンパイラにとって既知になっています。(詳しい内部定義は ${srcdir}/typing/predef.ml にあります。) が、あえて、list 型の定義を書いてみると、次の様な variant型として書く事が出来ます: type 'a list = | []

    OCaml 標準ライブラリ探訪 #2 List : スタックと計算量に注意 - camlspotter’s blog
  • モジュールを「拡張」するテクニック - camlspotter’s blog

    すとっどりぶ ご存知のように OCaml の stdlib は「標準ライブラリ」ではありません。「すとっどりぶ」です。大事な事などでもう二度言いますってやつです。これは OCaml コンパイラがコンパイルできる様にするための最小限のライブラリ+ INRIA の人たちの気分で加えた関数から成っています。当然、OCaml をバリバァリ使う人には全く力不足です。「すとっどりぶ」で満足できない人は Jane Street Core や OCaml Batteries Included 等を使うと良いです。 でも、なんだか自分の書いているソフトに外部のライブラリを使って変な依存性を入れるのはどうかなあ、とか、わざわざ巨大な「代替標準ライブラリ」を入れるの面倒だ、という人もいるでしょう。そういう時は自分で「すとっどりぶ」を拡張すればよい。その時に便利な方法をお教えします。 すとっどりぶを拡張する たと

    モジュールを「拡張」するテクニック - camlspotter’s blog
  • 金融と OCaml - camlspotter’s blog

    関数型言語というと金融で流行っている、特に OCaml と言えば金融御用達関数型言語として語られることも多い。金融業界に関数型言語を持ち込み成功した最初の二社 LexiFi とJane Street Capital は共に OCaml を採用し、そして二社とも今日成功しているからだ。 今回はそのうち LexiFi について話したい。私が Ph.D を取った後、一年間、産業ポスドクとしてお世話になった会社である。 金融派生商品(デリヴァティブ)は様々な日時や条件、依存する別の商品価格によって価値が変化する。デリヴァティブは先物やオプションなどのような一般市場でも流通している簡単な派生商品だけでなく、会社間でだけで取引される非常に複雑な物もある。これらの商品にはそれぞれ業界内で通用する名前が付けられ取引、評価、管理が行われてきた。そしてこれらを扱うプログラムもまた、それぞれの商品ごとに別個の機

    金融と OCaml - camlspotter’s blog
  • Monad にしちゃう functor を通して今時の OCaml モジュールプログラミングを俯瞰 - camlspotter’s blog

    これは私用の覚え書きを適当に整形したもの(というか Sphinx で hatena 記法にしただけだけど)。だから他の人が読んで判るように全く書いていない。OCaml や ML のモジュールシステム、 value polymorphism、さらには relaxed value polymorphism、そして日語を知っている人に、ならば何か役に立つかもしれない。多分地球上で数十人もいない。まあいいや。これ見てウヘェ、と思うなら例えば F# みたいな ML モジュールシステムを放棄して class 階層を採用した言語とか、 Haskell みたいな type class でモジュールを実現したのとかを使うか、それとももっと超カッコいいナントナクヒューリスティックで便利キワマルな型推論補助のついたモジュールシステムを考えて OCaml に足して公開すればいい。正直私もここまで来ると ML モ

    Monad にしちゃう functor を通して今時の OCaml モジュールプログラミングを俯瞰 - camlspotter’s blog
  • OCaml の let と let rec はなぜ別扱いになっているのか、決定版、もしくは OCaml 暦十何年だったか忘れたけど仕事で Haskell を一年使ってみた - camlspotter’s blog

    はじめに断っておくが、全部Pros/Consのあるデザインチョイスなので、こうじゃなきゃいけないってことではない。ただ、 OCaml はこの選択をした、そいう事だ。 前回の「経験15年の OCaml ユーザーが Haskell を仕事で半年使ってみた」 http://d.hatena.ne.jp/camlspotter/20101212/1292165692 のような易しい文章ではないのでわからない人はとことん判らないだろう。まあ勘弁して欲しい。 あと、面倒だろうが、読む人は全部常体を敬体にして最後に「と思います」をつけて読んでくれ。ください、と思います。 Shadowing は便利であると思っている OCaml の let は非再帰なので以前定義された名前に別の値の束縛をオーバーライドできる。OCaml の人はこれが便利だと思っており皆普通に使っている。詳しくは http://d.hat

    OCaml の let と let rec はなぜ別扱いになっているのか、決定版、もしくは OCaml 暦十何年だったか忘れたけど仕事で Haskell を一年使ってみた - camlspotter’s blog
  • Effective ML 9ヶ条 - camlspotter’s blog

    私の前のボスのハーバードでの講演のビデオが公開されました: http://ocaml.janestcapital.com/?q=node/82 彼は早口ですが、まあ頑張って聞いてください。普通に判れば、アメリカで普通に仕事できます。判らなくても仕事できますから安心してください。 正直、この Effective ML 9ヶ条と Jane Street Core のソースコードを見れば、 Jane Street での関数型プログラミングの秘訣は大体抑えられると言ってよいでしょう。学問的には新しいことは何もありませんが、徒党を組んで関数型言語によるプロジェクトを行うには重要な物ばかりです。 この、Effective ML 9ヶ条をまとめておきました。これを見ながら視聴すると良いかもしれないです。オリジナルは 00:47:13 で見れますね。 コードライタよりもリーダの意見を尊重せよ。大体において

    Effective ML 9ヶ条 - camlspotter’s blog
  • Swift について - camlspotter’s blog

    普段パクリにはうるさそうな連中が Apple 様がパクルとスルーして嬉しそうにしているので、ああ所詮はそういう人達なんだなあと思って拝見しております。 元祖 Swift parallel scripting language: http://swift-lang.org/ アイコンまでクリソツなのでもう駄目ですね。 まあ元祖が Hello world の例さえ動かないのはちょっと悲しいですね…

    Swift について - camlspotter’s blog
    ryskosn
    ryskosn 2014/06/13
  • Real World OCaml が出ました - camlspotter’s blog

    一昨年から少しずつ書かれていた OCaml プログラミングの、 Real World OCaml (以下 RWO)がついに public beta になり公開されました。 ( https://realworldocaml.org/beta1/en/html/ ) 版元の O'Reilly ではこのベータ版の状態の e-book が 今なら安く手に入ります。完全版には後から無料でアクセスできるように なるそうです。( http://shop.oreilly.com/product/0636920024743.do ) !!!!!安く買いたい人は http://shop.oreilly.com/category/deals/early-release.do?code=WKERRLS をよく読んでね!!!!! このは、今まで外に伝わりづらかった OCaml プログラミングの最前線の一面を 伝

    Real World OCaml が出ました - camlspotter’s blog
  • キャミバ様が id:ymotongpoo を木人形にされるようです - camlspotter’s blog

    事の次第 @camlspotter「めんどくせ、あいつに押し付けよ… @camloeba「おれには強く型付けされたコードが必要だ! あらゆる実験にたえうる木人形がな!ぶつぶつ‥ @camlspotter: 「キャミバ様、実はこんなものが… @camloeba「ほう… … ||||||:::::::;:::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::|     | |::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::||||||| |||||::::::::::/   ●   \:::|    |:::/   ●   \::::::::::||||||| |||::::::::;;;;;;;──────;;;;;;;;|    |;;;;;;──────;;;;;;;;;;:::::|||||| |;;;;;;;

    キャミバ様が id:ymotongpoo を木人形にされるようです - camlspotter’s blog
    ryskosn
    ryskosn 2014/05/29
    OCaml 勉強したくなった。
  • 経験15年のOCaml ユーザーが Haskell を仕事で半年使ってみた - camlspotter’s blog

    今の会社に移って半年経ちました。めでたく試用期間終了です。といっても別に試用期間中に密かに首を切られるような事をしたとか、逆に試用期間が終わったからと言ってこれで定年までのうのうと働ける、という訳ではありません。未来は全く判りません。まあとにかく、一つ区切りがやってきました。 金融を知らないQuantsの仕事 私の職業の肩書きには Quantitatitatitatitative という単語がくっついて超カッコよさそう。普通は Quant というと、金融工学や統計数理に詳しい夜もブイブイいわしている超イケメン20代を想像しますが、私は金融とか全然知らないアラフォーお父さんです。それでも Quant です。お願いですから、私に何を買ったらいいかとか、聞かないでください。金融商品とか買った事ないし。というか、逆に教えて欲しいです。 私のチームは、当の Quant さん達が開発した、金融派生商

    経験15年のOCaml ユーザーが Haskell を仕事で半年使ってみた - camlspotter’s blog
  • OCaml 開発環境について ~ OCaml コンパイラソース付属ツール - camlspotter’s blog

    2012年12月での関数型言語 OCaml コンパイラ一式をインストールした際に付属する「公式」ツール群の紹介を行う。多岐に渡るので、一つ一つの詳しい説明は行わない。各ツールの細かい情報はそれぞれのドキュメントを参照して欲しい。 もし知らないツール名があったらちょっと読んでみて欲しい。もしかしたらあなたの問題を解決するツールがあるかもしれないから。(特に caml-types.el) ★は重要度。五点満点。 外部ツールの紹介はまた今度ね。 錦小路と堺町通のあたりで見かけた。見ただけなんでイタリアンで駱駝なのかはわからない。 OCaml コンパイラ 現時点での公式最新バージョンは 4.00.1。 4.00.1 は基的に 4.00.0 のバグフィクスリリース。 4.00.0 では GADT と 3.12.1 より使い易い first class module が入っている。 このところ OC

    OCaml 開発環境について ~ OCaml コンパイラソース付属ツール - camlspotter’s blog
  • Windows で Emacs 内部 shell をストレスなく動かす = Cygwin + sshd + XMing + VMWare + Ubuntu + Emacs + Tramp + shell-mode - camlspotter’s blog

    たまには殺伐とした噺もいいでしょう。 WindowsEmacs 内部 shell をストレスなく動かすには? 結論から言うとそんなもんねえ。 でもそれじゃ余りに何なので、この三ヶ月間で私が泣きながら辿り着いた方法をご紹介しよう! Cygwin + sshd + XMing + VMWare + Ubuntu + Emacs + TRAMP + shell-mode です。病的だけどちゃんと動きます。 Emacs の shell-mode が好き 長年の習慣で Emacs を使っています。別に宗教入ってる訳じゃなくて、色々便利だし、慣れてるから。 Emacs には shell-mode (M-x shell) というのがあって、 Emacs 内部で interactive shell が立ち上がる。履歴は全部バッファーに残るし、コピペも Emacs 内でできるから便利。もちろん皆さん使

    Windows で Emacs 内部 shell をストレスなく動かす = Cygwin + sshd + XMing + VMWare + Ubuntu + Emacs + Tramp + shell-mode - camlspotter’s blog
  • 1