タグ

ocamlに関するclavierのブックマーク (19)

  • 自作OCamlコンパイラでセルフホストした - molecular coordinates

    概要 ここ最近作っていたOCaml*1コンパイラmlml*2でセルフホストを達成しました。ヤッター github.com mlmlには以下に代表されるような、OCamlの基的な機能が実装されています。 再帰関数 ヴァリアント、レコード パターンマッチ カリー化 モジュール また、多少の標準ライブラリも実装されています。 mlmlの特徴 ほぼフルスクラッチ 今回LLVMやパーサジェネレータに頼らないコンパイラづくりを体験するのが目的の一部だったので、結果的にフルスクラッチらしきこと*3になりました。OCamlの標準ライブラリ以外の外部ライブラリを使用しておらず、字句解析器・構文解析器は手書きです。 OCamlで書かれている セルフホストしたのでそれはそうなんですが、OCamlで書かれています。 また、言語処理系を書く場合ランタイムライブラリはC言語で用意してリンクする場合が多いと思いますが

    自作OCamlコンパイラでセルフホストした - molecular coordinates
  • OCaml入門の手引 | POSTD

    OCamlを学ぶには、まず何から手を付けたらいいでしょうか? あなたなら何をしますか? 私はこれまで、恐らく10数回はOCamlを覚えようとしました。そして手を付けては諦め、また付けては諦めの繰り返しで、ついには数えるのをやめてしまったくらいです。 でも、今回は続いています。ひょっとすると、コミュニティそのものに何か根的な変化があったのかもしれません。 私にとって功を奏したのが実際は何だったのか、以下に考察してみたいと思います。 役に立つは? 『 Real World OCaml (以下、RWO)』がお勧めです。というよりも、 それ以外にお勧めはありません 。RWOは、私の生涯の中でも1、2を争うことができるくらいのコンピュータ言語解説書です。 ちなみに、その他にも解説書はありますが、大体が不正確な内容を含んでいるか、あるいはフランス語で書かれているかなので、 読まない 方がいいでしょ

    OCaml入門の手引 | POSTD
  • Beginner's guide to OCaml beginner's guides.

    Computer "scientist" Alex Clemmer is a computer programmer. Other programmers love Alex, excitedly describing him as "employed here" and "the boss's son". Alex is also a Hacker School alum. Surely they do not at all regret admitting him! personal site @hausdorff_space github.com/hausdorff RSS feed [Translation available in Japanese] So you want to learn OCaml. Where do you start? What do you do? I

    Beginner's guide to OCaml beginner's guides.
  • Extension Points, or how OCaml is becoming more like Lisp

    (OCaml 4.02 is entering a feature freeze, which makes it a good time to stop and take a look at what to expect for this release. This is the first of a few blog pots where I’ll describe the features that strike me as notable.) OCaml’s metaprogramming story is kind of messy. The good news is that OCaml has an effective metaprogramming system. It’s called camlp4, and before complaining about it, I w

    Extension Points, or how OCaml is becoming more like Lisp
  • OCaml 基礎最速マスター - mayah.jp

    OCaml は Haskell とは違って純粋でない関数型言語です。ML (Meta Language) という言語ファミリーの方言の一つで、フランスの INRIA という研究所で開発されています。速度を稼ぐために命令型のように書こうと思えば書けるし、遅延評価もデフォルトではしません。その分、practical なアプリケーションが書きやすくなっています。 他の言語をある程度知っている人はこれを読めば OCaml のとりあえずの基礎をマスターして OCaml を書くことができるようになります。多分。関数型言語の知識は仮定していません。C/C++ ぐらいの知識があれば読めると思います。元の Perl 基礎文法最速マスターではリファレンスぽい作りですが、チュートリアルぽくなってしまいました。 なお、読んでいると分かりますが、色々とめんどくさいことが多いように感じます。しかし、これをちゃんと書く

  • 第7章 型や型クラスを自分で作ろう 前編 - Rejasupoem

    すごいHaskell楽しく学ぼう輪読会とは 経緯 2012年にSICP読書会に参加していてとてもためになったという話をしたのがきっかけで、社内でコンピュータサイエンスの勉強会をやろうということになりました。 そこで、2013年夏に社内でどのを教科書にするかアンケートをおこないました。 教科書の候補に上がった 計算機プログラムの構造と解釈(SICP) 言語:Scheme Web上での問題の解答の多さ(すくなくとも日語での)は、他を圧倒してる。 関数プログラミング入門(IFPH) 言語:Haskell SICPよりちょっと難しい。一番最初にやるではない感じ(ってえらい人が言ってました)。 プログラミングの基礎 言語:Ocaml 著者による解答例あり。いまSICPを読むのは時間の無駄 – きしだのはてな プログラミング言語の基礎概念 言語:Ocaml 「プログラミング言語の基礎概念」とい

    第7章 型や型クラスを自分で作ろう 前編 - Rejasupoem
  • プログラムを書く順番とテスト駆動開発について - Line 1: Error: Invalid Blog('by Esehara' )

    下のを読んでいた。 プログラミングの基礎 (Computer Science Library) 作者: 浅井健一出版社/メーカー: サイエンス社発売日: 2007/03メディア: 単行購入: 17人 クリック: 409回この商品を含むブログ (105件) を見る このはどういうかといえば、OCamlという、関数型言語と呼ばれる中でも、あまり有名ではないほうの言語(というと失礼だけど)を使ってプログラミングの基礎を学ぶという。そういうと、OCaml好きな人には怒られるかもしれないけれども。 良いにしろ、悪いにしろ、関数型言語の特徴は、個々のパーツを作って云々という部分が非常にクリアーになっているところであるな、とは思う。というのも、下手に「代入」を使わないことによって、むしろデータ操作の流れがクリアになるし、余りに大きいパーツにしてしまうと、そもそもその流れ自体がよくわからなくなる

    プログラムを書く順番とテスト駆動開発について - Line 1: Error: Invalid Blog('by Esehara' )
  • ClojureではじめるSTM入門

    4. STMとは Software Transactional Memory ソフトウェアトランザクショナルメモリは、データベーストラン ザクションに似た並行性制御機構であり、並列計算を行う際の 共有メモリへのアクセス法である。 この機構はロックベースの同期を用いた並行性制御の代替手段と して機能し、ノンブロッキングな方法で実装される物もある。 Wikipediaより 楽観的: 他のスレッドを気にせずとりあえず実行してみる 変なことになったらリトライする 最近盛んに研究されている(らしい) 5. ロックの利点と欠点 利点 いつロックを取得し、解除するかを陽に制御できる 開発者にとって馴染みがある方法 多くのプログラミング言語でサポートされている 欠点 ロックのとる順序によってデッドロックが起こる 優先度逆転が起こる composableでない

    ClojureではじめるSTM入門
  • Parsecのソースちら見(1)〜(3) - Pixel Pedals of Tomakomai

    Parsecのソース読んでQiitaにメモった。 Parsecのソースちら見 Parsecのソースちら見(2) Parsecのソースちら見(3) 最初に全体構造さえ掴めれば比較的読みやすい内容。 let ... in がhaskellにしては多いのかなと思ったのだけど*1、もしかすると作ってるのOCaml文化の人だったりするのかな。 *1:個人的には上から読めるのでlet ... inの方が好き

    Parsecのソースちら見(1)〜(3) - Pixel Pedals of Tomakomai
  • 最強OCamlでセッション型を実現 - keigoiの日記

    この記事は OCaml Advent Calendar 2012 の 18日目の記事です。 OCamlでセッション型を実装した、というお話です。ちょっと時間がないので簡潔に書いています。 ソースはこちら セッション型 セッション型とは: 通信チャネルの型です プライベートな二者間のメッセージ送受信が整合していることを保証してくれます。(定義によっては多者間) 例えば let thread1 () = send c "Hello"; send c 123 という関数は文字列と整数をチャネルcに送るが (send c vはチャネルcに値vを送るプリミティブとする。以下同様)、 let thread2_bad () = let i = recv c in let j = recv c in print_int (i+j) は整数を2つチャネルcで受けるため(recv cはcで受信した値を返す)、

    最強OCamlでセッション型を実現 - keigoiの日記
  • OCamlとCoqを連携してIO処理をモナディックに扱う - にわとり小屋でのプログラミング

    この記事は OCaml Advent Calendar の5日目の記事です。 OCamlと連携して、CoqでもIO処理ができるようにするためのライブラリを作った。 http://github.com/yoshihiro503/coqio このライブラリを使えば、例えば次のようなコードを書くことができる。 Require Import Monad IO. Open Scope string_scope. Definition main : IO unit := do _ <- print "Hello" ; println ", world!". Haskell風のdo式みたいな記法が便利だね。print関数には文字列だけでなく、Showクラスのインスタンスとなる型を持つ式ならばなんでも与えることができる*1。 このコードを次のコマンドでExtractすればcoq.mlというOCamlのソー

    OCamlとCoqを連携してIO処理をモナディックに扱う - にわとり小屋でのプログラミング
  • OSXへOCamlの開発環境構築し直した - tmaeda 日記(2012-10-28)

    _ OSXへOCamlの開発環境構築し直した 今年はOCamlの4.0系が出たり、opamというかなりイケてるパッケージ管理システムが出て来たりしたので、 OCamlの開発環境を作り直した。 typerex というのも今年出たので気になってるんだけど、私の環境では3.12.1ではビルドが通らないし、 4.00.1だとビルドは通るけど、emacsとサーバーが通信始めると例外が起きるので、様子見中。 というわけで、相変わらずtuaregなのであった。 前提とする環境は以下。 MacBook Air 11inch 2012 OSX 10.7.5 Lion Xcode 4.5.1 GNU bash 3.2.48(1) Emacs 23.3.1 anything.el 1.287(sprk2012でhelm.elを見て、そろそろhelm.elに移行してもいいのかなーと思ったけど、まだめんどくさくてや

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

    プログラマが実務で出会うのは、問題が整理されたキレイな仕事ばかりじゃない。プロダクトに質的じゃない部分でもプログラムを書く必要に迫られる。いわゆる開発方法論では抽象化されてしまう、今ここにいるソフトウェア開発者の悩みだ。 今日は、私が仕事で書いたOCamlのコードを晒して、如何にOCamlがプログラマの仕事の道具として優れているかを主張したい。泥臭く、関数的でない、エレガントさのかけらもない、生活臭のあるコードだ。勤務先はOCamlをメイン言語として使っている。研究所とかではなく普通に受託開発を生業としている会社だ。OCamlは理論一辺倒で、マニア向けで、現実のソフトウェア開発には使えない、という誤解が万が一あるかもしれないが、全くそんなことはない。 (Haskellもそうだけど、それはまたの機会に) いかにOCamlが優れているかについての概論めいた話は、OCamlを数十人体制で10年

    実務で使うOCaml - 泥臭い仕事をサクっとこなす方法 - keigoiの日記
  • 等差数列 - タイトル

    目標 配列の隣接する2項にそれぞれ演算を施した配列を得たい。つまり、 f (+) [1,2,3,4,5] = [3,5,7,9] のような f が欲しい。 結果 OCaml はオワコンだった (こうすればうまく書けるよ、というのがあれば教えてください) 愚直(Haskell) f g [] = [] f g [_] = [] f g (x:y:zs) = g x y : f g (y:zs) Haskell f g x = zipWith g x (tail x) F# let uncurry g (a, b) = g a b let f g x = Seq.map (uncurry g) (Seq.pairwise x) Ruby keyesberry さんより def f(x) x.each_cons(2).map{|y,z| yield(y,z)} end Ruby(無理やり) de

    等差数列 - タイトル
  • OCamlでモナドっぽいものを作る | 黒曜の吹き溜まり

    ライブラリの拡充と関数型言語のお勉強を兼ねて、モナドっぽいものを実装して見ました。 単純にモナドをOCamlで使いたいだけならMonad拡張を入れる方が手っ取り早いですが、あまり外部ライブラリへの依存性を入れたくないのと、OCamlの記法の中だけでどこまで出来るか試してみたかったので。 ちなみに誤解を避けるため先に断っておきますが、自分はHaskellerではありません。 以下ではモナドに関してHaskellをかなり参考にしていますが、Haskellのモナドに対する勘違いなどが含まれている可能性があります。 ご了承下さい。 とりあえず、インターフェースとなるシグネチャから作っていきます。 (* 型付きモナドのシグネチャ *) module type TypedMonadType = sig type 'a t val empty : 'a t val singleton : 'a -> '

  • なぜ次に学ぶ言語は関数型であるべきか - YAMAGUCHI::weblog

    はじめに こんにちは、Python界の情弱です。ちょっと前にOCaml系のエントリを色々と眺めていたらYaron Minsky氏のエントリを見つけたので翻訳してみました。 OCaml for the Masses - ACM Queue Yaron Minsky氏はJane Streetで第一線で活躍されるエンジニアで、Jane Streetの技術ページをはじめ多くの場所でOCamlに関しての知見を語ってくださっています。 Jane Street Tech Blogs エントリはJohn Hughesの名エントリ「なぜ関数プログラミングは重要か」を受けてACM Queueに寄稿されたものの日語訳です。 なぜ関数プログラミングは重要か Why the next language you learn should be functional YARON MINSKY, JANE STREE

    なぜ次に学ぶ言語は関数型であるべきか - YAMAGUCHI::weblog
  • The Programming Languages Zoo

    About the zoo The Programming Languages Zoo is a collection of miniature programming languages which demonstrates various concepts and techniques used in programming language design and implementation. It is a good starting point for those who would like to implement their own programming language, or just learn how it is done. The following features are demonstrated: functional, declarative, obje

  • OCaml 標準ライブラリ探訪 #2 List に関するおわびとおことわり - camlspotter’s blog

    関連リンク: OCaml 標準ライブラリ探訪 第0回 その他の回は第0回のトラックバックよりご覧ください。 「さようなら」周り等で、ご批判を頂きました。ありがとうございます。元来の毒舌な者ですから、ご勘弁ください。教科書や論文を書いてるわけでも無し、このブログはお酒飲んで常に勢いで書いておりますから、深く推敲いたしません。こんなの出版しても売れないでしょ? 関数型言語では (ここで関数型言語と限定する必要は無いのかもしれませんが、他の言語のことは良く判りませんので語るべきでは無いでしょう)、 再帰ははっきり言って難しい概念で、これは逃げずに強調すべき点だと考えます。こんな感じに言い換えてみると私の強調度がわかるのでは無いでしょうか: Cでポインタ理解したくない?お互い不幸になるだけですから、ポインタの無い言語を使ってください。ごきげんよう。 私は自称「関数型言語できます」という方にはこの十

    OCaml 標準ライブラリ探訪 #2 List に関するおわびとおことわり - camlspotter’s blog
  • Objective Caml 入門

    Objective Caml 入門 五十嵐 淳 京都大学 工学部情報学科計算機科学コース 大学院情報学研究科知能情報学専攻 e-mail: igarashi@kuis.kyoto-u.ac.jp October 24, 2002

  • 1