OCaml Weekly News

先週号 上へ 次週号

こんにちは

2026年5月12日から19日までの週の OCaml Weekly News をお届けします。

Table of Contents

hotseat Squava(小さな LablGtk2 デモ)

このスレッドを継続して、Damien Guichard が発表しました

新しい 1.2 バージョンで、引き分けゲームを検出できるようになりました。

https://pastebin.com/DjZ03yPa

コメント募集:既知のセキュリティ脆弱性を持つ opam パッケージへの対応について

Hannes Mehnert が発表しました

皆さんへ、

OCaml セキュリティチームとして、既知のセキュリティ脆弱性を持つ opam パッケージに対してどのような対応をすべきか、ご意見をお聞きしたいと思っています。

一つの方法として、opam-repository 内で available: false とマークすることで、インストール不可にする方法があります(opam ファイルを手動で編集した場合を除く)。

特に OCaml コンパイラについては難しい問題があります。最近の(Marshal に関する)脆弱性は 4.14.3 未満、または 5 以上かつ 5.4.1 未満のすべてのバージョンに影響します。これらのコンパイラをインストール不可にすると、古い OCaml バージョンを必要とする多くのプロジェクトが簡単にインストールできなくなります。特に Marshal の問題は多くの(あるいはすべての?)アプリケーションで表面化しないため、これらのコンパイラのインストールを禁止・困難にすることは適切ではないように感じます。

将来に向けたアイデアとして:

  • セキュリティアドバイザリにおいて、脆弱性のある具体的な関数を注記する(これにより、その関数の使用を自動的に検索できるようになります)
  • アドバイザリデータベースをもとにインストール済みの脆弱なパッケージを検査する "opam audit" 機能を提供する

短期・中期的には、アドバイザリが存在する通常の opam パッケージへの対応方法についてご意見をいただきたいと思います。また、コンパイラパッケージを他と同様に扱うべきか、別扱いにすべきかについても教えてください。

odoc 3.2.1 リリース

Jon Ludlam が発表しました

odoc チームは odoc 3.2.1 のリリースをお知らせします!

