Sodium - Functional Reactive Programming (FRP) library for multiple languages This is based on Flapjax, Yampa, scala.React and a number of other Functional Reactive Programming efforts, as well as a lot of personal experience. Enjoy. Status: C++ - complete, but the memory management is not quite right yet - in separate sodium-cxx repository C# - complete (source in dotnet folder, binaries in Sodiu
というタイトルで、先日、社内の公開セミナーで話しました。 発表資料はこちら。 Haskellのテストフレームワークとベンチマークフレームワークがよくできているので、 これをC++でも使えるんじゃないかという内容です。 概要 背景として、QuickCheck をもっと多くの人に知って/使って貰いたいというのがあります。 QuickCheckは、普段から使っている人間からすると、よくいろいろなバグを拾ってくれるとても便利なものなのですが、 残念ながら普段開発に利用しているC++には相当のもので完成度の高いものが見当たりません。 だからといって、そこから作るためにC++のテンプレートをいじくりまわすには、私はもう老いてしまいました (与えられた関数にランダムな入力を与えるだけなら簡単なのですが、ジェネレータを自由にいじれる機能がやはり欲しいところで)。 そう思った時に、FFIを使えてQuickC
つーか、fold の弱点として、言語によって引数の順番がまちまちで、 正直憶えきれないってのがあるんだよな。誰か対応表とか作ってくれんもんか。 jijixi's diary - fold, map, for-each この中から一つ選ぶとしたらどれ? 確かにいろいろとややこしいのでまとめてみました。 いくつかの言語について大雑把に表にすると次のような感じ。 言語 関数 Haskell, OCaml, Scheme, Erlang foldl* f init items C++ accumulate(begin, end, init, f) Ruby*, JavaScript items.inject(init, f) Python, Perl* reduce(f, items [, init]) 言語 畳み込む二項演算 Scheme(SRFI)*, Erlang f(item, acc)
cgenとはC++をHaskellから呼び出すためのヘルパープログラムです。 http://anttisalonen.github.com/cgen/ C++はC言語と違ってシンボル名がマンドリングされているので、そのままでは呼び出せません。 その解決の方法として、C言語のラッパを書く必要があります。 cgenはそのCのコード自動生成するプログラムです。 インストール cabal install cgen Cコード生成 cgenはc++ヘッダーファイルからcのヘッダーとソースファイルを作成します。 $ cgen -o c --header=Animal.h --header=Dog.h \ --header=Sheep.h cpp/Dog.h cpp/Sheep.h cpp/Animal.h C++継承グラフ作成 grgenコマンドでc++のソースから継承グラフを表現するファイルを作成しま
mkotha さんに直してもらったりして、Haskellのコードはだいぶ速くなりました。どうも2重ループの内側がボトルネックのようなので、そこを展開して、データ構造も変えて、UNPACKプラグマは効くので残して、正格評価を1ヶ所だけ。性能と可読性のバランスがそこそことれたかなと思ってます。C++ や F# のコードにも同じような改修を加えたら、Haskell はまた抜かれてしまいました。まぁでも、目くじら立てるほどの差でもないので、そのままにしています。 実行環境が Windows というアドバンテージがあるとはいえ、C++ も超える F# の健闘が光ります。明示的な副作用がない関数プログラミングでこれだけ速いとうれしい。コード書いてても気持ちがいいし、Microsoft でなければもっと流行っていいはず。 最終形のコードを以下に載せておきます。 ついでに Scala でも書いてみました。
この記事はHaskell Advent Calendarのために書いたものです。 FFIでCの関数を呼び出すところまではすんなりいったので、次C++行ってみよう!として ドハマりしたという内容です。 C++でクラスを作成して、ラッパー関数を書き、Haskellから呼び出すという手順でやってみます。 とりあえず何も考えずに以下のコードを書きました。 point.h point.cpp wrapper.cpp main.hs /* point.h */ class Point{ public: Point(int, int); int getX(); int getY(); private: int x, y; }; /* point.cpp */ #include "point.h" Point::Point(int x, int y){ this->x = x; this->y = y;
Abstract This page describes some of the black magic needed to call C++ from Haskell (on Linux, compiled with g++). I refer to it as the "The Hard Way" because it is a tedious, hand done method of generating C++ bindings. The information on this page is pretty spotty and probably wrong in places. But hopefully it will be of some use. You may also want to look at hacanon-light. It is currently unma
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
Installation Note: you need Haskell cabal for installing cgen. Install from Hackage: cabal update && cabal install cgen Install from source: $ git clone git://github.com/anttisalonen/cgen $ cd cgen $ cabal configure [--user] && cabal build && cabal install Usage Write an interface file for cgen cgen -o c/output/dir --interface my-interface-file --include path/to/cpp/headers cpp-header1.h cpp-heade
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く