Skip to content

Instantly share code, notes, and snippets.

@dbuenzli
dbuenzli / bigbytes.ml
Last active October 21, 2023 01:24
Bigarray mmap RW
(* SPDX-License-Identifier: CC0-1.0 *)
let bigbytes_of_file ?(trunc = false) ?length access file =
let module Bigarray = Stdlib.Bigarray (* OCaml < 5 install woes *) in
let flags, shared = match access with
| `R -> Unix.[O_RDONLY], false
| `RW -> Unix.(O_CREAT :: O_RDWR :: if trunc then [O_TRUNC] else []), true
in
let fd = Unix.openfile file flags 0o644 in
let finally () = try Unix.close fd with Unix.Unix_error _ -> () in
@dbuenzli
dbuenzli / work_queue.ml
Created October 30, 2022 13:08
Webworker work queue
(*---------------------------------------------------------------------------
Copyright (c) 2022 The brr programmers. All rights reserved.
Distributed under the ISC license, see terms at the end of the file.
---------------------------------------------------------------------------*)
open Brr
open Brr_webworkers
open Brr_io
module type WORK = sig
@dbuenzli
dbuenzli / buffer_add_json.ml
Created October 11, 2022 13:32
Buffer.add_json function
(* Simple Buffer.add_json function. *)
type json =
[ `Null | `Bool of bool | `Float of float | `String of string
| `Array of json list | `Object of (string * json) list ]
let rec buffer_add_json b = function
| `Null -> Buffer.add_string b "null"
| `Bool bool -> Buffer.add_string b (if bool then "true" else "false")
| `Float f -> Buffer.add_string b (Printf.sprintf "%.16g" f)
@dbuenzli
dbuenzli / trojansource.ml
Last active November 8, 2021 01:07
Trojan source for OCaml
(* OCaml Port of fig. 5-6 of https://trojansource.codes/trojan-source.pdf *)
let access_level = "user"
let main () =
if access_level <> "user‮⁦ (* Check if admin *)⁩⁦" then
Printf.printf "You are an admin.\n"
let () = main ()
@dbuenzli
dbuenzli / uunf_data.ml
Created September 17, 2021 13:04
Uunf data
(*---------------------------------------------------------------------------
Copyright (c) 2015 The uunf programmers. All rights reserved.
Distributed under the ISC license, see terms at the end of the file.
---------------------------------------------------------------------------*)
(* WARNING do not edit. This file was automatically generated. *)
open Uunf_tmapbool;;
let v000 = snil
@dbuenzli
dbuenzli / opam #4445
Created December 19, 2020 09:50
opam #4445
> opam switch create 4.06.0 --debug-level=3
00:00.003 GSTATE LOAD-GLOBAL-STATE @ /Users/dbuenzli/.opam
00:00.004 SYSTEM LOCK /Users/dbuenzli/.opam/lock (none => read)
00:00.004 SYSTEM LOCK /Users/dbuenzli/.opam/config.lock (none => write)
00:00.004 FILE(config) Read ~/.opam/config in 0.000s
00:00.005 RSTATE LOAD-REPOSITORY-STATE @ /Users/dbuenzli/.opam
00:00.008 FILE(repos-config) Read ~/.opam/repo/repos-config in 0.003s
00:00.008 SYSTEM LOCK /Users/dbuenzli/.opam/repo/state.cache (none => read)
00:00.108 RSTATE Loaded /Users/dbuenzli/.opam/repo/state.cache in 0.099s
00:00.264 SYSTEM LOCK /Users/dbuenzli/.opam/repo/state.cache (read => none)
@dbuenzli
dbuenzli / landmark.md
Created October 22, 2020 21:40
How to landmark
echo 'true : package(landmarks.ppx,landmarks)' >> _tags
export OCAML_LANDMARK=auto
topkg build 

topkg run exe

@dbuenzli
dbuenzli / ocaml-deprecate.md
Last active November 11, 2019 12:00
Deprecation procedure for OCaml

Deprecation procedure for OCaml

In order to deprecate a feature from the OCaml system the following steps are taken:

  1. Introduce a workaround for the deprecation (if needed). Document the workaround, see below.
  2. When Debian stable has the version in which the workaround was introduced, start deprecating the feature with a visible warning
@dbuenzli
dbuenzli / readmeta.ml
Last active October 15, 2019 16:33
Read cma/cmxa/cmxs link metadata
(*
ocamlfind ocamlopt -o readmeta -linkpkg \
-package dynlink,compiler-libs.optcomp,compiler-libs.bytecomp readmeta.ml
*)
let read_cma ic =
let lib =
let toc_pos = input_binary_int ic in
seek_in ic toc_pos;
(input_value ic : Cmo_format.library)
@dbuenzli
dbuenzli / ocamlib.md
Last active August 22, 2022 07:38
OCaml compiler support for library linking