OCaml Weekly News
こんにちは
2026年5月5日から12日までの週の OCaml Weekly News をお届けします。
Table of Contents
Dune 3.23.0
Shon が発表しました
Dune チームは dune 3.23.0 のリリースを発表できることを嬉しく思います。
多数のバグ修正と改善に加え、主なハイライトは以下の通りです。
- `foreign_stubs` における
c_library_flagsのサポートを追加 (#13484, @madroach) - @rgrinberg による promotion および diffing 機能の多数の改善。
- 上記に関連して、promotion ロジックに破壊的変更が導入されました。Dune は生成された opam ファイルを自動的に promote しなくなり、
dune promoteで手動での promotion が必要になります。.opamファイルのビルドは@install、@runtest、@opamエイリアスで起動できます。リリースモードでは.opamファイルはまったく生成されず、ソース内にあるものがそのまま使用されます (ocaml/dune#14108, @rgrinberg)。 - ユーザールールとインラインテストランナーがデフォルトでサンドボックス化されるようになりました (ocaml/dune#13805 および ocaml/dune#14257, @rgrinberg)。
- dune をビルドするために必要な OCaml の最低バージョンが 4.14 になりました。
すべての新機能とバグ修正、および実現に貢献してくださった方々への帰属については完全な変更履歴をご覧ください。コントリビューターの皆さん、ありがとうございます!
このリリースで問題が発生した場合は、issue トラッカーにご報告ください。
Orcaset: コードによる財務モデル
Jordan が発表しました
皆さん、こんにちは。コードで財務諸表モデルを構築するためのライブラリ orcaset を紹介します。
Orcaset は、エージェントに財務分析のための堅牢なツールを提供することを目指しています。Claude および Codex の Excel ツールとの比較テストに基づくと、トークン数を約 40% 削減しながら、モデルのエラー率が低下することが確認されています。モデルのスケール(例:orcaset でのコンポーネント再利用のしやすさ)に応じてこの差は広がると予想していますが、数百の行項目を持つモデルを超えた深いベンチマークはまだ行っていません。
主にプライベートエクイティとクレジットの観点から構築されていますが、それらの業界に固有のものは特にありません。
雰囲気をつかんでいただくため、以下に非常にシンプルな例を示します。
open Orcaset
open Series
let offset = Offset.make ~quarters:1 ~month_end:true ()
let periods = Period.make_seq ~start:(Date.make 2026 1 1) ~offset |> Seq.take 4 |> List.of_seq
let revenue_proj =
List.mapi (fun i period -> (period, 100.0 *. (1.03 ** float_of_int (i - 1)))) periods
(* モデルを定義 *)
let revenue = Spans.of_list ~label:"Revenue" ~split:Split.daily ~agg:Agg.sum revenue_proj
let costs = Spans.scale ~label:"Costs" (-0.45) revenue
let income = Spans.sum ~label:"Income" ~agg:Agg.sum [ revenue; costs ]
(* 財務諸表を構築して出力 *)
let () =
let stmt = Stmt.span_total income (Stmt.span_lines [ revenue; costs ]) in
let resolved = Stmt.eval_periods periods stmt in
Printf.printf "\n%s\n\n" (Stmt.fixed_width resolved)
(* 出力:
2026-04-30 2026-07-31 2026-10-31 2027-01-31
Revenue 97.09 100.00 103.00 106.09
Costs -43.69 -45.00 -46.35 -47.74
---------- ---------- ---------- ----------
Income 53.40 55.00 56.65 58.35 *)
計算は完全に監査可能です。行項目の関係は静的に検査でき、マテリアライズされた値間の依存関係もトレースできます。依存関係は循環することができるため、リボルバープラグを簡単にモデル化したり(あるいは 20% のリターンを目標に売上成長を逆算したりすることも可能です。伝統的にそういうものです)。
実験的なものですが、フィードバックやご提案をいただければ幸いです!
Miou、OCaml 5 向けのシンプルなスケジューラ
Calascibetta Romain が発表しました
miou.0.6.0 のリリースをお知らせできることを嬉しく思います。このリリースでは主に以下の 2 つの新機能が追加されています。
- Miou のイベントロギングシステム
Miou.orphansで利用可能なタスクを取得するための新しいMiou.take関数
ロギングシステムの追加により、Miou に関連するイベント(新しいタスクの作成など)を記録し、基本ルール(子を決して忘れないなど)に準拠していない Miou アプリケーションを診断するためにこれらのイベントを分析できるようになります。そのため、以下のいくつかのツールを提供しています。
mtbox.recd:perfetto.dev などのソフトウェアを使って Miou アプリケーションを分析できるよう、Miou イベントを JSON 形式で記録します。mtbox.diag:Still_has_childrenのような例外(ルールのいずれかへの違反から生じる)で Miou アプリケーションが終了する理由を説明します。mtbox.mtop:Miou アプリケーションを監視するためのhtopスタイル の TUI を提供します。例はこちらでご覧いただけます。
mtbox は実験的(初回リリース)ですが、Miou でできることを示しており、現在は Miou と lwd を使って独自の TUI アプリケーションを構築するための nott{y,ui}-miou ライブラリも提供しています。
Miou.take の追加は、httpcats ライブラリと νιϝ Web Framework が提供する HTTP スタックにより関連したものです。いくつかの追加とバグ修正とともに、特に HTTP サーバーの再現可能なベンチマークを提供することに取り組み、その結果はこちらで公開しています。
つまり、この Miou リリースに加えて、Miou エコシステムのための HTTP スタックを提供すべく httpcats、vif、hurl のメンテナンスと改善を続けています。
最後に、皆さんもご存じのとおり、Miou を使った OCaml によるユニカーネル開発の実験を続けており、このリリースには mkernel(ユニカーネル向けスケジューラ)、mnet(TCP/IP スタック)、mhttp および vifu(ユニカーネル向け HTTP スタック)のリリースも伴っています。さらに msendmail(メーリングリスト ptt@mailingl.st のデプロイのために最近リリース)、mfat(OCaml による FAT32 ファイルシステム)、mnet-dns も加わっています。現在、(既存のユニカーネルに加えて) OCaml 5 で新しいユニカーネルを提供できるようになりました。
ptt:メーリングリストの管理(こちらで発表済み)annuaire:再帰的 DNS リゾルバおよびスタブ DNS リゾルバ(バンリスト付き)として動作contruno:Let's Encrypt 証明書とその更新を管理する TLS ターミネーションプロキシ- そしてもちろん
immuable:静的ウェブサイト(特に https://mailingl.st および https://docs.osau.re のサイト)の配信を可能にするユニカーネル
ユニカーネルの開発方法を学ぶためにチュートリアルをご覧いただき、デプロイには Albatross プロジェクトをお勧めします。
要約すると、Miou を中心としたエコシステムを徐々に整備し、私たちのスケジューラでアプリケーションを開発できるライブラリをますます多く提供しています。Miou の開発に直接・間接的に貢献してくださった皆さん、そして私たちのエコシステムを構成するライブラリの改善を助けてくださった皆さんに感謝申し上げます。ぜひ参加して、質問し、そして何より、ハッキングを始めてください!
Happy hacking!
実行時型:用途とニーズ
Raphaël Proust が質問しました
これは、さまざまなユーザーからの実行時型への関心を測るための非公式なアンケートです。これが何についてかわからない場合は、lexifi の funocaml でのトーク、特に型リフレクションのセクション(動画のタイムコード:33:00、スライド番号:32)を確認してください。
質問内容
お好きな形式でお答えください :)
型リフレクション / 実行時型 / 何と呼ぼうとも、使っていますか?使っていない場合、Stdlib や確立されたエコシステムのライブラリに含まれていたら使いますか?
社内ソリューションや既製のライブラリを使っていますか?(コードを見せていただけますか?)
何のために使っていますか?何のために使いたいですか?
コンパイラサポートなしでも有用だと思いますか?これを実用的にするためにはどのようなツールが必要でしょうか?
理由
これらのものが何度も再実装されているのを見てきました(私自身もいくつか実装せざるを得ませんでした)。すべてのユースケースを完全にカバーする Stdlib モジュールが存在できるかどうかはわかりませんが、このアンケートと続く議論から、ユースケースの大部分がカバーできることが明らかになるかもしれません。
これが Stdlib に存在してほしいと思っていますが、プロトタイピング段階を出る前に失敗するような提案をしたくはありません。
過去の CWN
CWN を見逃した場合は、メッセージを送っていただければメールでお送りします。また、アーカイブやRSS フィードもご覧いただけます。
毎週メールで受け取りたい場合は、caml-list を購読してください。