ハイライト

  • OCaml 5.5.0 サポート

    odoc は OCaml 5.5.0 に対してコンパイルし、ドキュメントを生成できるようになりました(@panglesd、@xvw、#1406)。

  • OxCaml サポート

    @lukemaurer と @art-w のおかげで、odoc は OxCaml をネイティブにサポートするようになりました(#1399)。現時点では非常に基本的なサポートですが、OxCaml の各種機能への完全なサポートはすでに進行中です。興味がある方は PR 一覧をご覧ください!

    一点お知らせがあります:OxCaml はアップストリームの OCaml よりも開発が速いため、各 odoc リリースは単一の OxCaml リリースのみをサポートする可能性が高く、4.08 以降のすべての OCaml をサポートする通常のポリシーとは異なります。OxCaml プロジェクトのドキュメントを生成する場合は、odoc と oxcaml-compiler の対応するバージョンをご使用ください。

追加

  • HTML/KaTeX バックエンドにおける永続的な LaTeX マクロのサポート(@dlesbre、#1391)。
  • markdown-generate コマンドが単一の呼び出しで複数の .odocl ファイルを受け付けるようになり、シェルのループで囲む必要がなくなりました(@davesnx、#1387)。

変更 / 修正

  • 長年にわたるコンパイル時クラッシュ #930 および #1385 を修正しました(@jonludlam、#1400)。
  • Markdown バックエンドは宣言において ocaml を言語 id として使用するようになり、バリアント・レコードをコンストラクタ・フィールドごとに分割するのではなく、コメント付きの単一ブロックにまとめるようになりました。
  • URL のリマッピングがページ参照に対して正しく動作するようになりました(@jonludlam、#1395)。
  • #1396 で説明された条件下でインクリメンタルビルドが壊れなくなりました(@jonludlam、#1402)。
  • --warn-error がすべての警告を確実にエラーに昇格させるようになりました(@jonludlam、#1402)。
  • 多相引数の括弧が欠落しなくなりました(@art-w、#1404)。
  • OCaml 5.5.0 における base に依存するパッケージのドキュメント生成が壊れるリグレッションを修正しました(@jonludlam、#1426#1427)。
  • merlin-lib に依存するパッケージのドキュメント生成が壊れるリグレッションを修正しました(@jonludlam、#1429#1430)。

インストール

opam update
opam install odoc

使用方法

odoc_driver を使ってパッケージのドキュメントをローカルでビルド・テストし、ocaml.org 上での表示を確認してください。

Odig と Dune は従来通り動作します。変更は不要です。odoc 3.x のすべての機能への完全なサポートは Dune で作業が進められています。

謝辞

今回のリリースにコード、レビュー、バグ報告、テストで貢献してくださったすべての方に感謝します:@art-w、@davesnx、@dlesbre、@jonludlam、@lukemaurer、@panglesd、@xvw、そして記載漏れがあった方々にも感謝します!

問題がありましたら、いつでも github にご報告ください。

OCaml.org のジョブボードに OCaml の求人を掲載しましょう

このスレッドを継続して、Daniel Lamping が発表しました

採用中の求人情報を投稿させてください。

Cammy Stories:小さな OCaml ウェブコミックの実験 🐫

Ramiro Checa-Garcia が発表しました

皆さん、こんにちは。

最近、技術的なトピックをもう少し視覚的で親しみやすいものにする方法を実験していたところ、気がつくと Cammy Stories という小さな趣味プロジェクトになっていました。

これはラクダのマスコット(「Cammy」)を主人公に、Dune、OPAM、Merlin、Odoc などエコシステムでおなじみの顔をキャラクターやチームメンバーとして登場させた、OCaml に関する短いコミックのコレクションです。

正式なチュートリアルやドキュメントを作るのではなく、バリアント、functor、並行処理、Dune のスタンザ、OPAM スイッチなど、学習・探索する中で興味深いと感じた OCaml のトピックを遊び心のある視覚的な説明で伝えることを目的としています。

ほとんどの画像は AI 画像生成ツールを使って何度も繰り返しながら作成しました。時には驚くほどよい結果になることもありますが、テキストが意味をなさなくなったり、突然ハートが出てきたりすることもあります。制作プロセス自体が面白くて興味深いと思ったため、ボツになった下書きも多く公開しています。

関数型プログラミングのコミュニティはかなり技術的でシリアスという印象がありますが、より視覚的でコミュニティ主導のアプローチがこうしたアイデアを少し親しみやすくするのに役立てればと考えています。これはその方向への小さな実験です。

技術的な誤りや誤解を招く部分があるかもしれないので、フィードバックは大歓迎です。将来のトピック、フォーマット、概念についての提案もお待ちしています。

現在、ほとんどのページには各コミックがどのように作られたかについての小さなメモ、サイドコメント、短いストーリーも含まれています。プロジェクトはまだ議論と実験の段階にあるためです。

楽しんでいただければ幸いです 🐫

MlFront_ProgressZig - Zig 互換プログレスツリー

jbeckford が発表しました

MlFront_ProgressZig の公開をお知らせします。インストール手順、ドキュメント、例は以下をご覧ください。

TLDR:プログレスバーを一般化したプログレスツリーをレンダリングします。目玉機能は、互換性のある子・孫プロセスなどからのプログレスデータをもとに単一のプログレスツリーをレンダリングできることです(2番目・3番目の例を参照)。MlFront_ProgressZig は Zig の progress 標準ライブラリのポートで、Windows の改善と zig プロセスとのプロトコル互換性を持ちます。モチベーションとアルゴリズムは https://andrewkelley.me/post/zig-new-cli-progress-bar-explained.html にあります。このポートは当初 AI を活用して作成されました。progress.zig へのプロンプトはこちらの1行目から始まります。Cabinet(政府)データはこちらの218行目から始まります

例:通常のプログレスツリー

内容 アニメーションリンク
1975年以降の閣僚 https://asciinema.org/a/NWc2vbPeRQuOyGAa
OCaml が zig ビルドを起動 https://asciinema.org/a/Tu9ofrH3ekKUCyLk
OCaml が OCaml を起動し、さらに OCaml を起動 https://asciinema.org/a/Tdtt52iQqSsIXcku

少なくとも Windows では、zig の親プロセスが OCaml/zig の子プロセスからデータを収集できないバグがあるようです。そのため「zig が OCaml を起動する」例はありません。

例:パフォーマンスモニタリング

以下は私のシングルスレッドビルドシステムのスナップショットです。コールスタックの重要な部分がプログレスツリーに追加されています(基本的に関数の前後に startend_ を配置しています):

$ ./dk0 distribute CommonsBase_Std-dist-win32 --library 'CommonsBase_Std@2.5.999911122233' dist-win32.u

[signify] New build key pair in t/k/build.pub and t/k/build.sec ...
[signify] Distribute key pair among trusted coworkers only!
►0/2] distribute CommonsBase_Std-dist-win32
   └─ [2/5] prepare distribution
      └─ [29/32] get-object CommonsBase_Std.Toybox@0...
         └─ dl toybox-aarch64@toybox sz 806K
            └─ landley.net/toybox...oads/binaries/0.8.9
               └─ [0/1] MiB downloaded

「►」ツリーが10秒以上更新されないことで、landley.net/toybox ウェブサーバーから 806K の小さなファイルをダウンロードするだけでパフォーマンスが大幅に低下していることが分かりました。

0.5秒以上かかるパフォーマンスのボトルネックを簡単に特定できます。

パッケージ

  • MlFront_Progress:4つのバックエンドのいずれかと組み合わせて使用できる API。「サイレント」および「プレーン」バックエンドを含む。
  • MlFront_ProgressZig:zig 互換バックエンド(高リフレッシュレート)
  • MlFront_ProgressPeriod:プログレスツリーを定期的にコンソールに出力するバックエンド。

ドキュメントは https://dkml.gitlab.io/build-tools/MlFront/ にあります。

インストール方法

opam キュー(https://github.com/ocaml/opam-repository/pull/29918)に登録済みですが、AI スレッドの問題が解決するまでリリースされない見込みです。最新版のインストールは以下のコマンドで行えます:

for pkg in MlFront_Progress MlFront_Core MlFront_Lua MlFront_ZipFile UnifiedScript_Std MlFront_Thunk MlFront_Console MlFront_ProgressZig; do
  opam pin add $pkg https://gitlab.com/dkml/build-tools/MlFront/-/releases/permalink/latest/downloads/MlFront.tar.gz
done

(いくつかのファイルに「AI」について記載していますが、それは自分自身のためであり、狭い範囲で適用し、管理下に置いています。また、パッケージに「AI 支援/AI 生成」などのラベルを半永久的に付けることが賢明だと言う弁護士は(少なくともアメリカには)ほとんどいないと思うので、そのような方針が新たに設けられた場合は opam リポジトリへの登録を見送ります。)

お楽しみください!

loo - lua of ocaml

Ben が発表しました

こんにちは

タイトルにある通り、OCaml(バイトコード)を Lua(lua5.1)にコンパイルするプロジェクトです。このプロジェクトは AI によって生成されており、ocaml-ai-disclosure プロジェクトで説明されている方法を用いて完全に開示しようとしました:

https://github.com/maltasea/lua_of_ocaml

過去の CWN

CWN を見逃した場合は、メッセージを送っていただければメールでお送りします。また、アーカイブRSS フィードもご覧いただけます。

毎週メールで受け取りたい場合は、caml-list を購読してください。