プログラミング in OCaml 〜関数型プログラミングの基礎からGUI構築まで〜 著者 五十嵐淳 著 発売日 2012年8月29日 更新日 2016年4月29日
さて、お約束していた OCaml の型エラーメッセージ改良のための改造、ある程度形になりましたので、公開します。 hg clone -b typeloc https://bitbucket.org/camlspotter/mutated_ocaml ビルドは configure の後、 make core coreboot world です。インストールなさる場合は既存の OCaml システムを潰さないように注意してください。インストールなしにトップレベルを試したい場合は ./ocaml -I stdlib 。といってもまだコンセプトが理解できる程度にしか動作せずまだまだ不完全です。バグもあるかと思います。 さてここから簡単にアイデアを説明します。MLの型推論についてある程度の知識が必要です。 HM 型システムではプログラムの各所を見ながらそれぞれが要求する型の情報を制約として集め、解の存
プログラマが実務で出会うのは、問題が整理されたキレイな仕事ばかりじゃない。プロダクトに本質的じゃない部分でもプログラムを書く必要に迫られる。いわゆる開発方法論では抽象化されてしまう、今ここにいるソフトウェア開発者の悩みだ。 今日は、私が仕事で書いたOCamlのコードを晒して、如何にOCamlがプログラマの仕事の道具として優れているかを主張したい。泥臭く、関数的でない、エレガントさのかけらもない、生活臭のあるコードだ。勤務先はOCamlをメイン言語として使っている。研究所とかではなく普通に受託開発を生業としている会社だ。OCamlは理論一辺倒で、マニア向けで、現実のソフトウェア開発には使えない、という誤解が万が一あるかもしれないが、全くそんなことはない。 (Haskellもそうだけど、それはまたの機会に) いかにOCamlが優れているかについての概論めいた話は、OCamlを数十人体制で10年
同一のコードから複数のプラットフォーム用の共有ライブラリ(Unix系OSなら.so,Mac OS Xなら.dylib,Windowsなら*.DLL)を作りたい場合,どのプログラミング言語を選ぶべきでしょうか? まず思い浮かぶのがC/C++だと思いますが,もっと「モダン」なプログラミング言語は使えないものでしょうか? 「モダン」なプログラミング言語とは私の考えるモダンなプログラミング言語の要件は以下のとおりです。 オブジェクト指向または関数プログラミングを取り入れていること。リスト,辞書などのデータ構造が言語仕様に組み込まれていること。GCが搭載されていること。segmentation fault が原理的に発生しないこと。2年ほど前にこれらの要件満たし,かつネイティブ・オブジェクトを生成可能なプログラミング言語を探したところ, Lisp/Scheme系の言語と関数プログラミング言語の中から
縦書き文庫をリニューアルする際に開発したテンプレートエンジン「jingoo」をgithubに公開しました。ライセンスはGPLv3です。 https://github.com/tategakibunko/jingoo jingoo はOcaml製のテンプレートエンジンで、jinja2と全く同じシンタックスで、ほぼ全ての機能をクローンしています。 去年あたりにjinja2をgaeで使っていて本当に便利だなあと思ったので「同じものがOcamlにも欲しい!」と思って作りました。 一応、テンプレートをOCamlコードにコンパイルすることも出来ます。 ちなみにコンパイルして動かした場合、まだ単純な比較しかしてませんが、おおよそ二倍速くなりましたが、ゼロコンマの世界で二倍になってもどうせDBの処理時間でチャラなのであんまり意味は無いですね。 ただテンプレートの内容は非公開にしたい、みたいなケー
TypeRex, the OCaml Programming Studio TypeRex is a set of open-source tools and libraries for developing applications in OCaml, edited by OCamlPro. It is currently under development. Libraries and tools are released independantly, as soon as they reach a state where they can be tested and used by users.
このところScalaで言語を実装してみたりしてたんですが、何をしてたかというと、「プログラミング言語の基礎概念」という本に書いてあることを実装してみてたのです。 この「プログラミング言語の基礎概念」、博多駅のところの紀伊國屋に行ったときにたまたま目に入った本で、薄いし1800円だし、こいつはいいぜと思って買ってみたら、非常によい本でした。 どのくらい気に入ったかというと、毎日布団に持って入って3行読んだら熟睡してしまうという気に入りようです。最後の章に入ったあたりでは、もうこの赤い表紙を見ただけで寝入ってしまうという、快適な睡眠に欠かせないアイテムになっていました。 プログラミング言語の基礎概念 ((ライブラリ情報学コア・テキスト)) 作者: 五十嵐淳出版社/メーカー: サイエンス社発売日: 2011/07/01メディア: 単行本購入: 6人 クリック: 60回この商品を含むブログ (12
10. 存在型=型パラメータを隠せる Objective Caml version 3.13.0-gadt (2010-10-22) # type t = 'a list;; Error: Unbound type parameter 'a # type t = List : 'a list -> t;; type t = List : 'a list -> t ’ a が存在型 11. 例えばコンビネーターの型 type 'a event = Return of 'a | Join of 'a event event | Choose of 'a event list | Guard of unit -> 'a event | Wrap of ('b -> 'a) * 'b event あれ?書けないぞ。 12. GADTなら大丈夫 type 'a event = Return : 'a
関数型プログラミング言語とコード生成 HaskellやOCamlなどはコンパイラなどの言語処理系の実装を得意としている。さすがに日常的にコンパイラを実装している人はそう多くないと思うけど、例えばコード自動生成はすぐ試せる割に効き目が大きく、仕事を効率化する方法としてぜひ試してみたい選択肢だ。 今回は、Haskellの言語内DSLからC言語のコードを生成する方法(の一つ)を簡単に紹介する。 この方法で、Haskell上のEDSLを使って (1) C言語のソースコードを生成でき、 (2) Haskellの式として評価できる。 このように、わざわざパーサを書かなくても、コンビネータを適当に作ればすぐにDSLを作ってしまえるのも、関数型言語の魅力かもしれない。 taglessな方法 ただし、ちょっと他と違う方法を試す。 OlegさんのサイトにTyped Tagless Interpretation
js_of_ocaml が熱い。 Google の Dart とか、そんな場合じゃない!! OCaml で書かれたプログラムがなぜか JavaScript に変換され、それがブラウザで動く。 JS で型がついていないオブジェクトでも何となく型をつけて OCamlで型安全に呼び出せる! 既存の JS ライブラリ資産が、ほとんど手間をかけずに、そのまま関数型言語パラダイムで使える! え?よくわからない? http://ocsigen.org/js_of_ocaml/manual/ の demo を試してご覧なさい。これが全部 OCaml で書かれている…! そんなわけで、 js_of_ocaml 体験記。だいたい実際に行っていった Hack を(行き止まりになった失敗枝は刈り去って)なぞっている。あ、ちなみに当方 JavaScript に関してはほとんど知識が無い。JS に関しては用語とか間違
コードを単体テスト可能なよう保つためには色々なやり方がある訳ですが、一番いいのは副作用を分離して局所に押し込めておく手法でしょう。でも、処々の事情によりそんなに綺麗に分離する事もできないので、次善の策としては副作用部分をパラメーター化して別のモックに置き換え可能にしておくというやつがある訳です。そしてOCamlではそのパラメーター化の方法にも幾つかやり方があって、次の4通りの方法が考えられます。 副作用を行う部分を関数化して引数として渡す。 副作用を伴う部分が複数ある時はレコードにして渡す。 レコードの代わりにファンクター経由で渡す。 ファンクターの代わりに第一級モジュールで渡す。 例えばこういうコードを単体テスト可能にしたいとします。(単純化のため省略した関係で殆どなんのロジックもない関数になっていますが、実際にはもう少し条件分岐が入ったコードだと思ってください。) (* 単体テスト可能
Roshan P. James and Amr Sabry show in "Yield: Mainstream Delimited Continuations" the interdefinability of yield-style generators and delimited continuations. Their encoding is at the same time simple and general, and even if the examples given in the paper are in Haskell, their translation into OCaml is straightforward. So much so that the result is essentially equivalent to ASAI Kenichi's OchaCa
OCaml 2010年01月22日 GCC ARM バックエンドの中の O’Caml プログラム GCC のソースツリー中の gcc/config/arm/ 以下には、OCaml という関数型(プログラミングを支援する)言語 ML (Meta-Language) の方言で書かれたプログラムが存在しています。 NEON 命令のためのヘッダ、テストケース、ドキュメントなどを生成するために O'Caml プログラムが使われているようです。 Contents of /trunk/gcc/config/arm/neon-gen.ml Contents of /trunk/gcc/config/arm/neon-schedgen.ml/a> Contents of /trunk/gcc/config/arm/neon-testgen.ml Contents of /trunk/gcc/config/a
Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode
This document summarizes Camomile, a Unicode library for OCaml. It provides a Unicode character type, supports UTF-8, UTF-16 and UTF-32 encodings, and allows conversion between 200+ encodings. It also supports case mapping, collation, and Unicode normal forms to handle equivalent string representations. The library uses functors and lazy evaluation. Modules provide Unicode normalization and canoni
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く