タグ

ocamlに関するemonkakのブックマーク (61)

  • OCaml 5.0のEffect Handlerのチュートリアルをやりはじめた - Arantium Maestum

    12月16日にOCaml 5.0が正式にリリースされた。 目玉機能としてはMulticoreサポートで、以前はPythonなどと同じくGlobal Interpreter Lockがあって複数スレッドでCPUバウンドな計算が同時に実行できなかったのを、ガベージコレクタをはじめとしたランタイムの大幅な更新により並行計算が可能となった。 それに関連してEffect Handlerという機能が入った。これは並行処理にも使えるが応用範囲は非常に幅広い機能で、まだ構文や型システムが決まりきっていないので実験的にライブラリとして使えるようになっている。モナドなどと似た、さまざまな副作用や制御フローを統一的に扱える機能で、正式採用されればOCamlプログラムの書き方が大きく変わる可能性もあり、私も含めた一部界隈ではMulticore以上に注目されている印象。 その新機能のチュートリアルがあるのでやりはじ

    OCaml 5.0のEffect Handlerのチュートリアルをやりはじめた - Arantium Maestum
  • 簡単な型システムを実装していく1 序文 - Arantium Maestum

    最近は言語処理系に関してまったく手を動かしていなかった&ブログに何も書いていなかったので練習がてら・・・ Types and Programming Languagesには非常にたくさんの型システムの実例と関連したOCamlコードが載っている。ただし多くは写経したらそのまま実行できるものではなく、またに載っている型システムすべてについて実装が載っているわけでもない。 著者Benjamin Pierceの大学関連のホームページにTaPLのサイトがありそこにはほぼすべての型システムのテストコードなども含んだ完全形とも言えるソースがある: www.cis.upenn.edu これらを一つ一つDL・解凍して読んでいくのもいいのだが(というかやった)、 TAPLの実装、GitHubに載ってたんだ。これはパッと見直すのに便利そうhttps://t.co/48hdtVtQ19— zehnpaard (

    簡単な型システムを実装していく1 序文 - Arantium Maestum
  • OCamlコンパイラのバックエンドを提供するMalfunctionが面白そう - Arantium Maestum

    OCamlのDiscuss掲示板を眺めていたらこんなプロジェクトについての言及があった: github.com Malfunction is a high-performance, low-level untyped program representation, designed as a target for compilers of functional programming languages. OCamlコンパイラの中間表現であるLambda言語(とほぼ同等のもの)を受け取り、OCamlバイトコードかnativeコードへのコンパイルをしてくれるようだ。 (追記:バイトコードにコンパイルできるというのは間違い。実際にはOCamlコンパイラとは別なLambda言語インタプリタがある) Lambda IRはOCamlコンパイラにフラグを渡すと出力してくれる。以前少し調べていくつか記事

    OCamlコンパイラのバックエンドを提供するMalfunctionが面白そう - Arantium Maestum
  • Writing a Game Boy Emulator in OCaml

    IntroductionFor the past few months, I have been working on a project called CAMLBOY, a Game Boy emulator written in OCaml that runs in the browser. You can try it out on the following demo page: Demo Page I included several homebrew ROMs in the demo, so please try them out (I recommend Bouncing ball and Rocket Man Demo). You can also play with it in your mobile browser as it runs at 60 FPS on rec

    Writing a Game Boy Emulator in OCaml
  • OCaml でゲームボーイエミュレータを書いた話 - Qiita

    はじめに ブラウザ上で動くゲームボーイエミュレータを OCaml で書きました。以下のページで試せます。 デモページ いくつかの homebrew ROM も一緒になっているのでいろいろ遊んでみてください。おすすめは「Bouncing ball」と「Tobu Tobu Girl」です。最近のスマホならだいたい安定して 60 FPS 出るはずなので、スマホでも遊べます。 レポジトリはこちらです。 スクリーンショット なぜ OCaml でゲームボーイエミュレータ?新しいプログラミング言語を学ぶ過程で以下のように思ったことはないでしょうか? 簡単なプログラムなら書けるが、中規模以上のコード1をどうやって書けばよいのか分からない 発展的な言語機能2も勉強しなんとなく理解した気になったが、実践のなかでどのように活用すればいいのかが分からない OCaml を格的に勉強し始めてた数ヶ月前の筆者はまさに

    OCaml でゲームボーイエミュレータを書いた話 - Qiita
  • Dream — Tidy, feature-complete web framework

    let hello who = <html> <body> <h1>Hello, <%s who %>!</h1> </body> </html> let () = Dream.run @@ Dream.logger @@ Dream.router [ Dream.get "/" (fun _ -> Dream.html (hello "world")); ] Dream is an easy-to-use, boilerplate-free Web framework, whose entire API fits on this page! It supports TLS, WebSockets, and GraphQL. HTTP/2 support is transparent. It also includes: a nice log and OCaml runtime confi

  • Caramel: massively scalable, type-safe applications

    caramel is a functional language for building type-safe, scalable, and maintainable applications Install Docs Discord Code

    Caramel: massively scalable, type-safe applications
  • ML系言語で型注釈が必要なケース - Qiita

    ML系言語は型推論が得意なので基的には型を書かなくてもコードを書けますが、状況によっては型注釈が必要になります。代表的なML系言語3つ(SML, OCaml, Haskell)について、それぞれ型注釈が必要になる(型注釈がないとコンパイルが通らない)ケースを挙げてみます。 なお、ここでは型システムのみに注目し、評価戦略はどうでもいいので、Haskellも「ML系言語」に含めています。 また、MLのモジュール/ファンクター周りは扱いません。コア言語のみを対象にします。 SML SMLで型注釈をなくすとコンパイルが通らなくなるのは、例えば以下の例です: 組み込み演算子やリテラルのアドホックなオーバーロード レコードを受け取る関数 リテラルの例: val x: IntInf.int = 12345678901234567890123; (* 型注釈を剥ぐとダメ: val x = 1234567

    ML系言語で型注釈が必要なケース - Qiita
  • OCamlとCoqでブロックチェーンプログラミング

    2019年7月29日、Opt Technologiesが主催するイベント「Fun Fun Functional (2) 関数型言語Lightning Talks!!」が開催されました。関数型プログラミングについて楽しく学び、知見を共有することを目的に開催されている勉強会。今回は6名のエンジニアが、関数型プログラミング言語にまつわるユニークな発表を行いました。プレゼンテーション「OCamlとCoqでブロックチェーンプログラミング 」に登壇したのは、yoshihiro503氏。 OCamlとCoqでブロックチェーンプログラミング yoshihiro503氏(以下、yoshihiro503):みなさんこんにちは。こういう鶏のアイコンのyoshihiro503です。今日「OCamlは良いぞ!」という話をします。株式会社ドワンゴのDMC開発部に所属しています。 簡単に自己紹介を

    OCamlとCoqでブロックチェーンプログラミング
  • OCamlで正規表現を微分する - fetburner.core

    僕の所属する研究室では毎年Software Foundationsの輪講をやっているんですが,Brzozowski derivativeに基づいて正規表現エンジンを実装し,あまつさえCoqで検証してしまおうといった練習問題が追加されていて大変興味深かったです. 折角practicalなプログラムを書いたのにCoqの中に閉じ込めておくのも勿体ないですし, OCamlで同様の正規表現エンジンを実装し,実行速度を見てみようと思います. *1 2018/12/16 Brzozowski derivativeの定義に誤りがあったため修正 Brzozowski derivativeとは? ある正規表現が受理する言語の先頭から,文字を取り除いて得られる言語 *2を受理する正規表現をBrzozowski derivativeといい,以下のようにsystematicに求められます. ある正規表現が空文字列を

  • Deep learning experiments in OCaml

    Last year we held a machine learning seminar in our London office, which was an opportunity to reproduce some classical deep learning results with a nice twist: we used OCaml as a programming language rather than Python. This allowed us to train models defined in a functional way in OCaml on a GPU using TensorFlow. Specifically we looked at a computer vision application, Neural Style Transfer, and

    Deep learning experiments in OCaml
  • ML_Day#2を開催しました - type t (* void *)

    ML Day#2を開催しました。 ML勉強会という名前にしていたときから数えて通算4回目です。 今回もドワンゴさんのセミナー室をお借りしました。 この規模のセミナー室が便利に利用できるのは当に助かります。 発表の紹介 発表枠6 + LT枠5のあわせて11もの発表がありました。発表者の皆様に感謝です。 他のコミュニティだと割と発表者の確保に苦労しておられるようですがML勉強会からあまり困ったことがありません。 以下の紹介は私の理解ですので何か訂正があったらツイとかで指摘ください。。。 ラベルなしオプション引数のための型システムと型推論 unlabeled-opt-args.pdf - Google ドライブ 最初はSATYSFIでお馴染みの@bd_gfngfnさんの発表でした。 この発表はSATYSFI向けに、オプション引数のための型システムと型推論を考えてみたという話でした。 Latex

    ML_Day#2を開催しました - type t (* void *)
  • Unix system programming in OCaml (2014)

    Unix system programming in OCamlXavier Leroy and Didier Rémy1stDecember , 2014 © 1991, 1992, 2003, 2004, 2005, 2006, 2008, 2009, 2010 Xavier Leroy and Didier Rémy, inria Rocquencourt. Rights reserved. Consult the license. Translation by Daniel C. Bünzli, Eric Cooper, Eliot Handelman, Priya Hattiangdi, Thad Meyer, Prashanth Mundkur, Richard Paradies, Till Varoquaux, Mark Wong-VanHaren Proofread by

  • 数理科学的バグ撲滅方法論のすすめ 第4回 関数型言語とオブジェクト指向,およびOCamlの"O"について

    関数型言語とオブジェクト指向は相容れない,という説をよく聞く。たしかに「オブジェクトは状態を持つ」「関数型プログラミングでは,できるだけ破壊的代入を行わない」とすれば,二つの概念は矛盾しているようにも思われる。また,技術的観点以外にも,「とかくシンプルさを好む多くの関数型言語プログラマが,何かと物事を複雑にする(と思われている)オブジェクト指向を嫌っている」という面があるかもしれない。 しかし,個人の好き嫌いはさておき,実際問題として,関数型言語とオブジェクト指向は大いに関係がある。むしろ,基礎理論については,ほとんど同じコミュニティの人たちが取り組んでいる,と言ってもいい。例えば,以下のような研究が,1980年代から現在に至るまで行われている。 関数型言語のモデルであるλ計算という体系において,オブジェクトを表現する研究(参考リンクなど) λ計算にならい,(プロトタイプベースの)オブジェ

    数理科学的バグ撲滅方法論のすすめ 第4回 関数型言語とオブジェクト指向,およびOCamlの"O"について
  • GitHub - gfngfn/SATySFi: A statically-typed, functional typesetting system

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - gfngfn/SATySFi: A statically-typed, functional typesetting system
  • 関数適用、関数から評価するか?引数から評価するか? | κeenのHappy Hacκing Blog

    κeenです。簡単にいうと「OCamlが関数の引数を右から評価する件について」。 これは他人から聞いた話なのですがよく目にするので文章として纏めておきます。 OCamlは仕様では評価順序は未定義とし(らしい)つつも現在の実装(4.06.0)は引数を右から評価します。 追記 丁度読んでいたので参考情報です。OCaml の関数適用の評価順序が not specified と名言しているのは、 https://t.co/0Zd6Cl7Qgy の Function application の項だと思います。(識者の方によると仕様はないそうですが…) — takl (@takl) 2018年2月24日 /追記 (* OCaml *) # let f x y = ();; # f (print_endline "1st") (print_endline "2nd");; 2nd 1st - : uni

    関数適用、関数から評価するか?引数から評価するか? | κeenのHappy Hacκing Blog
  • ocaml-zippy-tutorial-in-japanese/leopard_syntax.md at master · camlspotter/ocaml-zippy-tutorial-in-japanese

    この数年、私の余暇のOCaml遊びは主にPPXをいじることだったのですが、 PPXは手軽ですが限界があって、思いついたアイデアがPPXだけでは難しかったり、 実装できなかったりしました。 そこで、今年から、またOCamlコンパイラ体を細々といじるようになりました。 プロジェクト名は OCamleopard (和名は「大麒麟(おおきりん)」)。 紹介するインデントルールは数年前にOCaml 4.02.1でまず実装したもので、 それを引っ張り出してきてOCaml 4.05.0の改造であるOCamleopard 4.05.0に適用、 それからOCaml4.06.0が出てしまったのでOCamleopard 4.06.0にポートしたものです。 OCamleopardには、こんなのがOCamlにあったらいいなと言うもので わりと楽に実装できるが、多分家には入らないだろうな、というものを 思いついて

    ocaml-zippy-tutorial-in-japanese/leopard_syntax.md at master · camlspotter/ocaml-zippy-tutorial-in-japanese
  • OCaml でも採用されているレベルベースの多相型型推論とは - はやくプログラムになりたい

    言語実装 Advent Calendar 2017 の16日目の記事です. GoCaml という OCaml のサブセットな言語を実装していて,多相型の型推論を実装するために論文を読んだり OCaml の実装をちょっと追ったりしていたので,その知識を整理する意味でこのエントリを書いています. この記事では OCaml の型推論器のベースになっている「レベルベースの多相型型推論アルゴリズム」について概略を直感的に説明しようと思います. 理論的になぜこのアルゴリズムで正しく動作するのかについてはこの記事で概要を把握した上で論文 のほうを読んでいただければ理解が速いと思います. また,この記事では最もシンプルな単相型のHM型推論については知っている前提で書きます. ご存知でない場合は, 住井先生の MinCaml の型推論実装の解説 五十嵐先生の型推論の解説 20日目の@uint256_t さん

    OCaml でも採用されているレベルベースの多相型型推論とは - はやくプログラムになりたい
  • OCaml標準ライブラリのList.sortを読む - fetburner.core

    この記事はML Advent Calendar 2017の10日目(!?)のために書かれました. 皆さんOCaml標準ライブラリのList.sortは使っていますか? 頻繁にリストに対してのソートを行うようならデータ構造かアルゴリズムを考え直した方が良いでしょうが,競プロの様にちょっとしたプログラムを書く時には僕もよくお世話になります. マニュアルによると,そのList.sortはマージソートで実装されているようですが,僕のような者がちょっとやそっと工夫した程度では敵わないような最適化が施されています.今回はそのソースコードを読んでみましょう. まず,OCaml 4.06.0のlist.mlから引っぱってきたList.sortのソースコードを見ていきましょう. (** sorting *) let rec merge cmp l1 l2 = match l1, l2 with | [],

    OCaml標準ライブラリのList.sortを読む - fetburner.core
  • FacebookがReason 3でReasonMLの構文を変更

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    FacebookがReason 3でReasonMLの構文を変更