From 2a59e35a59a18075fdc26581af9b44998a1db444 Mon Sep 17 00:00:00 2001 From: c-cube Date: Wed, 8 Nov 2023 17:22:30 +0000 Subject: [PATCH] deploy: f50ffe989158ee3a9afd4e4ca625f156c3999d1a --- dev/either/Either/index.html | 2 +- dev/either/index.html | 2 +- dev/moonpool/Moonpool/Atomic/index.html | 2 +- .../Moonpool/Blocking_queue/index.html | 2 +- .../Moonpool/Bounded_queue/index.html | 2 +- dev/moonpool/Moonpool/Chan/index.html | 2 +- .../For_runner_implementors/index.html | 8 ++++ dev/moonpool/Moonpool/Fifo_pool/index.html | 8 ++++ dev/moonpool/Moonpool/Fork_join/index.html | 2 +- .../Fut/Infix/argument-1-_/index.html | 2 - dev/moonpool/Moonpool/Fut/Infix/index.html | 2 +- .../Moonpool/Fut/Infix_local/index.html | 2 - dev/moonpool/Moonpool/Fut/index.html | 2 +- .../Moonpool/Fut/module-type-INFIX/index.html | 2 - .../For_runner_implementors/index.html | 8 ++++ .../Moonpool/Immediate_runner/index.html | 2 + dev/moonpool/Moonpool/Lock/index.html | 2 +- .../Pool/For_runner_implementors/index.html | 8 ---- dev/moonpool/Moonpool/Pool/index.html | 15 ------- .../Runner/For_runner_implementors/index.html | 4 +- dev/moonpool/Moonpool/Runner/index.html | 2 +- dev/moonpool/Moonpool/Suspend_/index.html | 5 --- .../Moonpool/Thread_local_storage/index.html | 2 + .../For_runner_implementors/index.html | 8 ++++ dev/moonpool/Moonpool/Ws_pool/index.html | 8 ++++ dev/moonpool/Moonpool/index.html | 2 +- dev/moonpool/_doc-dir/README.md | 45 ++++++++++++------- dev/moonpool/index.html | 2 +- dev/ocaml/Afl_instrument/index.html | 2 +- dev/ocaml/Alias_analysis/index.html | 2 +- dev/ocaml/Allocated_const/index.html | 2 +- dev/ocaml/Annot/index.html | 2 +- dev/ocaml/Arch/index.html | 2 +- .../Make/argument-1-S/Key/Map/index.html | 2 +- .../Make/argument-1-S/Key/index.html | 2 +- .../Make/argument-1-S/Value/index.html | 2 +- .../Arg_helper/Make/argument-1-S/index.html | 2 +- dev/ocaml/Arg_helper/Make/index.html | 2 +- dev/ocaml/Arg_helper/index.html | 2 +- dev/ocaml/Asmgen/index.html | 2 +- dev/ocaml/Asmlibrarian/index.html | 2 +- dev/ocaml/Asmlink/index.html | 2 +- dev/ocaml/Asmpackager/index.html | 2 +- dev/ocaml/Ast_helper/Attr/index.html | 2 +- dev/ocaml/Ast_helper/Cf/index.html | 2 +- dev/ocaml/Ast_helper/Ci/index.html | 2 +- dev/ocaml/Ast_helper/Cl/index.html | 2 +- dev/ocaml/Ast_helper/Const/index.html | 2 +- dev/ocaml/Ast_helper/Csig/index.html | 2 +- dev/ocaml/Ast_helper/Cstr/index.html | 2 +- dev/ocaml/Ast_helper/Ctf/index.html | 2 +- dev/ocaml/Ast_helper/Cty/index.html | 2 +- dev/ocaml/Ast_helper/Exp/index.html | 2 +- dev/ocaml/Ast_helper/Incl/index.html | 2 +- dev/ocaml/Ast_helper/Mb/index.html | 2 +- dev/ocaml/Ast_helper/Md/index.html | 2 +- dev/ocaml/Ast_helper/Mod/index.html | 2 +- dev/ocaml/Ast_helper/Ms/index.html | 2 +- dev/ocaml/Ast_helper/Mtd/index.html | 2 +- dev/ocaml/Ast_helper/Mty/index.html | 2 +- dev/ocaml/Ast_helper/Of/index.html | 2 +- dev/ocaml/Ast_helper/Opn/index.html | 2 +- dev/ocaml/Ast_helper/Pat/index.html | 2 +- dev/ocaml/Ast_helper/Rf/index.html | 2 +- dev/ocaml/Ast_helper/Sig/index.html | 2 +- dev/ocaml/Ast_helper/Str/index.html | 2 +- dev/ocaml/Ast_helper/Te/index.html | 2 +- dev/ocaml/Ast_helper/Typ/index.html | 2 +- dev/ocaml/Ast_helper/Type/index.html | 2 +- dev/ocaml/Ast_helper/Val/index.html | 2 +- dev/ocaml/Ast_helper/Vb/index.html | 2 +- dev/ocaml/Ast_helper/index.html | 2 +- dev/ocaml/Ast_invariants/index.html | 2 +- dev/ocaml/Ast_iterator/index.html | 2 +- dev/ocaml/Ast_mapper/index.html | 2 +- dev/ocaml/Asttypes/index.html | 2 +- dev/ocaml/Attr_helper/index.html | 2 +- .../Definition/index.html | 2 +- .../Make/argument-1-_/index.html | 2 +- .../Augment_specialised_args/Make/index.html | 2 +- .../What_to_specialise/index.html | 2 +- dev/ocaml/Augment_specialised_args/index.html | 2 +- .../module-type-S/index.html | 2 +- dev/ocaml/Backend_intf/index.html | 2 +- .../Backend_intf/module-type-S/index.html | 2 +- dev/ocaml/Backend_var/Provenance/index.html | 2 +- .../Backend_var/With_provenance/index.html | 2 +- dev/ocaml/Backend_var/index.html | 2 +- dev/ocaml/Binutils/index.html | 2 +- .../Make/argument-1-T/Cond_branch/index.html | 2 +- .../Make/argument-1-T/index.html | 2 +- dev/ocaml/Branch_relaxation/Make/index.html | 2 +- dev/ocaml/Branch_relaxation/index.html | 2 +- dev/ocaml/Branch_relaxation_intf/index.html | 2 +- .../module-type-S/Cond_branch/index.html | 2 +- .../module-type-S/index.html | 2 +- dev/ocaml/Btype/For_copy/index.html | 2 +- dev/ocaml/Btype/TransientTypeMap/index.html | 2 +- dev/ocaml/Btype/TypeHash/index.html | 2 +- dev/ocaml/Btype/TypeMap/index.html | 2 +- dev/ocaml/Btype/TypePairs/index.html | 2 +- dev/ocaml/Btype/TypeSet/index.html | 2 +- dev/ocaml/Btype/index.html | 2 +- dev/ocaml/Build_export_info/index.html | 2 +- dev/ocaml/Build_path_prefix_map/index.html | 2 +- dev/ocaml/Builtin_attributes/index.html | 2 +- dev/ocaml/Bytegen/index.html | 2 +- dev/ocaml/Bytelibrarian/index.html | 2 +- dev/ocaml/Bytelink/index.html | 2 +- dev/ocaml/Bytepackager/index.html | 2 +- dev/ocaml/Bytesections/index.html | 2 +- dev/ocaml/CSE/class-cse/index.html | 2 +- dev/ocaml/CSE/index.html | 2 +- dev/ocaml/CSEgen/class-cse_generic/index.html | 2 +- dev/ocaml/CSEgen/index.html | 2 +- dev/ocaml/CamlinternalFormat/index.html | 2 +- dev/ocaml/CamlinternalFormatBasics/index.html | 2 +- dev/ocaml/CamlinternalLazy/index.html | 2 +- .../Convert/Simplified/index.html | 2 +- .../CamlinternalMenhirLib/Convert/index.html | 2 +- .../Engine/Make/argument-1-T/Log/index.html | 2 +- .../Engine/Make/argument-1-T/index.html | 2 +- .../Engine/Make/index.html | 2 +- .../CamlinternalMenhirLib/Engine/index.html | 2 +- .../EngineTypes/index.html | 2 +- .../EngineTypes/module-type-ENGINE/index.html | 2 +- .../index.html | 2 +- .../module-type-MONOLITHIC_ENGINE/index.html | 2 +- .../module-type-TABLE/Log/index.html | 2 +- .../EngineTypes/module-type-TABLE/index.html | 2 +- .../ErrorReports/index.html | 2 +- .../CamlinternalMenhirLib/General/index.html | 2 +- .../IncrementalEngine/index.html | 2 +- .../module-type-EVERYTHING/index.html | 2 +- .../module-type-INCREMENTAL_ENGINE/index.html | 2 +- .../module-type-INSPECTION/index.html | 2 +- .../module-type-SYMBOLS/index.html | 2 +- .../InfiniteArray/index.html | 2 +- .../InspectionTableFormat/index.html | 2 +- .../module-type-TABLES/index.html | 2 +- .../Make/argument-1-TT/index.html | 2 +- .../Make/argument-2-IT/index.html | 2 +- .../Make/argument-3-ET/Log/index.html | 2 +- .../Make/argument-3-ET/index.html | 2 +- .../Make/argument-4-E/index.html | 2 +- .../Make/index.html | 2 +- .../Symbols/argument-1-T/index.html | 2 +- .../Symbols/index.html | 2 +- .../InspectionTableInterpreter/index.html | 2 +- .../LexerUtil/index.html | 2 +- .../LinearizedArray/index.html | 2 +- .../PackedIntArray/index.html | 2 +- .../Printers/Make/argument-1-I/index.html | 2 +- .../Printers/Make/argument-2-User/index.html | 2 +- .../Printers/Make/index.html | 2 +- .../CamlinternalMenhirLib/Printers/index.html | 2 +- .../RowDisplacement/index.html | 2 +- .../StaticVersion/index.html | 2 +- .../TableFormat/index.html | 2 +- .../TableFormat/module-type-TABLES/index.html | 2 +- .../MakeEngineTable/Log/index.html | 2 +- .../MakeEngineTable/argument-1-T/index.html | 2 +- .../MakeEngineTable/index.html | 2 +- .../TableInterpreter/index.html | 2 +- dev/ocaml/CamlinternalMenhirLib/index.html | 2 +- dev/ocaml/CamlinternalMod/index.html | 2 +- dev/ocaml/CamlinternalOO/index.html | 2 +- dev/ocaml/Ccomp/index.html | 2 +- dev/ocaml/Clambda/index.html | 2 +- dev/ocaml/Clambda_primitives/index.html | 2 +- dev/ocaml/Clflags/Compiler_pass/index.html | 2 +- dev/ocaml/Clflags/Float_arg_helper/index.html | 2 +- dev/ocaml/Clflags/Int_arg_helper/index.html | 2 +- dev/ocaml/Clflags/index.html | 2 +- dev/ocaml/Closure/index.html | 2 +- dev/ocaml/Closure_conversion/index.html | 2 +- .../Closure_conversion_aux/Env/index.html | 2 +- .../Function_decls/Function_decl/index.html | 2 +- .../Function_decls/index.html | 2 +- dev/ocaml/Closure_conversion_aux/index.html | 2 +- dev/ocaml/Closure_element/Map/index.html | 2 +- dev/ocaml/Closure_element/Set/index.html | 2 +- dev/ocaml/Closure_element/T/index.html | 2 +- dev/ocaml/Closure_element/Tbl/index.html | 2 +- dev/ocaml/Closure_element/index.html | 2 +- dev/ocaml/Closure_id/Map/index.html | 2 +- dev/ocaml/Closure_id/Set/index.html | 2 +- dev/ocaml/Closure_id/T/index.html | 2 +- dev/ocaml/Closure_id/Tbl/index.html | 2 +- dev/ocaml/Closure_id/index.html | 2 +- dev/ocaml/Closure_middle_end/index.html | 2 +- dev/ocaml/Closure_offsets/index.html | 2 +- dev/ocaml/Closure_origin/Map/index.html | 2 +- dev/ocaml/Closure_origin/Set/index.html | 2 +- dev/ocaml/Closure_origin/T/index.html | 2 +- dev/ocaml/Closure_origin/Tbl/index.html | 2 +- dev/ocaml/Closure_origin/index.html | 2 +- dev/ocaml/Cmi_format/index.html | 2 +- dev/ocaml/Cmm/index.html | 2 +- dev/ocaml/Cmm_helpers/index.html | 2 +- dev/ocaml/Cmm_invariants/index.html | 2 +- dev/ocaml/Cmmgen/index.html | 2 +- dev/ocaml/Cmmgen_state/index.html | 2 +- dev/ocaml/Cmo_format/index.html | 2 +- dev/ocaml/Cmt2annot/index.html | 2 +- dev/ocaml/Cmt_format/index.html | 2 +- dev/ocaml/Cmx_format/index.html | 2 +- dev/ocaml/Cmxs_format/index.html | 2 +- dev/ocaml/Coloring/index.html | 2 +- dev/ocaml/Comballoc/index.html | 2 +- dev/ocaml/Compenv/index.html | 2 +- dev/ocaml/Compilation_unit/Map/index.html | 2 +- dev/ocaml/Compilation_unit/Set/index.html | 2 +- dev/ocaml/Compilation_unit/T/index.html | 2 +- dev/ocaml/Compilation_unit/Tbl/index.html | 2 +- dev/ocaml/Compilation_unit/index.html | 2 +- dev/ocaml/Compile/index.html | 2 +- dev/ocaml/Compile_common/index.html | 2 +- dev/ocaml/Compilenv/index.html | 2 +- dev/ocaml/Compmisc/index.html | 2 +- dev/ocaml/Config/index.html | 2 +- dev/ocaml/Config_boot/index.html | 2 +- dev/ocaml/Config_main/index.html | 2 +- .../argument-1-Module_name/Map/index.html | 2 +- .../argument-1-Module_name/Set/index.html | 2 +- .../argument-1-Module_name/Tbl/index.html | 2 +- .../Make/argument-1-Module_name/index.html | 2 +- dev/ocaml/Consistbl/Make/index.html | 2 +- dev/ocaml/Consistbl/index.html | 2 +- dev/ocaml/Convert_primitives/index.html | 2 +- dev/ocaml/Ctype/index.html | 2 +- .../Dataflow/Backward/argument-1-D/index.html | 2 +- dev/ocaml/Dataflow/Backward/index.html | 2 +- dev/ocaml/Dataflow/index.html | 2 +- .../Dataflow/module-type-DOMAIN/index.html | 2 +- dev/ocaml/Datarepr/index.html | 2 +- dev/ocaml/Deadcode/index.html | 2 +- .../Debuginfo/Scoped_location/index.html | 2 +- dev/ocaml/Debuginfo/index.html | 2 +- dev/ocaml/Depend/index.html | 2 +- .../Left_variadic/argument-1-_/index.html | 2 +- .../Diffing/Define/Left_variadic/index.html | 2 +- .../Right_variadic/argument-1-_/index.html | 2 +- .../Diffing/Define/Right_variadic/index.html | 2 +- .../Define/Simple/argument-1-_/index.html | 2 +- dev/ocaml/Diffing/Define/Simple/index.html | 2 +- .../Diffing/Define/argument-1-D/index.html | 2 +- dev/ocaml/Diffing/Define/index.html | 2 +- .../Define/module-type-Parameters/index.html | 2 +- .../Diffing/Define/module-type-S/index.html | 2 +- dev/ocaml/Diffing/index.html | 2 +- dev/ocaml/Diffing/module-type-Defs/index.html | 2 +- .../Define/Simple/argument-1-_/index.html | 2 +- .../Define/Simple/index.html | 2 +- .../Define/argument-1-D/index.html | 2 +- dev/ocaml/Diffing_with_keys/Define/index.html | 2 +- .../Define/module-type-Parameters/index.html | 2 +- dev/ocaml/Diffing_with_keys/index.html | 2 +- dev/ocaml/Dll/index.html | 2 +- dev/ocaml/Docstrings/WithMenhir/index.html | 2 +- dev/ocaml/Docstrings/index.html | 2 +- dev/ocaml/Domainstate/index.html | 2 +- dev/ocaml/Dynlink/index.html | 2 +- dev/ocaml/Effect_analysis/index.html | 2 +- dev/ocaml/Emit/index.html | 2 +- dev/ocaml/Emitaux/index.html | 2 +- dev/ocaml/Emitcode/index.html | 2 +- dev/ocaml/Emitenv/index.html | 2 +- dev/ocaml/Env/index.html | 2 +- dev/ocaml/Envaux/index.html | 2 +- dev/ocaml/Errors/index.html | 2 +- dev/ocaml/Errortrace/Subtype/index.html | 2 +- dev/ocaml/Errortrace/index.html | 2 +- dev/ocaml/Event/index.html | 2 +- dev/ocaml/Export_id/Map/index.html | 2 +- dev/ocaml/Export_id/Set/index.html | 2 +- dev/ocaml/Export_id/T/index.html | 2 +- dev/ocaml/Export_id/Tbl/index.html | 2 +- dev/ocaml/Export_id/index.html | 2 +- dev/ocaml/Export_info/index.html | 2 +- dev/ocaml/Export_info_for_pack/index.html | 2 +- dev/ocaml/Expunge/index.html | 2 +- dev/ocaml/Extract_projections/index.html | 2 +- dev/ocaml/Find_recursive_functions/index.html | 2 +- .../Constant_defining_value/Map/index.html | 2 +- .../Constant_defining_value/Set/index.html | 2 +- .../Constant_defining_value/T/index.html | 2 +- .../Constant_defining_value/Tbl/index.html | 2 +- .../Constant_defining_value/index.html | 2 +- .../Flambda/With_free_variables/index.html | 2 +- dev/ocaml/Flambda/index.html | 2 +- dev/ocaml/Flambda_invariants/index.html | 2 +- dev/ocaml/Flambda_iterators/index.html | 2 +- dev/ocaml/Flambda_middle_end/index.html | 2 +- dev/ocaml/Flambda_to_clambda/index.html | 2 +- .../Flambda_utils/Switch_storer/index.html | 2 +- dev/ocaml/Flambda_utils/index.html | 2 +- dev/ocaml/Freshening/Project_var/index.html | 2 +- dev/ocaml/Freshening/index.html | 2 +- .../Genprintval/Make/argument-1-O/index.html | 2 +- .../Genprintval/Make/argument-2-_/index.html | 2 +- dev/ocaml/Genprintval/Make/index.html | 2 +- dev/ocaml/Genprintval/index.html | 2 +- .../module-type-EVALPATH/index.html | 2 +- .../Genprintval/module-type-OBJ/index.html | 2 +- .../Genprintval/module-type-S/index.html | 2 +- dev/ocaml/Id_types/Id/index.html | 2 +- .../Id_types/UnitId/argument-1-_/index.html | 2 +- .../argument-2-Compilation_unit/index.html | 2 +- dev/ocaml/Id_types/UnitId/index.html | 2 +- dev/ocaml/Id_types/index.html | 2 +- .../Id_types/module-type-BaseId/index.html | 2 +- dev/ocaml/Id_types/module-type-Id/index.html | 2 +- .../Compilation_unit/index.html | 2 +- .../Id_types/module-type-UnitId/index.html | 2 +- dev/ocaml/Ident/Map/index.html | 2 +- dev/ocaml/Ident/Set/index.html | 2 +- dev/ocaml/Ident/T/index.html | 2 +- dev/ocaml/Ident/Tbl/index.html | 2 +- dev/ocaml/Ident/index.html | 2 +- dev/ocaml/Identifiable/Make/Map/index.html | 2 +- dev/ocaml/Identifiable/Make/Set/index.html | 2 +- dev/ocaml/Identifiable/Make/T/index.html | 2 +- dev/ocaml/Identifiable/Make/Tbl/index.html | 2 +- .../Identifiable/Make/argument-1-T/index.html | 2 +- dev/ocaml/Identifiable/Make/index.html | 2 +- .../Identifiable/Pair/argument-1-A/index.html | 2 +- .../Identifiable/Pair/argument-2-B/index.html | 2 +- dev/ocaml/Identifiable/Pair/index.html | 2 +- dev/ocaml/Identifiable/index.html | 2 +- .../Identifiable/module-type-Map/T/index.html | 2 +- .../Identifiable/module-type-Map/index.html | 2 +- .../Identifiable/module-type-S/Map/index.html | 2 +- .../Identifiable/module-type-S/Set/index.html | 2 +- .../Identifiable/module-type-S/T/index.html | 2 +- .../Identifiable/module-type-S/Tbl/index.html | 2 +- .../Identifiable/module-type-S/index.html | 2 +- .../Identifiable/module-type-Set/T/index.html | 2 +- .../Identifiable/module-type-Set/index.html | 2 +- .../Identifiable/module-type-Tbl/T/index.html | 2 +- .../Identifiable/module-type-Tbl/index.html | 2 +- .../Identifiable/module-type-Thing/index.html | 2 +- dev/ocaml/Import_approx/index.html | 2 +- dev/ocaml/Includeclass/index.html | 2 +- dev/ocaml/Includecore/index.html | 2 +- dev/ocaml/Includemod/Error/index.html | 2 +- dev/ocaml/Includemod/FieldMap/index.html | 2 +- .../Functor_app_diff/Defs/index.html | 2 +- .../Includemod/Functor_app_diff/index.html | 2 +- .../Functor_inclusion_diff/Defs/index.html | 2 +- .../Functor_inclusion_diff/index.html | 2 +- dev/ocaml/Includemod/index.html | 2 +- dev/ocaml/Includemod_errorprinter/index.html | 2 +- dev/ocaml/Inconstant_idents/index.html | 2 +- .../index.html | 2 +- dev/ocaml/Inline_and_simplify/index.html | 2 +- .../Inline_and_simplify_aux/Env/index.html | 2 +- .../Inline_and_simplify_aux/Result/index.html | 2 +- dev/ocaml/Inline_and_simplify_aux/index.html | 2 +- dev/ocaml/Inlining_cost/Benefit/index.html | 2 +- dev/ocaml/Inlining_cost/Threshold/index.html | 2 +- .../Whether_sufficient_benefit/index.html | 2 +- dev/ocaml/Inlining_cost/index.html | 2 +- dev/ocaml/Inlining_decision/index.html | 2 +- dev/ocaml/Inlining_decision_intf/index.html | 2 +- .../Inlining_stats/Closure_stack/index.html | 2 +- dev/ocaml/Inlining_stats/index.html | 2 +- .../Inlining_stats_types/Decision/index.html | 2 +- .../Inlining_stats_types/Inlined/index.html | 2 +- .../Not_inlined/index.html | 2 +- .../Not_specialised/index.html | 2 +- .../Inlining_stats_types/Prevented/index.html | 2 +- .../Specialised/index.html | 2 +- dev/ocaml/Inlining_stats_types/index.html | 2 +- dev/ocaml/Inlining_transforms/index.html | 2 +- dev/ocaml/Instruct/index.html | 2 +- .../index.html | 2 +- dev/ocaml/Interf/index.html | 2 +- dev/ocaml/Internal_variable_names/index.html | 2 +- dev/ocaml/Interval/index.html | 2 +- dev/ocaml/Invariant_params/index.html | 2 +- dev/ocaml/Lambda/index.html | 2 +- dev/ocaml/Lazy_backtrack/index.html | 2 +- dev/ocaml/Lexer/index.html | 2 +- dev/ocaml/Lift_code/index.html | 2 +- dev/ocaml/Lift_constants/index.html | 2 +- .../Lift_let_to_initialize_symbol/index.html | 2 +- dev/ocaml/Linear/index.html | 2 +- dev/ocaml/Linear_format/index.html | 2 +- dev/ocaml/Linearize/index.html | 2 +- dev/ocaml/Linkage_name/Map/index.html | 2 +- dev/ocaml/Linkage_name/Set/index.html | 2 +- dev/ocaml/Linkage_name/T/index.html | 2 +- dev/ocaml/Linkage_name/Tbl/index.html | 2 +- dev/ocaml/Linkage_name/index.html | 2 +- dev/ocaml/Linscan/index.html | 2 +- dev/ocaml/Liveness/index.html | 2 +- dev/ocaml/Load_path/Dir/index.html | 2 +- dev/ocaml/Load_path/index.html | 2 +- dev/ocaml/Local_store/index.html | 2 +- dev/ocaml/Location/index.html | 2 +- dev/ocaml/Longident/index.html | 2 +- dev/ocaml/Mach/index.html | 2 +- dev/ocaml/Main/index.html | 2 +- dev/ocaml/Main_args/Default/Main/index.html | 2 +- .../Main_args/Default/Odoc_args/index.html | 2 +- .../Main_args/Default/Optmain/index.html | 2 +- .../Main_args/Default/Opttopmain/index.html | 2 +- .../Main_args/Default/Topmain/index.html | 2 +- dev/ocaml/Main_args/Default/index.html | 2 +- .../argument-1-_/index.html | 2 +- .../Make_bytecomp_options/index.html | 2 +- .../argument-1-_/index.html | 2 +- .../Main_args/Make_bytetop_options/index.html | 2 +- .../argument-1-_/index.html | 2 +- .../Make_ocamldoc_options/index.html | 2 +- .../argument-1-_/index.html | 2 +- .../Main_args/Make_optcomp_options/index.html | 2 +- .../argument-1-_/index.html | 2 +- .../Main_args/Make_opttop_options/index.html | 2 +- dev/ocaml/Main_args/index.html | 2 +- .../Main_args/module-type-Arg_list/index.html | 2 +- .../module-type-Bytecomp_options/index.html | 2 +- .../module-type-Bytetop_options/index.html | 2 +- .../module-type-Common_options/index.html | 2 +- .../module-type-Compiler_options/index.html | 2 +- .../module-type-Core_options/index.html | 2 +- .../module-type-Ocamldoc_options/index.html | 2 +- .../module-type-Optcommon_options/index.html | 2 +- .../module-type-Optcomp_options/index.html | 2 +- .../module-type-Opttop_options/index.html | 2 +- .../module-type-Toplevel_options/index.html | 2 +- dev/ocaml/Maindriver/index.html | 2 +- dev/ocaml/Makedepend/index.html | 2 +- dev/ocaml/Matching/index.html | 2 +- dev/ocaml/Meta/index.html | 2 +- dev/ocaml/Misc/Color/index.html | 2 +- dev/ocaml/Misc/Error_style/index.html | 2 +- .../Misc/Int_literal_converter/index.html | 2 +- dev/ocaml/Misc/LongString/index.html | 2 +- dev/ocaml/Misc/Magic_number/index.html | 2 +- dev/ocaml/Misc/Stdlib/Array/index.html | 2 +- dev/ocaml/Misc/Stdlib/List/index.html | 2 +- dev/ocaml/Misc/Stdlib/Option/index.html | 2 +- dev/ocaml/Misc/Stdlib/String/Map/index.html | 2 +- dev/ocaml/Misc/Stdlib/String/Set/index.html | 2 +- dev/ocaml/Misc/Stdlib/String/Tbl/index.html | 2 +- dev/ocaml/Misc/Stdlib/String/index.html | 2 +- dev/ocaml/Misc/Stdlib/index.html | 2 +- dev/ocaml/Misc/index.html | 2 +- dev/ocaml/Mtype/index.html | 2 +- dev/ocaml/Mutable_variable/Map/index.html | 2 +- dev/ocaml/Mutable_variable/Set/index.html | 2 +- dev/ocaml/Mutable_variable/T/index.html | 2 +- dev/ocaml/Mutable_variable/Tbl/index.html | 2 +- dev/ocaml/Mutable_variable/index.html | 2 +- dev/ocaml/Numbers/Float/Map/index.html | 2 +- dev/ocaml/Numbers/Float/Set/index.html | 2 +- dev/ocaml/Numbers/Float/T/index.html | 2 +- dev/ocaml/Numbers/Float/Tbl/index.html | 2 +- dev/ocaml/Numbers/Float/index.html | 2 +- dev/ocaml/Numbers/Int/Map/index.html | 2 +- dev/ocaml/Numbers/Int/Set/index.html | 2 +- dev/ocaml/Numbers/Int/T/index.html | 2 +- dev/ocaml/Numbers/Int/Tbl/index.html | 2 +- dev/ocaml/Numbers/Int/index.html | 2 +- dev/ocaml/Numbers/Int16/index.html | 2 +- dev/ocaml/Numbers/Int8/index.html | 2 +- dev/ocaml/Numbers/index.html | 2 +- dev/ocaml/Ocamlmktop_init/index.html | 2 +- dev/ocaml/Odoc/index.html | 2 +- dev/ocaml/Odoc_analyse/index.html | 2 +- dev/ocaml/Odoc_args/index.html | 2 +- .../Odoc_ast/Analyser/argument-1-_/index.html | 2 +- dev/ocaml/Odoc_ast/Analyser/index.html | 2 +- .../Odoc_ast/Typedtree_search/index.html | 2 +- dev/ocaml/Odoc_ast/index.html | 2 +- dev/ocaml/Odoc_class/index.html | 2 +- .../Basic_info_retriever/index.html | 2 +- dev/ocaml/Odoc_comments/index.html | 2 +- .../module-type-Texter/index.html | 2 +- dev/ocaml/Odoc_comments_global/index.html | 2 +- dev/ocaml/Odoc_config/index.html | 2 +- dev/ocaml/Odoc_control/index.html | 2 +- dev/ocaml/Odoc_cross/index.html | 2 +- dev/ocaml/Odoc_dag2html/index.html | 2 +- dev/ocaml/Odoc_dep/Dep/index.html | 2 +- dev/ocaml/Odoc_dep/index.html | 2 +- .../Odoc_dot/Generator/class-dot/index.html | 2 +- dev/ocaml/Odoc_dot/Generator/index.html | 2 +- dev/ocaml/Odoc_dot/index.html | 2 +- .../class-dot/index.html | 2 +- .../module-type-Dot_generator/index.html | 2 +- dev/ocaml/Odoc_env/index.html | 2 +- dev/ocaml/Odoc_exception/index.html | 2 +- dev/ocaml/Odoc_extension/index.html | 2 +- .../Base_generator/class-generator/index.html | 2 +- dev/ocaml/Odoc_gen/Base_generator/index.html | 2 +- .../class-type-doc_generator/index.html | 2 +- dev/ocaml/Odoc_gen/index.html | 2 +- .../class-generator/index.html | 2 +- .../Odoc_gen/module-type-Base/index.html | 2 +- .../argument-1-_/class-generator/index.html | 2 +- .../argument-1-_/index.html | 2 +- .../class-generator/index.html | 2 +- .../module-type-Base_functor/index.html | 2 +- .../argument-1-_/class-dot/index.html | 2 +- .../argument-1-_/index.html | 2 +- .../class-dot/index.html | 2 +- .../module-type-Dot_functor/index.html | 2 +- .../argument-1-_/class-html/index.html | 2 +- .../argument-1-_/index.html | 2 +- .../class-html/index.html | 2 +- .../module-type-Html_functor/index.html | 2 +- .../argument-1-_/class-latex/index.html | 2 +- .../argument-1-_/index.html | 2 +- .../class-latex/index.html | 2 +- .../module-type-Latex_functor/index.html | 2 +- .../argument-1-_/class-man/index.html | 2 +- .../argument-1-_/index.html | 2 +- .../class-man/index.html | 2 +- .../module-type-Man_functor/index.html | 2 +- .../argument-1-_/class-texi/index.html | 2 +- .../argument-1-_/index.html | 2 +- .../class-texi/index.html | 2 +- .../module-type-Texi_functor/index.html | 2 +- dev/ocaml/Odoc_global/index.html | 2 +- .../Odoc_html/Generator/class-html/index.html | 2 +- dev/ocaml/Odoc_html/Generator/index.html | 2 +- dev/ocaml/Odoc_html/Naming/index.html | 2 +- dev/ocaml/Odoc_html/class-info/index.html | 2 +- .../Odoc_html/class-ocaml_code/index.html | 2 +- dev/ocaml/Odoc_html/class-text/index.html | 2 +- dev/ocaml/Odoc_html/index.html | 2 +- .../class-html/index.html | 2 +- .../module-type-Html_generator/index.html | 2 +- dev/ocaml/Odoc_info/Class/index.html | 2 +- dev/ocaml/Odoc_info/Dep/index.html | 2 +- dev/ocaml/Odoc_info/Exception/index.html | 2 +- dev/ocaml/Odoc_info/Extension/index.html | 2 +- dev/ocaml/Odoc_info/Global/index.html | 2 +- dev/ocaml/Odoc_info/Module/index.html | 2 +- dev/ocaml/Odoc_info/Name/index.html | 2 +- dev/ocaml/Odoc_info/Parameter/index.html | 2 +- .../Odoc_info/Scan/class-scanner/index.html | 2 +- dev/ocaml/Odoc_info/Scan/index.html | 2 +- dev/ocaml/Odoc_info/Search/index.html | 2 +- dev/ocaml/Odoc_info/Type/index.html | 2 +- dev/ocaml/Odoc_info/Value/index.html | 2 +- dev/ocaml/Odoc_info/index.html | 2 +- dev/ocaml/Odoc_inherit/index.html | 2 +- .../Generator/class-latex/index.html | 2 +- dev/ocaml/Odoc_latex/Generator/index.html | 2 +- dev/ocaml/Odoc_latex/class-info/index.html | 2 +- dev/ocaml/Odoc_latex/class-text/index.html | 2 +- dev/ocaml/Odoc_latex/index.html | 2 +- .../class-latex/index.html | 2 +- .../module-type-Latex_generator/index.html | 2 +- dev/ocaml/Odoc_latex_style/index.html | 2 +- dev/ocaml/Odoc_lexer/index.html | 2 +- .../Odoc_man/Generator/class-man/index.html | 2 +- dev/ocaml/Odoc_man/Generator/index.html | 2 +- dev/ocaml/Odoc_man/class-info/index.html | 2 +- dev/ocaml/Odoc_man/index.html | 2 +- .../class-man/index.html | 2 +- .../module-type-Man_generator/index.html | 2 +- dev/ocaml/Odoc_merge/index.html | 2 +- dev/ocaml/Odoc_messages/index.html | 2 +- dev/ocaml/Odoc_misc/index.html | 2 +- dev/ocaml/Odoc_module/index.html | 2 +- dev/ocaml/Odoc_name/Map/index.html | 2 +- dev/ocaml/Odoc_name/index.html | 2 +- dev/ocaml/Odoc_ocamlhtml/index.html | 2 +- dev/ocaml/Odoc_parameter/index.html | 2 +- dev/ocaml/Odoc_parser/index.html | 2 +- dev/ocaml/Odoc_print/index.html | 2 +- dev/ocaml/Odoc_scan/class-scanner/index.html | 2 +- dev/ocaml/Odoc_scan/index.html | 2 +- dev/ocaml/Odoc_search/P_name/index.html | 2 +- .../Search/argument-1-P/index.html | 2 +- dev/ocaml/Odoc_search/Search/index.html | 2 +- .../Odoc_search/Search_by_name/index.html | 2 +- dev/ocaml/Odoc_search/index.html | 2 +- .../module-type-Predicates/index.html | 2 +- dev/ocaml/Odoc_see_lexer/index.html | 2 +- .../Odoc_sig/Analyser/argument-1-_/index.html | 2 +- dev/ocaml/Odoc_sig/Analyser/index.html | 2 +- .../Odoc_sig/Signature_search/index.html | 2 +- dev/ocaml/Odoc_sig/index.html | 2 +- .../module-type-Info_retriever/index.html | 2 +- dev/ocaml/Odoc_str/index.html | 2 +- .../argument-1-G/class-generator/index.html | 2 +- .../Generator/argument-1-G/index.html | 2 +- .../Generator/class-generator/index.html | 2 +- .../Generator/class-string_gen/index.html | 2 +- dev/ocaml/Odoc_test/Generator/index.html | 2 +- dev/ocaml/Odoc_test/index.html | 2 +- .../Odoc_texi/Generator/class-texi/index.html | 2 +- dev/ocaml/Odoc_texi/Generator/index.html | 2 +- dev/ocaml/Odoc_texi/Texi/index.html | 2 +- dev/ocaml/Odoc_texi/class-text/index.html | 2 +- dev/ocaml/Odoc_texi/index.html | 2 +- .../class-texi/index.html | 2 +- .../module-type-Texi_generator/index.html | 2 +- dev/ocaml/Odoc_text/Texter/index.html | 2 +- dev/ocaml/Odoc_text/index.html | 2 +- dev/ocaml/Odoc_text_lexer/index.html | 2 +- dev/ocaml/Odoc_text_parser/index.html | 2 +- dev/ocaml/Odoc_to_text/class-info/index.html | 2 +- .../Odoc_to_text/class-to_text/index.html | 2 +- dev/ocaml/Odoc_to_text/index.html | 2 +- dev/ocaml/Odoc_type/index.html | 2 +- dev/ocaml/Odoc_types/index.html | 2 +- dev/ocaml/Odoc_value/index.html | 2 +- dev/ocaml/Opcodes/index.html | 2 +- dev/ocaml/Oprint/index.html | 2 +- dev/ocaml/Optcompile/index.html | 2 +- dev/ocaml/Opterrors/index.html | 2 +- dev/ocaml/Optmain/index.html | 2 +- dev/ocaml/Optmaindriver/index.html | 2 +- dev/ocaml/Outcometree/index.html | 2 +- dev/ocaml/Parameter/List/index.html | 2 +- dev/ocaml/Parameter/Map/index.html | 2 +- dev/ocaml/Parameter/Set/index.html | 2 +- dev/ocaml/Parameter/T/index.html | 2 +- dev/ocaml/Parameter/Tbl/index.html | 2 +- dev/ocaml/Parameter/index.html | 2 +- .../Parmatch/Compat/argument-1-_/index.html | 2 +- dev/ocaml/Parmatch/Compat/index.html | 2 +- dev/ocaml/Parmatch/index.html | 2 +- dev/ocaml/Parse/index.html | 2 +- dev/ocaml/Parser/Incremental/index.html | 2 +- dev/ocaml/Parser/MenhirInterpreter/index.html | 2 +- dev/ocaml/Parser/index.html | 2 +- dev/ocaml/Parsetree/index.html | 2 +- dev/ocaml/Pass_wrapper/index.html | 2 +- dev/ocaml/Path/Map/index.html | 2 +- dev/ocaml/Path/Set/index.html | 2 +- dev/ocaml/Path/index.html | 2 +- dev/ocaml/Patterns/General/index.html | 2 +- dev/ocaml/Patterns/Half_simple/index.html | 2 +- dev/ocaml/Patterns/Head/index.html | 2 +- dev/ocaml/Patterns/Non_empty_row/index.html | 2 +- dev/ocaml/Patterns/Simple/index.html | 2 +- dev/ocaml/Patterns/index.html | 2 +- dev/ocaml/Persistent_env/Consistbl/index.html | 2 +- .../Persistent_signature/index.html | 2 +- dev/ocaml/Persistent_env/index.html | 2 +- dev/ocaml/Polling/index.html | 2 +- dev/ocaml/Pparse/index.html | 2 +- dev/ocaml/Pprintast/index.html | 2 +- dev/ocaml/Predef/index.html | 2 +- dev/ocaml/Primitive/index.html | 2 +- dev/ocaml/Printast/index.html | 2 +- dev/ocaml/Printclambda/index.html | 2 +- dev/ocaml/Printclambda_primitives/index.html | 2 +- dev/ocaml/Printcmm/index.html | 2 +- dev/ocaml/Printinstr/index.html | 2 +- dev/ocaml/Printlambda/index.html | 2 +- dev/ocaml/Printlinear/index.html | 2 +- dev/ocaml/Printmach/index.html | 2 +- dev/ocaml/Printpat/index.html | 2 +- dev/ocaml/Printtyp/Conflicts/index.html | 2 +- dev/ocaml/Printtyp/Naming_context/index.html | 2 +- dev/ocaml/Printtyp/Out_name/index.html | 2 +- dev/ocaml/Printtyp/Subtype/index.html | 2 +- dev/ocaml/Printtyp/index.html | 2 +- dev/ocaml/Printtyped/index.html | 2 +- dev/ocaml/Proc/index.html | 2 +- dev/ocaml/Profile/index.html | 2 +- dev/ocaml/Profiling/index.html | 2 +- dev/ocaml/Projection/Map/index.html | 2 +- dev/ocaml/Projection/Set/index.html | 2 +- dev/ocaml/Projection/T/index.html | 2 +- dev/ocaml/Projection/Tbl/index.html | 2 +- dev/ocaml/Projection/index.html | 2 +- dev/ocaml/Rec_check/index.html | 2 +- dev/ocaml/Ref_to_variables/index.html | 2 +- dev/ocaml/Reg/Map/index.html | 2 +- dev/ocaml/Reg/Raw_name/index.html | 2 +- dev/ocaml/Reg/Set/index.html | 2 +- dev/ocaml/Reg/index.html | 2 +- dev/ocaml/Reload/index.html | 2 +- .../Reloadgen/class-reload_generic/index.html | 2 +- dev/ocaml/Reloadgen/index.html | 2 +- .../Remove_free_vars_equal_to_args/index.html | 2 +- dev/ocaml/Remove_unused_arguments/index.html | 2 +- .../Remove_unused_closure_vars/index.html | 2 +- .../index.html | 2 +- dev/ocaml/Runtime_events/Callbacks/index.html | 2 +- dev/ocaml/Runtime_events/Timestamp/index.html | 2 +- dev/ocaml/Runtime_events/index.html | 2 +- dev/ocaml/Runtimedef/index.html | 2 +- .../class-scheduler_generic/index.html | 2 +- dev/ocaml/Schedgen/index.html | 2 +- dev/ocaml/Scheduling/index.html | 2 +- dev/ocaml/Selectgen/Coeffect/index.html | 2 +- dev/ocaml/Selectgen/Effect/index.html | 2 +- .../Selectgen/Effect_and_coeffect/index.html | 2 +- .../class-selector_generic/index.html | 2 +- dev/ocaml/Selectgen/index.html | 2 +- dev/ocaml/Selection/index.html | 2 +- dev/ocaml/Semantics_of_primitives/index.html | 2 +- dev/ocaml/Set_of_closures_id/Map/index.html | 2 +- dev/ocaml/Set_of_closures_id/Set/index.html | 2 +- dev/ocaml/Set_of_closures_id/T/index.html | 2 +- dev/ocaml/Set_of_closures_id/Tbl/index.html | 2 +- dev/ocaml/Set_of_closures_id/index.html | 2 +- .../Set_of_closures_origin/Map/index.html | 2 +- .../Set_of_closures_origin/Set/index.html | 2 +- dev/ocaml/Set_of_closures_origin/T/index.html | 2 +- .../Set_of_closures_origin/Tbl/index.html | 2 +- dev/ocaml/Set_of_closures_origin/index.html | 2 +- dev/ocaml/Shape/Item/Map/index.html | 2 +- dev/ocaml/Shape/Item/index.html | 2 +- .../Make_reduce/argument-1-Context/index.html | 2 +- dev/ocaml/Shape/Make_reduce/index.html | 2 +- dev/ocaml/Shape/Map/index.html | 2 +- dev/ocaml/Shape/Sig_component_kind/index.html | 2 +- dev/ocaml/Shape/Uid/Map/index.html | 2 +- dev/ocaml/Shape/Uid/Set/index.html | 2 +- dev/ocaml/Shape/Uid/T/index.html | 2 +- dev/ocaml/Shape/Uid/Tbl/index.html | 2 +- dev/ocaml/Shape/Uid/index.html | 2 +- dev/ocaml/Shape/index.html | 2 +- dev/ocaml/Share_constants/index.html | 2 +- dev/ocaml/Signature_group/index.html | 2 +- dev/ocaml/Simple_value_approx/index.html | 2 +- dev/ocaml/Simplif/index.html | 2 +- .../Simplify_boxed_int32/index.html | 2 +- .../Simplify_boxed_int64/index.html | 2 +- .../Simplify_boxed_nativeint/index.html | 2 +- .../Simplify_boxed_integer_ops/index.html | 2 +- .../index.html | 2 +- .../module-type-S/index.html | 2 +- dev/ocaml/Simplify_common/index.html | 2 +- dev/ocaml/Simplify_primitives/index.html | 2 +- dev/ocaml/Spill/index.html | 2 +- dev/ocaml/Split/index.html | 2 +- dev/ocaml/Static_exception/Map/index.html | 2 +- dev/ocaml/Static_exception/Set/index.html | 2 +- dev/ocaml/Static_exception/T/index.html | 2 +- dev/ocaml/Static_exception/Tbl/index.html | 2 +- dev/ocaml/Static_exception/index.html | 2 +- dev/ocaml/Std_exit/index.html | 2 +- dev/ocaml/Stdlib/Arg/index.html | 2 +- dev/ocaml/Stdlib/Array/index.html | 2 +- dev/ocaml/Stdlib/ArrayLabels/index.html | 2 +- dev/ocaml/Stdlib/Atomic/index.html | 2 +- dev/ocaml/Stdlib/Bigarray/Array0/index.html | 2 +- dev/ocaml/Stdlib/Bigarray/Array1/index.html | 2 +- dev/ocaml/Stdlib/Bigarray/Array2/index.html | 2 +- dev/ocaml/Stdlib/Bigarray/Array3/index.html | 2 +- dev/ocaml/Stdlib/Bigarray/Genarray/index.html | 2 +- dev/ocaml/Stdlib/Bigarray/index.html | 2 +- dev/ocaml/Stdlib/Bool/index.html | 2 +- dev/ocaml/Stdlib/Buffer/index.html | 2 +- dev/ocaml/Stdlib/Bytes/index.html | 2 +- dev/ocaml/Stdlib/BytesLabels/index.html | 2 +- dev/ocaml/Stdlib/Callback/index.html | 2 +- dev/ocaml/Stdlib/Char/index.html | 2 +- dev/ocaml/Stdlib/Complex/index.html | 2 +- dev/ocaml/Stdlib/Condition/index.html | 2 +- dev/ocaml/Stdlib/Digest/index.html | 2 +- dev/ocaml/Stdlib/Domain/DLS/index.html | 2 +- dev/ocaml/Stdlib/Domain/index.html | 2 +- dev/ocaml/Stdlib/Effect/Deep/index.html | 2 +- dev/ocaml/Stdlib/Effect/Shallow/index.html | 2 +- dev/ocaml/Stdlib/Effect/index.html | 2 +- dev/ocaml/Stdlib/Either/index.html | 2 +- .../Stdlib/Ephemeron/K1/Bucket/index.html | 2 +- .../Ephemeron/K1/Make/argument-1-H/index.html | 2 +- dev/ocaml/Stdlib/Ephemeron/K1/Make/index.html | 2 +- .../K1/MakeSeeded/argument-1-H/index.html | 2 +- .../Stdlib/Ephemeron/K1/MakeSeeded/index.html | 2 +- dev/ocaml/Stdlib/Ephemeron/K1/index.html | 2 +- .../Stdlib/Ephemeron/K2/Bucket/index.html | 2 +- .../K2/Make/argument-1-H1/index.html | 2 +- .../K2/Make/argument-2-H2/index.html | 2 +- dev/ocaml/Stdlib/Ephemeron/K2/Make/index.html | 2 +- .../K2/MakeSeeded/argument-1-H1/index.html | 2 +- .../K2/MakeSeeded/argument-2-H2/index.html | 2 +- .../Stdlib/Ephemeron/K2/MakeSeeded/index.html | 2 +- dev/ocaml/Stdlib/Ephemeron/K2/index.html | 2 +- .../Stdlib/Ephemeron/Kn/Bucket/index.html | 2 +- .../Ephemeron/Kn/Make/argument-1-H/index.html | 2 +- dev/ocaml/Stdlib/Ephemeron/Kn/Make/index.html | 2 +- .../Kn/MakeSeeded/argument-1-H/index.html | 2 +- .../Stdlib/Ephemeron/Kn/MakeSeeded/index.html | 2 +- dev/ocaml/Stdlib/Ephemeron/Kn/index.html | 2 +- dev/ocaml/Stdlib/Ephemeron/index.html | 2 +- .../Stdlib/Ephemeron/module-type-S/index.html | 2 +- .../Ephemeron/module-type-SeededS/index.html | 2 +- dev/ocaml/Stdlib/Filename/index.html | 2 +- dev/ocaml/Stdlib/Float/Array/index.html | 2 +- dev/ocaml/Stdlib/Float/ArrayLabels/index.html | 2 +- dev/ocaml/Stdlib/Float/index.html | 2 +- dev/ocaml/Stdlib/Format/index.html | 2 +- dev/ocaml/Stdlib/Fun/index.html | 2 +- dev/ocaml/Stdlib/Gc/Memprof/index.html | 2 +- dev/ocaml/Stdlib/Gc/index.html | 2 +- .../Hashtbl/Make/argument-1-H/index.html | 2 +- dev/ocaml/Stdlib/Hashtbl/Make/index.html | 2 +- .../MakeSeeded/argument-1-H/index.html | 2 +- .../Stdlib/Hashtbl/MakeSeeded/index.html | 2 +- dev/ocaml/Stdlib/Hashtbl/index.html | 2 +- .../Hashtbl/module-type-HashedType/index.html | 2 +- .../Stdlib/Hashtbl/module-type-S/index.html | 2 +- .../module-type-SeededHashedType/index.html | 2 +- .../Hashtbl/module-type-SeededS/index.html | 2 +- dev/ocaml/Stdlib/In_channel/index.html | 2 +- dev/ocaml/Stdlib/Int/index.html | 2 +- dev/ocaml/Stdlib/Int32/index.html | 2 +- dev/ocaml/Stdlib/Int64/index.html | 2 +- dev/ocaml/Stdlib/LargeFile/index.html | 2 +- dev/ocaml/Stdlib/Lazy/index.html | 2 +- dev/ocaml/Stdlib/Lexing/index.html | 2 +- dev/ocaml/Stdlib/List/index.html | 2 +- dev/ocaml/Stdlib/ListLabels/index.html | 2 +- .../Stdlib/Map/Make/argument-1-Ord/index.html | 2 +- dev/ocaml/Stdlib/Map/Make/index.html | 2 +- dev/ocaml/Stdlib/Map/index.html | 2 +- .../Map/module-type-OrderedType/index.html | 2 +- dev/ocaml/Stdlib/Map/module-type-S/index.html | 2 +- dev/ocaml/Stdlib/Marshal/index.html | 2 +- .../Hashtbl/Make/argument-1-H/index.html | 2 +- .../Stdlib/MoreLabels/Hashtbl/Make/index.html | 2 +- .../MakeSeeded/argument-1-H/index.html | 2 +- .../MoreLabels/Hashtbl/MakeSeeded/index.html | 2 +- .../Stdlib/MoreLabels/Hashtbl/index.html | 2 +- .../Hashtbl/module-type-HashedType/index.html | 2 +- .../Hashtbl/module-type-S/index.html | 2 +- .../module-type-SeededHashedType/index.html | 2 +- .../Hashtbl/module-type-SeededS/index.html | 2 +- .../Map/Make/argument-1-Ord/index.html | 2 +- .../Stdlib/MoreLabels/Map/Make/index.html | 2 +- dev/ocaml/Stdlib/MoreLabels/Map/index.html | 2 +- .../Map/module-type-OrderedType/index.html | 2 +- .../MoreLabels/Map/module-type-S/index.html | 2 +- .../Set/Make/argument-1-Ord/index.html | 2 +- .../Stdlib/MoreLabels/Set/Make/index.html | 2 +- dev/ocaml/Stdlib/MoreLabels/Set/index.html | 2 +- .../Set/module-type-OrderedType/index.html | 2 +- .../MoreLabels/Set/module-type-S/index.html | 2 +- dev/ocaml/Stdlib/MoreLabels/index.html | 2 +- dev/ocaml/Stdlib/Mutex/index.html | 2 +- dev/ocaml/Stdlib/Nativeint/index.html | 2 +- dev/ocaml/Stdlib/Obj/Closure/index.html | 2 +- dev/ocaml/Stdlib/Obj/Ephemeron/index.html | 2 +- .../Obj/Extension_constructor/index.html | 2 +- dev/ocaml/Stdlib/Obj/index.html | 2 +- dev/ocaml/Stdlib/Oo/index.html | 2 +- dev/ocaml/Stdlib/Option/index.html | 2 +- dev/ocaml/Stdlib/Out_channel/index.html | 2 +- dev/ocaml/Stdlib/Parsing/index.html | 2 +- dev/ocaml/Stdlib/Printexc/Slot/index.html | 2 +- dev/ocaml/Stdlib/Printexc/index.html | 2 +- dev/ocaml/Stdlib/Printf/index.html | 2 +- dev/ocaml/Stdlib/Queue/index.html | 2 +- dev/ocaml/Stdlib/Random/State/index.html | 2 +- dev/ocaml/Stdlib/Random/index.html | 2 +- dev/ocaml/Stdlib/Result/index.html | 2 +- dev/ocaml/Stdlib/Scanf/Scanning/index.html | 2 +- dev/ocaml/Stdlib/Scanf/index.html | 2 +- dev/ocaml/Stdlib/Semaphore/Binary/index.html | 2 +- .../Stdlib/Semaphore/Counting/index.html | 2 +- dev/ocaml/Stdlib/Semaphore/index.html | 2 +- dev/ocaml/Stdlib/Seq/index.html | 2 +- .../Stdlib/Set/Make/argument-1-Ord/index.html | 2 +- dev/ocaml/Stdlib/Set/Make/index.html | 2 +- dev/ocaml/Stdlib/Set/index.html | 2 +- .../Set/module-type-OrderedType/index.html | 2 +- dev/ocaml/Stdlib/Set/module-type-S/index.html | 2 +- dev/ocaml/Stdlib/Stack/index.html | 2 +- dev/ocaml/Stdlib/StdLabels/index.html | 2 +- dev/ocaml/Stdlib/String/index.html | 2 +- dev/ocaml/Stdlib/StringLabels/index.html | 2 +- .../Make/argument-1-Immediate/index.html | 2 +- .../Make/argument-2-Non_immediate/index.html | 2 +- .../Stdlib/Sys/Immediate64/Make/index.html | 2 +- dev/ocaml/Stdlib/Sys/Immediate64/index.html | 2 +- .../module-type-Immediate/index.html | 2 +- .../module-type-Non_immediate/index.html | 2 +- dev/ocaml/Stdlib/Sys/index.html | 2 +- dev/ocaml/Stdlib/Uchar/index.html | 2 +- dev/ocaml/Stdlib/Unit/index.html | 2 +- .../Stdlib/Weak/Make/argument-1-H/index.html | 2 +- dev/ocaml/Stdlib/Weak/Make/index.html | 2 +- dev/ocaml/Stdlib/Weak/index.html | 2 +- .../Stdlib/Weak/module-type-S/index.html | 2 +- dev/ocaml/Stdlib/index.html | 2 +- dev/ocaml/Str/index.html | 2 +- .../Strmatch/Make/argument-1-_/index.html | 2 +- dev/ocaml/Strmatch/Make/index.html | 2 +- dev/ocaml/Strmatch/index.html | 2 +- dev/ocaml/Strmatch/module-type-I/index.html | 2 +- .../Make/argument-1-Id/Map/index.html | 2 +- .../Make/argument-1-Id/Set/index.html | 2 +- .../Make/argument-1-Id/T/index.html | 2 +- .../Make/argument-1-Id/Tbl/index.html | 2 +- .../Make/argument-1-Id/index.html | 2 +- .../Make/index.html | 2 +- .../Strongly_connected_components/index.html | 2 +- .../module-type-S/Id/Map/index.html | 2 +- .../module-type-S/Id/Set/index.html | 2 +- .../module-type-S/Id/T/index.html | 2 +- .../module-type-S/Id/Tbl/index.html | 2 +- .../module-type-S/Id/index.html | 2 +- .../module-type-S/index.html | 2 +- dev/ocaml/Stypes/index.html | 2 +- dev/ocaml/Subst/Lazy/index.html | 2 +- dev/ocaml/Subst/index.html | 2 +- .../Switch/CtxStore/argument-1-A/index.html | 2 +- dev/ocaml/Switch/CtxStore/index.html | 2 +- .../Switch/Make/argument-1-Arg/index.html | 2 +- dev/ocaml/Switch/Make/index.html | 2 +- .../Switch/Store/argument-1-A/index.html | 2 +- dev/ocaml/Switch/Store/index.html | 2 +- dev/ocaml/Switch/index.html | 2 +- .../Switch/module-type-CtxStored/index.html | 2 +- dev/ocaml/Switch/module-type-S/index.html | 2 +- .../Switch/module-type-Stored/index.html | 2 +- dev/ocaml/Symbol/Map/index.html | 2 +- dev/ocaml/Symbol/Set/index.html | 2 +- dev/ocaml/Symbol/T/index.html | 2 +- dev/ocaml/Symbol/Tbl/index.html | 2 +- dev/ocaml/Symbol/index.html | 2 +- dev/ocaml/Symtable/index.html | 2 +- dev/ocaml/Syntaxerr/index.html | 2 +- dev/ocaml/Tag/Map/index.html | 2 +- dev/ocaml/Tag/Set/index.html | 2 +- dev/ocaml/Tag/T/index.html | 2 +- dev/ocaml/Tag/Tbl/index.html | 2 +- dev/ocaml/Tag/index.html | 2 +- dev/ocaml/Targetint/index.html | 2 +- dev/ocaml/Tast_iterator/index.html | 2 +- dev/ocaml/Tast_mapper/index.html | 2 +- dev/ocaml/Terminfo/index.html | 2 +- dev/ocaml/Thread/index.html | 2 +- dev/ocaml/Tmc/index.html | 2 +- dev/ocaml/Topcommon/index.html | 2 +- dev/ocaml/Topdirs/index.html | 2 +- dev/ocaml/Topeval/index.html | 2 +- dev/ocaml/Tophooks/index.html | 2 +- dev/ocaml/Toploop/index.html | 2 +- dev/ocaml/Topmain/index.html | 2 +- dev/ocaml/Topstart/index.html | 2 +- dev/ocaml/Trace/index.html | 2 +- dev/ocaml/Translattribute/index.html | 2 +- dev/ocaml/Translclass/index.html | 2 +- dev/ocaml/Translcore/index.html | 2 +- dev/ocaml/Translmod/index.html | 2 +- dev/ocaml/Translobj/index.html | 2 +- dev/ocaml/Translprim/index.html | 2 +- .../Traverse_for_exported_symbols/index.html | 2 +- dev/ocaml/Type_immediacy/Violation/index.html | 2 +- dev/ocaml/Type_immediacy/index.html | 2 +- dev/ocaml/Typeclass/index.html | 2 +- dev/ocaml/Typecore/Datatype_kind/index.html | 2 +- dev/ocaml/Typecore/index.html | 2 +- dev/ocaml/Typedecl/index.html | 2 +- dev/ocaml/Typedecl_immediacy/index.html | 2 +- dev/ocaml/Typedecl_properties/index.html | 2 +- dev/ocaml/Typedecl_separability/index.html | 2 +- dev/ocaml/Typedecl_unboxed/index.html | 2 +- dev/ocaml/Typedecl_variance/index.html | 2 +- dev/ocaml/Typedtree/index.html | 2 +- .../Typemod/Sig_component_kind/index.html | 2 +- dev/ocaml/Typemod/Signature_names/index.html | 2 +- dev/ocaml/Typemod/index.html | 2 +- dev/ocaml/Typeopt/index.html | 2 +- dev/ocaml/Types/MethSet/index.html | 2 +- dev/ocaml/Types/Meths/index.html | 2 +- dev/ocaml/Types/Separability/index.html | 2 +- dev/ocaml/Types/TransientTypeOps/index.html | 2 +- dev/ocaml/Types/Transient_expr/index.html | 2 +- dev/ocaml/Types/VarSet/index.html | 2 +- dev/ocaml/Types/Variance/index.html | 2 +- dev/ocaml/Types/Vars/index.html | 2 +- dev/ocaml/Types/index.html | 2 +- dev/ocaml/Typetexp/index.html | 2 +- dev/ocaml/Un_anf/index.html | 2 +- dev/ocaml/Unbox_closures/index.html | 2 +- .../Unbox_free_vars_of_closures/index.html | 2 +- dev/ocaml/Unbox_specialised_args/index.html | 2 +- dev/ocaml/Unix/LargeFile/index.html | 2 +- dev/ocaml/Unix/index.html | 2 +- dev/ocaml/UnixLabels/LargeFile/index.html | 2 +- dev/ocaml/UnixLabels/index.html | 2 +- dev/ocaml/Untypeast/index.html | 2 +- dev/ocaml/Var_within_closure/Map/index.html | 2 +- dev/ocaml/Var_within_closure/Set/index.html | 2 +- dev/ocaml/Var_within_closure/T/index.html | 2 +- dev/ocaml/Var_within_closure/Tbl/index.html | 2 +- dev/ocaml/Var_within_closure/index.html | 2 +- dev/ocaml/Variable/Map/index.html | 2 +- dev/ocaml/Variable/Pair/Map/index.html | 2 +- dev/ocaml/Variable/Pair/Set/index.html | 2 +- dev/ocaml/Variable/Pair/T/index.html | 2 +- dev/ocaml/Variable/Pair/Tbl/index.html | 2 +- dev/ocaml/Variable/Pair/index.html | 2 +- dev/ocaml/Variable/Set/index.html | 2 +- dev/ocaml/Variable/T/index.html | 2 +- dev/ocaml/Variable/Tbl/index.html | 2 +- dev/ocaml/Variable/index.html | 2 +- dev/ocaml/Warnings/index.html | 2 +- dev/ocaml/X86_ast/index.html | 2 +- dev/ocaml/X86_dsl/D/index.html | 2 +- dev/ocaml/X86_dsl/I/index.html | 2 +- dev/ocaml/X86_dsl/index.html | 2 +- dev/ocaml/X86_gas/index.html | 2 +- dev/ocaml/X86_masm/index.html | 2 +- dev/ocaml/X86_proc/index.html | 2 +- dev/ocaml/index.html | 2 +- 1014 files changed, 1075 insertions(+), 1050 deletions(-) create mode 100644 dev/moonpool/Moonpool/Fifo_pool/For_runner_implementors/index.html create mode 100644 dev/moonpool/Moonpool/Fifo_pool/index.html delete mode 100644 dev/moonpool/Moonpool/Fut/Infix/argument-1-_/index.html delete mode 100644 dev/moonpool/Moonpool/Fut/Infix_local/index.html delete mode 100644 dev/moonpool/Moonpool/Fut/module-type-INFIX/index.html create mode 100644 dev/moonpool/Moonpool/Immediate_runner/For_runner_implementors/index.html create mode 100644 dev/moonpool/Moonpool/Immediate_runner/index.html delete mode 100644 dev/moonpool/Moonpool/Pool/For_runner_implementors/index.html delete mode 100644 dev/moonpool/Moonpool/Pool/index.html delete mode 100644 dev/moonpool/Moonpool/Suspend_/index.html create mode 100644 dev/moonpool/Moonpool/Thread_local_storage/index.html create mode 100644 dev/moonpool/Moonpool/Ws_pool/For_runner_implementors/index.html create mode 100644 dev/moonpool/Moonpool/Ws_pool/index.html diff --git a/dev/either/Either/index.html b/dev/either/Either/index.html index 0fc6840d..788ef294 100644 --- a/dev/either/Either/index.html +++ b/dev/either/Either/index.html @@ -1,5 +1,5 @@ -Either (either.Either)

Module Either

type ('a, 'b) t = ('a, 'b) Stdlib.Either.t =
  1. | Left of 'a
  2. | Right of 'b

This module defines the common Either interface that is provided for all OCaml versions. For documentation of these functions, refer to the standard library.

val left : 'a -> ('a, 'b) t
val right : 'b -> ('a, 'b) t
val is_left : ('a, 'b) t -> bool
val is_right : ('a, 'b) t -> bool
val find_left : ('a, 'b) t -> 'a option
val find_right : ('a, 'b) t -> 'b option
val map_left : ('a1 -> 'a2) -> ('a1, 'b) t -> ('a2, 'b) t
val map_right : ('b1 -> 'b2) -> ('a, 'b1) t -> ('a, 'b2) t
val map : +Either (either.Either)

Module Either

type ('a, 'b) t = ('a, 'b) Stdlib.Either.t =
  1. | Left of 'a
  2. | Right of 'b

This module defines the common Either interface that is provided for all OCaml versions. For documentation of these functions, refer to the standard library.

val left : 'a -> ('a, 'b) t
val right : 'b -> ('a, 'b) t
val is_left : ('a, 'b) t -> bool
val is_right : ('a, 'b) t -> bool
val find_left : ('a, 'b) t -> 'a option
val find_right : ('a, 'b) t -> 'b option
val map_left : ('a1 -> 'a2) -> ('a1, 'b) t -> ('a2, 'b) t
val map_right : ('b1 -> 'b2) -> ('a, 'b1) t -> ('a, 'b2) t
val map : left:('a1 -> 'a2) -> right:('b1 -> 'b2) -> ('a1, 'b1) t -> diff --git a/dev/either/index.html b/dev/either/index.html index efc6d58f..5793f4b5 100644 --- a/dev/either/index.html +++ b/dev/either/index.html @@ -1,2 +1,2 @@ -index (either.index)

Package either

Package info

changes-files
license-files
readme-files
+index (either.index)

Package either

Package info

changes-files
license-files
readme-files
diff --git a/dev/moonpool/Moonpool/Atomic/index.html b/dev/moonpool/Moonpool/Atomic/index.html index 300f600c..ca57fc78 100644 --- a/dev/moonpool/Moonpool/Atomic/index.html +++ b/dev/moonpool/Moonpool/Atomic/index.html @@ -1,2 +1,2 @@ -Atomic (moonpool.Moonpool.Atomic)

Module Moonpool.Atomic

Atomic values.

This is either a shim using ref, on pre-OCaml 5, or the standard Atomic module on OCaml 5.

include module type of struct include Stdlib.Atomic end
type !'a t = 'a Stdlib.Atomic.t

An atomic (mutable) reference to a value of type 'a.

val make : 'a -> 'a t

Create an atomic reference.

val get : 'a t -> 'a

Get the current value of the atomic reference.

val set : 'a t -> 'a -> unit

Set a new value for the atomic reference.

val exchange : 'a t -> 'a -> 'a

Set a new value for the atomic reference, and return the current value.

val compare_and_set : 'a t -> 'a -> 'a -> bool

compare_and_set r seen v sets the new value of r to v only if its current value is physically equal to seen -- the comparison and the set occur atomically. Returns true if the comparison succeeded (so the set happened) and false otherwise.

val fetch_and_add : int t -> int -> int

fetch_and_add r n atomically increments the value of r by n, and returns the current value (before the increment).

val incr : int t -> unit

incr r atomically increments the value of r by 1.

val decr : int t -> unit

decr r atomically decrements the value of r by 1.

+Atomic (moonpool.Moonpool.Atomic)

Module Moonpool.Atomic

Atomic values.

This is either a shim using ref, on pre-OCaml 5, or the standard Atomic module on OCaml 5.

include module type of struct include Stdlib.Atomic end
type !'a t = 'a Stdlib.Atomic.t

An atomic (mutable) reference to a value of type 'a.

val make : 'a -> 'a t

Create an atomic reference.

val get : 'a t -> 'a

Get the current value of the atomic reference.

val set : 'a t -> 'a -> unit

Set a new value for the atomic reference.

val exchange : 'a t -> 'a -> 'a

Set a new value for the atomic reference, and return the current value.

val compare_and_set : 'a t -> 'a -> 'a -> bool

compare_and_set r seen v sets the new value of r to v only if its current value is physically equal to seen -- the comparison and the set occur atomically. Returns true if the comparison succeeded (so the set happened) and false otherwise.

val fetch_and_add : int t -> int -> int

fetch_and_add r n atomically increments the value of r by n, and returns the current value (before the increment).

val incr : int t -> unit

incr r atomically increments the value of r by 1.

val decr : int t -> unit

decr r atomically decrements the value of r by 1.

diff --git a/dev/moonpool/Moonpool/Blocking_queue/index.html b/dev/moonpool/Moonpool/Blocking_queue/index.html index a8bdf072..91897a43 100644 --- a/dev/moonpool/Moonpool/Blocking_queue/index.html +++ b/dev/moonpool/Moonpool/Blocking_queue/index.html @@ -1,5 +1,5 @@ -Blocking_queue (moonpool.Moonpool.Blocking_queue)

Module Moonpool.Blocking_queue

A simple blocking queue.

This queue is quite basic and will not behave well under heavy contention. However, it can be sufficient for many practical use cases.

NOTE: this queue will typically block the caller thread in case the operation (push/pop) cannot proceed. Be wary of deadlocks when using the queue from a pool when you expect the other end to also be produced/consumed from the same pool.

See discussion on Fut.wait_block for more details on deadlocks and how to mitigate the risk of running into them.

More scalable queues can be found in Lockfree (https://github.com/ocaml-multicore/lockfree/)

type 'a t

Unbounded blocking queue.

This queue is thread-safe and will block when calling pop on it when it's empty.

val create : unit -> _ t

Create a new unbounded queue.

val size : _ t -> int

Number of items currently in the queue. Note that pop might still block if this returns a non-zero number, since another thread might have consumed the items in the mean time.

  • since 0.2
exception Closed
val push : 'a t -> 'a -> unit

push q x pushes x into q, and returns ().

In the current implementation, push q will never block for a long time, it will only block while waiting for a lock so it can push the element.

  • raises Closed

    if the queue is closed (by a previous call to close q)

val pop : 'a t -> 'a

pop q pops the next element in q. It might block until an element comes.

  • raises Closed

    if the queue was closed before a new element was available.

val close : _ t -> unit

Close the queue, meaning there won't be any more push allowed, ie push will raise Closed.

pop will keep working and will return the elements present in the queue, until it's entirely drained; then pop will also raise Closed.

val try_pop : force_lock:bool -> 'a t -> 'a option

try_pop q immediately pops the first element of q, if any, or returns None without blocking.

  • parameter force_lock

    if true, use Mutex.lock (which can block under contention); if false, use Mutex.try_lock, which might return None even in presence of an element if there's contention

val try_push : 'a t -> 'a -> bool

try_push q x tries to push into q, in which case it returns true; or it fails to push and returns false without blocking.

  • raises Closed

    if the locking succeeded but the queue is closed.

val transfer : 'a t -> 'a Stdlib.Queue.t -> unit

transfer bq q2 transfers all items presently in bq into q2 in one atomic section, and clears bq. It blocks if no element is in bq.

This is useful to consume elements from the queue in batch. Create a Queue.t locally:

let dowork (work_queue: job Bb_queue.t) =
+Blocking_queue (moonpool.Moonpool.Blocking_queue)

Module Moonpool.Blocking_queue

A simple blocking queue.

This queue is quite basic and will not behave well under heavy contention. However, it can be sufficient for many practical use cases.

NOTE: this queue will typically block the caller thread in case the operation (push/pop) cannot proceed. Be wary of deadlocks when using the queue from a pool when you expect the other end to also be produced/consumed from the same pool.

See discussion on Fut.wait_block for more details on deadlocks and how to mitigate the risk of running into them.

More scalable queues can be found in Lockfree (https://github.com/ocaml-multicore/lockfree/)

type 'a t

Unbounded blocking queue.

This queue is thread-safe and will block when calling pop on it when it's empty.

val create : unit -> _ t

Create a new unbounded queue.

val size : _ t -> int

Number of items currently in the queue. Note that pop might still block if this returns a non-zero number, since another thread might have consumed the items in the mean time.

  • since 0.2
exception Closed
val push : 'a t -> 'a -> unit

push q x pushes x into q, and returns ().

In the current implementation, push q will never block for a long time, it will only block while waiting for a lock so it can push the element.

  • raises Closed

    if the queue is closed (by a previous call to close q)

val pop : 'a t -> 'a

pop q pops the next element in q. It might block until an element comes.

  • raises Closed

    if the queue was closed before a new element was available.

val close : _ t -> unit

Close the queue, meaning there won't be any more push allowed, ie push will raise Closed.

pop will keep working and will return the elements present in the queue, until it's entirely drained; then pop will also raise Closed.

val try_pop : force_lock:bool -> 'a t -> 'a option

try_pop q immediately pops the first element of q, if any, or returns None without blocking.

  • parameter force_lock

    if true, use Mutex.lock (which can block under contention); if false, use Mutex.try_lock, which might return None even in presence of an element if there's contention

val try_push : 'a t -> 'a -> bool

try_push q x tries to push into q, in which case it returns true; or it fails to push and returns false without blocking.

  • raises Closed

    if the locking succeeded but the queue is closed.

val transfer : 'a t -> 'a Stdlib.Queue.t -> unit

transfer bq q2 transfers all items presently in bq into q2 in one atomic section, and clears bq. It blocks if no element is in bq.

This is useful to consume elements from the queue in batch. Create a Queue.t locally:

let dowork (work_queue: job Bb_queue.t) =
   (* local queue, not thread safe *)
   let local_q = Queue.create() in
   try
diff --git a/dev/moonpool/Moonpool/Bounded_queue/index.html b/dev/moonpool/Moonpool/Bounded_queue/index.html
index 8fc91ff4..4b4b06b9 100644
--- a/dev/moonpool/Moonpool/Bounded_queue/index.html
+++ b/dev/moonpool/Moonpool/Bounded_queue/index.html
@@ -1,2 +1,2 @@
 
-Bounded_queue (moonpool.Moonpool.Bounded_queue)

Module Moonpool.Bounded_queue

A blocking queue of finite size.

This queue, while still using locks underneath (like the regular blocking queue) should be enough for usage under reasonable contention.

The bounded size is helpful whenever some form of backpressure is desirable: if the queue is used to communicate between producer(s) and consumer(s), the consumer(s) can limit the rate at which producer(s) send new work down their way. Whenever the queue is full, means that producer(s) will have to wait before pushing new work.

  • since 0.4
type 'a t

A bounded queue.

val create : max_size:int -> unit -> 'a t
val close : _ t -> unit

close q closes q. No new elements can be pushed into q, and after all the elements still in q currently are pop'd, pop will also raise Closed.

exception Closed
val push : 'a t -> 'a -> unit

push q x pushes x at the end of the queue. If q is full, this will block until there is room for x.

val try_push : force_lock:bool -> 'a t -> 'a -> bool

try_push q x attempts to push x into q, but abandons if it cannot acquire q or if q is full.

  • parameter force_lock

    if true, use Mutex.lock (which can block under contention); if false, use Mutex.try_lock, which might return false even if there's room in the queue.

val pop : 'a t -> 'a

pop q pops the first element off q. It blocks if q is empty, until some element becomes available.

  • raises Closed

    if q is empty and closed.

val try_pop : force_lock:bool -> 'a t -> 'a option

try_pop ~force_lock q tries to pop the first element, or returns None if no element is available or if it failed to acquire q.

  • parameter force_lock

    if true, use Mutex.lock (which can block under contention); if false, use Mutex.try_lock, which might return None even in presence of an element if there's contention.

  • raises Closed

    if q is empty and closed.

val size : _ t -> int

Number of elements currently in q

val max_size : _ t -> int

Maximum size of the queue. See create.

val transfer : 'a t -> 'a Stdlib.Queue.t -> unit

transfer bq q2 transfers all elements currently available in bq into local queue q2, and clears bq, atomically. It blocks if bq is empty.

See Bb_queue.transfer for more details.

  • raises Closed

    if bq is empty and closed.

type 'a gen = unit -> 'a option
type 'a iter = ('a -> unit) -> unit
val to_iter : 'a t -> 'a iter

to_iter q returns an iterator over all items in the queue. This might not terminate if q is never closed.

val to_gen : 'a t -> 'a gen

to_gen q returns a generator from the queue.

val to_seq : 'a t -> 'a Stdlib.Seq.t

to_gen q returns a (transient) sequence from the queue.

+Bounded_queue (moonpool.Moonpool.Bounded_queue)

Module Moonpool.Bounded_queue

A blocking queue of finite size.

This queue, while still using locks underneath (like the regular blocking queue) should be enough for usage under reasonable contention.

The bounded size is helpful whenever some form of backpressure is desirable: if the queue is used to communicate between producer(s) and consumer(s), the consumer(s) can limit the rate at which producer(s) send new work down their way. Whenever the queue is full, means that producer(s) will have to wait before pushing new work.

  • since 0.4
type 'a t

A bounded queue.

val create : max_size:int -> unit -> 'a t
val close : _ t -> unit

close q closes q. No new elements can be pushed into q, and after all the elements still in q currently are pop'd, pop will also raise Closed.

exception Closed
val push : 'a t -> 'a -> unit

push q x pushes x at the end of the queue. If q is full, this will block until there is room for x.

val try_push : force_lock:bool -> 'a t -> 'a -> bool

try_push q x attempts to push x into q, but abandons if it cannot acquire q or if q is full.

  • parameter force_lock

    if true, use Mutex.lock (which can block under contention); if false, use Mutex.try_lock, which might return false even if there's room in the queue.

val pop : 'a t -> 'a

pop q pops the first element off q. It blocks if q is empty, until some element becomes available.

  • raises Closed

    if q is empty and closed.

val try_pop : force_lock:bool -> 'a t -> 'a option

try_pop ~force_lock q tries to pop the first element, or returns None if no element is available or if it failed to acquire q.

  • parameter force_lock

    if true, use Mutex.lock (which can block under contention); if false, use Mutex.try_lock, which might return None even in presence of an element if there's contention.

  • raises Closed

    if q is empty and closed.

val size : _ t -> int

Number of elements currently in q

val max_size : _ t -> int

Maximum size of the queue. See create.

val transfer : 'a t -> 'a Stdlib.Queue.t -> unit

transfer bq q2 transfers all elements currently available in bq into local queue q2, and clears bq, atomically. It blocks if bq is empty.

See Bb_queue.transfer for more details.

  • raises Closed

    if bq is empty and closed.

type 'a gen = unit -> 'a option
type 'a iter = ('a -> unit) -> unit
val to_iter : 'a t -> 'a iter

to_iter q returns an iterator over all items in the queue. This might not terminate if q is never closed.

val to_gen : 'a t -> 'a gen

to_gen q returns a generator from the queue.

val to_seq : 'a t -> 'a Stdlib.Seq.t

to_gen q returns a (transient) sequence from the queue.

diff --git a/dev/moonpool/Moonpool/Chan/index.html b/dev/moonpool/Moonpool/Chan/index.html index ceddb063..c0f57d5a 100644 --- a/dev/moonpool/Moonpool/Chan/index.html +++ b/dev/moonpool/Moonpool/Chan/index.html @@ -1,2 +1,2 @@ -Chan (moonpool.Moonpool.Chan)

Module Moonpool.Chan

Channels.

Channels are pipelines of values where threads can push into one end, and pull from the other end.

Unlike Moonpool.Blocking_queue, channels are designed so that pushing never blocks, and pop'ing values returns a future.

  • since 0.3
type 'a or_error = 'a Fut.or_error
type 'a t

Channel carrying values of type 'a.

val create : unit -> 'a t

Create a channel.

exception Closed
val push : 'a t -> 'a -> unit

push chan x pushes x into chan. This does not block.

  • raises Closed

    if the channel is closed.

val pop : 'a t -> 'a Fut.t

Pop an element. This returns a future that will be fulfilled when an element is available.

  • raises Closed

    if the channel is closed, or fails the future if the channel is closed before an element is available for it.

val try_pop : 'a t -> 'a option

try_pop chan pops and return an element if one is available immediately. Otherwise it returns None.

val pop_block_exn : 'a t -> 'a

Like pop, but blocks if an element is not available immediately. The precautions around blocking from inside a thread pool are the same as explained in Fut.wait_block.

val close : _ t -> unit

Close the channel. Further push and pop calls will fail. This is idempotent.

val pop_await : 'a t -> 'a

Like pop but suspends the current thread until an element is available. See await for more details.

  • since 0.3
+Chan (moonpool.Moonpool.Chan)

Module Moonpool.Chan

Channels.

Channels are pipelines of values where threads can push into one end, and pull from the other end.

Unlike Moonpool.Blocking_queue, channels are designed so that pushing never blocks, and pop'ing values returns a future.

  • since 0.3
type 'a or_error = 'a Fut.or_error
type 'a t

Channel carrying values of type 'a.

val create : unit -> 'a t

Create a channel.

exception Closed
val push : 'a t -> 'a -> unit

push chan x pushes x into chan. This does not block.

  • raises Closed

    if the channel is closed.

val pop : 'a t -> 'a Fut.t

Pop an element. This returns a future that will be fulfilled when an element is available.

  • raises Closed

    if the channel is closed, or fails the future if the channel is closed before an element is available for it.

val try_pop : 'a t -> 'a option

try_pop chan pops and return an element if one is available immediately. Otherwise it returns None.

val pop_block_exn : 'a t -> 'a

Like pop, but blocks if an element is not available immediately. The precautions around blocking from inside a thread pool are the same as explained in Fut.wait_block.

val close : _ t -> unit

Close the channel. Further push and pop calls will fail. This is idempotent.

val pop_await : 'a t -> 'a

Like pop but suspends the current thread until an element is available. See await for more details.

  • since 0.3
diff --git a/dev/moonpool/Moonpool/Fifo_pool/For_runner_implementors/index.html b/dev/moonpool/Moonpool/Fifo_pool/For_runner_implementors/index.html new file mode 100644 index 00000000..c677347f --- /dev/null +++ b/dev/moonpool/Moonpool/Fifo_pool/For_runner_implementors/index.html @@ -0,0 +1,8 @@ + +For_runner_implementors (moonpool.Moonpool.Fifo_pool.For_runner_implementors)

Module Fifo_pool.For_runner_implementors

This module is specifically intended for users who implement their own runners. Regular users of Moonpool should not need to look at it.

val create : + size:(unit -> int) -> + num_tasks:(unit -> int) -> + shutdown:(wait:bool -> unit -> unit) -> + run_async:(task -> unit) -> + unit -> + t

Create a new runner.

NOTE: the runner should support DLA and Suspend_ on OCaml 5.x, so that Fork_join and other 5.x features work properly.

val k_cur_runner : t option ref Moonpool__.Thread_local_storage_.key
diff --git a/dev/moonpool/Moonpool/Fifo_pool/index.html b/dev/moonpool/Moonpool/Fifo_pool/index.html new file mode 100644 index 00000000..5807c2a0 --- /dev/null +++ b/dev/moonpool/Moonpool/Fifo_pool/index.html @@ -0,0 +1,8 @@ + +Fifo_pool (moonpool.Moonpool.Fifo_pool)

Module Moonpool.Fifo_pool

A simple thread pool in FIFO order.

FIFO: first-in, first-out. Basically tasks are put into a queue, and worker threads pull them out of the queue at the other end.

Since this uses a single blocking queue to manage tasks, it's very simple and reliable. The number of worker threads is fixed, but they are spread over several domains to enable parallelism.

This can be useful for latency-sensitive applications (e.g. as a pool of workers for network servers). Work-stealing pools might have higher throughput but they're very unfair to some tasks; by contrast, here, older tasks have priority over younger tasks.

  • since NEXT_RELEASE
include module type of Runner
type task = unit -> unit
type t

A runner.

If a runner is no longer needed, shutdown can be used to signal all worker threads in it to stop (after they finish their work), and wait for them to stop.

The threads are distributed across a fixed domain pool (whose size is determined by Domain.recommended_domain_count on OCaml 5, and simple the single runtime on OCaml 4).

val size : t -> int

Number of threads/workers.

val num_tasks : t -> int

Current number of tasks. This is at best a snapshot, useful for metrics and debugging.

val shutdown : t -> unit

Shutdown the runner and wait for it to terminate. Idempotent.

val shutdown_without_waiting : t -> unit

Shutdown the pool, and do not wait for it to terminate. Idempotent.

exception Shutdown
val run_async : t -> task -> unit

run_async pool f schedules f for later execution on the runner in one of the threads. f() will run on one of the runner's worker threads/domains.

  • raises Shutdown

    if the runner was shut down before run_async was called.

val run_wait_block : t -> (unit -> 'a) -> 'a

run_wait_block pool f schedules f for later execution on the pool, like run_async. It then blocks the current thread until f() is done executing, and returns its result. If f() raises an exception, then run_wait_block pool f will raise it as well.

NOTE be careful with deadlocks (see notes in Fut.wait_block about the required discipline to avoid deadlocks).

module For_runner_implementors : sig ... end

This module is specifically intended for users who implement their own runners. Regular users of Moonpool should not need to look at it.

val get_current_runner : unit -> t option

Access the current runner. This returns Some r if the call happens on a thread that belongs in a runner.

  • since NEXT_RELEASE
type ('a, 'b) create_args = + ?on_init_thread:(dom_id:int -> t_id:int -> unit -> unit) -> + ?on_exit_thread:(dom_id:int -> t_id:int -> unit -> unit) -> + ?on_exn:(exn -> Stdlib.Printexc.raw_backtrace -> unit) -> + ?around_task:((t -> 'b) * (t -> 'b -> unit)) -> + ?num_threads:int -> + 'a

Arguments used in create. See create for explanations.

val create : (unit -> t, _) create_args

create () makes a new thread pool.

  • parameter on_init_thread

    called at the beginning of each new thread in the pool.

  • parameter min

    minimum size of the pool. See Pool.create_args. The default is Domain.recommended_domain_count(), ie one worker per CPU core. On OCaml 4 the default is 4 (since there is only one domain).

  • parameter on_exit_thread

    called at the end of each worker thread in the pool.

  • parameter around_task

    a pair of before, after functions ran around each task. See Pool.create_args.

val with_ : (unit -> (t -> 'a) -> 'a, _) create_args

with_ () f calls f pool, where pool is obtained via create. When f pool returns or fails, pool is shutdown and its resources are released. Most parameters are the same as in create.

diff --git a/dev/moonpool/Moonpool/Fork_join/index.html b/dev/moonpool/Moonpool/Fork_join/index.html index 49c90814..49950463 100644 --- a/dev/moonpool/Moonpool/Fork_join/index.html +++ b/dev/moonpool/Moonpool/Fork_join/index.html @@ -1,5 +1,5 @@ -Fork_join (moonpool.Moonpool.Fork_join)

Module Moonpool.Fork_join

Fork-join primitives.

NOTE These are only available on OCaml 5.0 and above.

  • since 0.3
val both : (unit -> 'a) -> (unit -> 'b) -> 'a * 'b

both f g runs f() and g(), potentially in parallel, and returns their result when both are done. If any of f() and g() fails, then the whole computation fails.

This must be run from within the pool: for example, inside Pool.run or inside a Fut.spawn computation. This is because it relies on an effect handler to be installed.

  • since 0.3

NOTE this is only available on OCaml 5.

val both_ignore : (unit -> _) -> (unit -> _) -> unit

Same as both f g |> ignore.

  • since 0.3

NOTE this is only available on OCaml 5.

val for_ : ?chunk_size:int -> int -> (int -> int -> unit) -> unit

for_ n f is the parallel version of for i=0 to n-1 do f i done.

f is called with parameters low and high and must use them like so:

for j = low to high do (* … actual work *) done 

. If chunk_size=1 then low=high and the loop is not actually needed.

  • parameter chunk_size

    controls the granularity of parallelism. The default chunk size is not specified. See all_array or all_list for more details.

    Example:

    let total_sum = Atomic.make 0
    +Fork_join (moonpool.Moonpool.Fork_join)

    Module Moonpool.Fork_join

    Fork-join primitives.

    NOTE These are only available on OCaml 5.0 and above.

    • since 0.3
    val both : (unit -> 'a) -> (unit -> 'b) -> 'a * 'b

    both f g runs f() and g(), potentially in parallel, and returns their result when both are done. If any of f() and g() fails, then the whole computation fails.

    This must be run from within the pool: for example, inside Pool.run or inside a Fut.spawn computation. This is because it relies on an effect handler to be installed.

    • since 0.3

    NOTE this is only available on OCaml 5.

    val both_ignore : (unit -> _) -> (unit -> _) -> unit

    Same as both f g |> ignore.

    • since 0.3

    NOTE this is only available on OCaml 5.

    val for_ : ?chunk_size:int -> int -> (int -> int -> unit) -> unit

    for_ n f is the parallel version of for i=0 to n-1 do f i done.

    f is called with parameters low and high and must use them like so:

    for j = low to high do (* … actual work *) done 

    . If chunk_size=1 then low=high and the loop is not actually needed.

    • parameter chunk_size

      controls the granularity of parallelism. The default chunk size is not specified. See all_array or all_list for more details.

      Example:

      let total_sum = Atomic.make 0
       
       let() = for_ ~chunk_size:5 100
         (fun low high ->
      diff --git a/dev/moonpool/Moonpool/Fut/Infix/argument-1-_/index.html b/dev/moonpool/Moonpool/Fut/Infix/argument-1-_/index.html
      deleted file mode 100644
      index b48f447b..00000000
      --- a/dev/moonpool/Moonpool/Fut/Infix/argument-1-_/index.html
      +++ /dev/null
      @@ -1,2 +0,0 @@
      -
      -_ (moonpool.Moonpool.Fut.Infix._)

      Parameter Infix._

      val pool : Runner.t
      diff --git a/dev/moonpool/Moonpool/Fut/Infix/index.html b/dev/moonpool/Moonpool/Fut/Infix/index.html index 1a420e4c..737440a4 100644 --- a/dev/moonpool/Moonpool/Fut/Infix/index.html +++ b/dev/moonpool/Moonpool/Fut/Infix/index.html @@ -1,2 +1,2 @@ -Infix (moonpool.Moonpool.Fut.Infix)

      Module Fut.Infix

      Make infix combinators, with intermediate computations running on the given pool.

      Parameters

      module _ : sig ... end

      Signature

      val (>|=) : 'a t -> ('a -> 'b) -> 'b t
      val (>>=) : 'a t -> ('a -> 'b t) -> 'b t
      val let+ : 'a t -> ('a -> 'b) -> 'b t
      val and+ : 'a t -> 'b t -> ('a * 'b) t
      val let* : 'a t -> ('a -> 'b t) -> 'b t
      val and* : 'a t -> 'b t -> ('a * 'b) t
      +Infix (moonpool.Moonpool.Fut.Infix)

      Module Fut.Infix

      • since NEXT_RELEASE
      val (>|=) : 'a t -> ('a -> 'b) -> 'b t
      val (>>=) : 'a t -> ('a -> 'b t) -> 'b t
      val let+ : 'a t -> ('a -> 'b) -> 'b t
      val and+ : 'a t -> 'b t -> ('a * 'b) t
      val let* : 'a t -> ('a -> 'b t) -> 'b t
      val and* : 'a t -> 'b t -> ('a * 'b) t
      diff --git a/dev/moonpool/Moonpool/Fut/Infix_local/index.html b/dev/moonpool/Moonpool/Fut/Infix_local/index.html deleted file mode 100644 index bcb7bfc4..00000000 --- a/dev/moonpool/Moonpool/Fut/Infix_local/index.html +++ /dev/null @@ -1,2 +0,0 @@ - -Infix_local (moonpool.Moonpool.Fut.Infix_local)

      Module Fut.Infix_local

      Operators that run on the same thread as the first future.

      val (>|=) : 'a t -> ('a -> 'b) -> 'b t
      val (>>=) : 'a t -> ('a -> 'b t) -> 'b t
      val let+ : 'a t -> ('a -> 'b) -> 'b t
      val and+ : 'a t -> 'b t -> ('a * 'b) t
      val let* : 'a t -> ('a -> 'b t) -> 'b t
      val and* : 'a t -> 'b t -> ('a * 'b) t
      diff --git a/dev/moonpool/Moonpool/Fut/index.html b/dev/moonpool/Moonpool/Fut/index.html index 2a11d383..58440db7 100644 --- a/dev/moonpool/Moonpool/Fut/index.html +++ b/dev/moonpool/Moonpool/Fut/index.html @@ -1,2 +1,2 @@ -Fut (moonpool.Moonpool.Fut)

      Module Moonpool.Fut

      Futures.

      A future of type 'a t represents the result of a computation that will yield a value of type 'a.

      Typically, the computation is running on a thread pool Runner.t and will proceed on some worker. Once set, a future cannot change. It either succeeds (storing a Ok x with x: 'a), or fail (storing a Error (exn, bt) with an exception and the corresponding backtrace).

      Combinators such as map and join_array can be used to produce futures from other futures (in a monadic way). Some combinators take a on argument to specify a runner on which the intermediate computation takes place; for example map ~on:pool ~f fut maps the value in fut using function f, applicatively; the call to f happens on the runner pool (once fut resolves successfully with a value).

      type 'a or_error = ('a, exn * Stdlib.Printexc.raw_backtrace) result
      type 'a t

      A future with a result of type 'a.

      type 'a promise

      A promise, which can be fulfilled exactly once to set the corresponding future

      val make : unit -> 'a t * 'a promise

      Make a new future with the associated promise

      val on_result : 'a t -> ('a or_error -> unit) -> unit

      on_result fut f registers f to be called in the future when fut is set ; or calls f immediately if fut is already set.

      exception Already_fulfilled
      val fulfill : 'a promise -> 'a or_error -> unit

      Fullfill the promise, setting the future at the same time.

      val fulfill_idempotent : 'a promise -> 'a or_error -> unit

      Fullfill the promise, setting the future at the same time. Does nothing if the promise is already fulfilled.

      val return : 'a -> 'a t

      Already settled future, with a result

      val fail : exn -> Stdlib.Printexc.raw_backtrace -> _ t

      Already settled future, with a failure

      val of_result : 'a or_error -> 'a t
      val is_resolved : _ t -> bool

      is_resolved fut is true iff fut is resolved.

      val peek : 'a t -> 'a or_error option

      peek fut returns Some r if fut is currently resolved with r, and None if fut is not resolved yet.

      exception Not_ready
      • since 0.2
      val get_or_fail : 'a t -> 'a or_error

      get_or_fail fut obtains the result from fut if it's fulfilled (i.e. if peek fut returns Some res, get_or_fail fut returns res).

      • since 0.2
      val get_or_fail_exn : 'a t -> 'a

      get_or_fail_exn fut obtains the result from fut if it's fulfilled, like get_or_fail. If the result is an Error _, the exception inside is re-raised.

      • since 0.2
      val is_done : _ t -> bool

      Is the future resolved? This is the same as peek fut |> Option.is_some.

      • since 0.2

      Combinators

      val spawn : on:Runner.t -> (unit -> 'a) -> 'a t

      spaw ~on f runs f() on the given runner on, and return a future that will hold its result.

      val reify_error : 'a t -> 'a or_error t

      reify_error fut turns a failing future into a non-failing one that contain Error (exn, bt). A non-failing future returning x is turned into Ok x

      • since 0.4
      val map : ?on:Runner.t -> f:('a -> 'b) -> 'a t -> 'b t

      map ?on ~f fut returns a new future fut2 that resolves with f x if fut resolved with x; and fails with e if fut fails with e or f x raises e.

      • parameter on

        if provided, f runs on the given runner

      val bind : ?on:Runner.t -> f:('a -> 'b t) -> 'a t -> 'b t

      bind ?on ~f fut returns a new future fut2 that resolves like the future f x if fut resolved with x; and fails with e if fut fails with e or f x raises e.

      • parameter on

        if provided, f runs on the given runner

      val bind_reify_error : ?on:Runner.t -> f:('a or_error -> 'b t) -> 'a t -> 'b t

      bind_reify_error ?on ~f fut returns a new future fut2 that resolves like the future f (Ok x) if fut resolved with x; and resolves like the future f (Error (exn, bt)) if fut fails with exn and backtrace bt.

      • parameter on

        if provided, f runs on the given runner

      • since 0.4
      val join : ?on:Runner.t -> 'a t t -> 'a t

      join fut is fut >>= Fun.id. It joins the inner layer of the future.

      • since 0.2
      val both : 'a t -> 'b t -> ('a * 'b) t

      both a b succeeds with x, y if a succeeds with x and b succeeds with y, or fails if any of them fails.

      val choose : 'a t -> 'b t -> ('a, 'b) Either.t t

      choose a b succeeds Left x or Right y if a succeeds with x or b succeeds with y, or fails if both of them fails. If they both succeed, it is not specified which result is used.

      val choose_same : 'a t -> 'a t -> 'a t

      choose_same a b succeeds with the value of one of a or b if they succeed, or fails if both fail. If they both succeed, it is not specified which result is used.

      val join_array : 'a t array -> 'a array t

      Wait for all the futures in the array. Fails if any future fails.

      val join_list : 'a t list -> 'a list t

      Wait for all the futures in the list. Fails if any future fails.

      val wait_array : _ t array -> unit t

      wait_array arr waits for all futures in arr to resolve. It discards the individual results of futures in arr. It fails if any future fails.

      val wait_list : _ t list -> unit t

      wait_list l waits for all futures in l to resolve. It discards the individual results of futures in l. It fails if any future fails.

      val for_ : on:Runner.t -> int -> (int -> unit) -> unit t

      for_ ~on n f runs f 0, f 1, …, f (n-1) on the runner, and returns a future that resolves when all the tasks have resolved, or fails as soon as one task has failed.

      val for_array : on:Runner.t -> 'a array -> (int -> 'a -> unit) -> unit t

      for_array ~on arr f runs f 0 arr.(0), …, f (n-1) arr.(n-1) in the runner (where n = Array.length arr), and returns a future that resolves when all the tasks are done, or fails if any of them fails.

      • since 0.2
      val for_list : on:Runner.t -> 'a list -> ('a -> unit) -> unit t

      for_list ~on l f is like for_array ~on (Array.of_list l) f.

      • since 0.2

      Await

      NOTE This is only available on OCaml 5.

      val await : 'a t -> 'a

      await fut suspends the current tasks until fut is fulfilled, then resumes the task on this same runner.

      • since 0.3

      This must only be run from inside the runner itself. The runner must support Suspend_. NOTE: only on OCaml 5.x

      Blocking

      val wait_block : 'a t -> 'a or_error

      wait_block fut blocks the current thread until fut is resolved, and returns its value.

      NOTE: A word of warning: this will monopolize the calling thread until the future resolves. This can also easily cause deadlocks, if enough threads in a pool call wait_block on futures running on the same pool or a pool depending on it.

      A good rule to avoid deadlocks is to run this from outside of any pool, or to have an acyclic order between pools where wait_block is only called from a pool on futures evaluated in a pool that comes lower in the hierarchy. If this rule is broken, it is possible for all threads in a pool to wait for futures that can only make progress on these same threads, hence the deadlock.

      val wait_block_exn : 'a t -> 'a

      Same as wait_block but re-raises the exception if the future failed.

      module type INFIX = sig ... end

      Operators that run on the same thread as the first future.

      include INFIX
      val (>|=) : 'a t -> ('a -> 'b) -> 'b t
      val (>>=) : 'a t -> ('a -> 'b t) -> 'b t
      val let+ : 'a t -> ('a -> 'b) -> 'b t
      val and+ : 'a t -> 'b t -> ('a * 'b) t
      val let* : 'a t -> ('a -> 'b t) -> 'b t
      val and* : 'a t -> 'b t -> ('a * 'b) t
      module Infix (_ : sig ... end) : INFIX

      Make infix combinators, with intermediate computations running on the given pool.

      val infix : Runner.t -> (module INFIX)

      infix runner makes a new infix module with intermediate computations running on the given runner..

      • since 0.2
      +Fut (moonpool.Moonpool.Fut)

      Module Moonpool.Fut

      Futures.

      A future of type 'a t represents the result of a computation that will yield a value of type 'a.

      Typically, the computation is running on a thread pool Runner.t and will proceed on some worker. Once set, a future cannot change. It either succeeds (storing a Ok x with x: 'a), or fail (storing a Error (exn, bt) with an exception and the corresponding backtrace).

      Combinators such as map and join_array can be used to produce futures from other futures (in a monadic way). Some combinators take a on argument to specify a runner on which the intermediate computation takes place; for example map ~on:pool ~f fut maps the value in fut using function f, applicatively; the call to f happens on the runner pool (once fut resolves successfully with a value).

      type 'a or_error = ('a, exn * Stdlib.Printexc.raw_backtrace) result
      type 'a t

      A future with a result of type 'a.

      type 'a promise

      A promise, which can be fulfilled exactly once to set the corresponding future

      val make : unit -> 'a t * 'a promise

      Make a new future with the associated promise

      val on_result : 'a t -> ('a or_error -> unit) -> unit

      on_result fut f registers f to be called in the future when fut is set ; or calls f immediately if fut is already set.

      exception Already_fulfilled
      val fulfill : 'a promise -> 'a or_error -> unit

      Fullfill the promise, setting the future at the same time.

      val fulfill_idempotent : 'a promise -> 'a or_error -> unit

      Fullfill the promise, setting the future at the same time. Does nothing if the promise is already fulfilled.

      val return : 'a -> 'a t

      Already settled future, with a result

      val fail : exn -> Stdlib.Printexc.raw_backtrace -> _ t

      Already settled future, with a failure

      val of_result : 'a or_error -> 'a t
      val is_resolved : _ t -> bool

      is_resolved fut is true iff fut is resolved.

      val peek : 'a t -> 'a or_error option

      peek fut returns Some r if fut is currently resolved with r, and None if fut is not resolved yet.

      exception Not_ready
      • since 0.2
      val get_or_fail : 'a t -> 'a or_error

      get_or_fail fut obtains the result from fut if it's fulfilled (i.e. if peek fut returns Some res, get_or_fail fut returns res).

      • since 0.2
      val get_or_fail_exn : 'a t -> 'a

      get_or_fail_exn fut obtains the result from fut if it's fulfilled, like get_or_fail. If the result is an Error _, the exception inside is re-raised.

      • since 0.2
      val is_done : _ t -> bool

      Is the future resolved? This is the same as peek fut |> Option.is_some.

      • since 0.2

      Combinators

      val spawn : on:Runner.t -> (unit -> 'a) -> 'a t

      spaw ~on f runs f() on the given runner on, and return a future that will hold its result.

      val spawn_on_current_runner : (unit -> 'a) -> 'a t

      This must be run from inside a runner, and schedules the new task on it as well.

      See Runner.get_current_runner to see how the runner is found.

      • since NEXT_RELEASE
      • raises Failure

        if run from outside a runner.

      val reify_error : 'a t -> 'a or_error t

      reify_error fut turns a failing future into a non-failing one that contain Error (exn, bt). A non-failing future returning x is turned into Ok x

      • since 0.4
      val map : ?on:Runner.t -> f:('a -> 'b) -> 'a t -> 'b t

      map ?on ~f fut returns a new future fut2 that resolves with f x if fut resolved with x; and fails with e if fut fails with e or f x raises e.

      • parameter on

        if provided, f runs on the given runner

      val bind : ?on:Runner.t -> f:('a -> 'b t) -> 'a t -> 'b t

      bind ?on ~f fut returns a new future fut2 that resolves like the future f x if fut resolved with x; and fails with e if fut fails with e or f x raises e.

      • parameter on

        if provided, f runs on the given runner

      val bind_reify_error : ?on:Runner.t -> f:('a or_error -> 'b t) -> 'a t -> 'b t

      bind_reify_error ?on ~f fut returns a new future fut2 that resolves like the future f (Ok x) if fut resolved with x; and resolves like the future f (Error (exn, bt)) if fut fails with exn and backtrace bt.

      • parameter on

        if provided, f runs on the given runner

      • since 0.4
      val join : 'a t t -> 'a t

      join fut is fut >>= Fun.id. It joins the inner layer of the future.

      • since 0.2
      val both : 'a t -> 'b t -> ('a * 'b) t

      both a b succeeds with x, y if a succeeds with x and b succeeds with y, or fails if any of them fails.

      val choose : 'a t -> 'b t -> ('a, 'b) Either.t t

      choose a b succeeds Left x or Right y if a succeeds with x or b succeeds with y, or fails if both of them fails. If they both succeed, it is not specified which result is used.

      val choose_same : 'a t -> 'a t -> 'a t

      choose_same a b succeeds with the value of one of a or b if they succeed, or fails if both fail. If they both succeed, it is not specified which result is used.

      val join_array : 'a t array -> 'a array t

      Wait for all the futures in the array. Fails if any future fails.

      val join_list : 'a t list -> 'a list t

      Wait for all the futures in the list. Fails if any future fails.

      val wait_array : _ t array -> unit t

      wait_array arr waits for all futures in arr to resolve. It discards the individual results of futures in arr. It fails if any future fails.

      val wait_list : _ t list -> unit t

      wait_list l waits for all futures in l to resolve. It discards the individual results of futures in l. It fails if any future fails.

      val for_ : on:Runner.t -> int -> (int -> unit) -> unit t

      for_ ~on n f runs f 0, f 1, …, f (n-1) on the runner, and returns a future that resolves when all the tasks have resolved, or fails as soon as one task has failed.

      val for_array : on:Runner.t -> 'a array -> (int -> 'a -> unit) -> unit t

      for_array ~on arr f runs f 0 arr.(0), …, f (n-1) arr.(n-1) in the runner (where n = Array.length arr), and returns a future that resolves when all the tasks are done, or fails if any of them fails.

      • since 0.2
      val for_list : on:Runner.t -> 'a list -> ('a -> unit) -> unit t

      for_list ~on l f is like for_array ~on (Array.of_list l) f.

      • since 0.2

      Await

      NOTE This is only available on OCaml 5.

      val await : 'a t -> 'a

      await fut suspends the current tasks until fut is fulfilled, then resumes the task on this same runner.

      • since 0.3

      This must only be run from inside the runner itself. The runner must support Suspend_. NOTE: only on OCaml 5.x

      Blocking

      val wait_block : 'a t -> 'a or_error

      wait_block fut blocks the current thread until fut is resolved, and returns its value.

      NOTE: A word of warning: this will monopolize the calling thread until the future resolves. This can also easily cause deadlocks, if enough threads in a pool call wait_block on futures running on the same pool or a pool depending on it.

      A good rule to avoid deadlocks is to run this from outside of any pool, or to have an acyclic order between pools where wait_block is only called from a pool on futures evaluated in a pool that comes lower in the hierarchy. If this rule is broken, it is possible for all threads in a pool to wait for futures that can only make progress on these same threads, hence the deadlock.

      val wait_block_exn : 'a t -> 'a

      Same as wait_block but re-raises the exception if the future failed.

      Infix operators

      These combinators run on either the current pool (if present), or on the same thread that just fulfilled the previous future if not.

      They were previously present as module Infix_local and val infix, but are now simplified.

      • since NEXT_RELEASE
      module Infix : sig ... end
      include module type of Infix
      • since NEXT_RELEASE
      val (>|=) : 'a t -> ('a -> 'b) -> 'b t
      val (>>=) : 'a t -> ('a -> 'b t) -> 'b t
      val let+ : 'a t -> ('a -> 'b) -> 'b t
      val and+ : 'a t -> 'b t -> ('a * 'b) t
      val let* : 'a t -> ('a -> 'b t) -> 'b t
      val and* : 'a t -> 'b t -> ('a * 'b) t
      module Infix_local = Infix
      diff --git a/dev/moonpool/Moonpool/Fut/module-type-INFIX/index.html b/dev/moonpool/Moonpool/Fut/module-type-INFIX/index.html deleted file mode 100644 index d68bee91..00000000 --- a/dev/moonpool/Moonpool/Fut/module-type-INFIX/index.html +++ /dev/null @@ -1,2 +0,0 @@ - -INFIX (moonpool.Moonpool.Fut.INFIX)

      Module type Fut.INFIX

      val (>|=) : 'a t -> ('a -> 'b) -> 'b t
      val (>>=) : 'a t -> ('a -> 'b t) -> 'b t
      val let+ : 'a t -> ('a -> 'b) -> 'b t
      val and+ : 'a t -> 'b t -> ('a * 'b) t
      val let* : 'a t -> ('a -> 'b t) -> 'b t
      val and* : 'a t -> 'b t -> ('a * 'b) t
      diff --git a/dev/moonpool/Moonpool/Immediate_runner/For_runner_implementors/index.html b/dev/moonpool/Moonpool/Immediate_runner/For_runner_implementors/index.html new file mode 100644 index 00000000..95cd7082 --- /dev/null +++ b/dev/moonpool/Moonpool/Immediate_runner/For_runner_implementors/index.html @@ -0,0 +1,8 @@ + +For_runner_implementors (moonpool.Moonpool.Immediate_runner.For_runner_implementors)

      Module Immediate_runner.For_runner_implementors

      This module is specifically intended for users who implement their own runners. Regular users of Moonpool should not need to look at it.

      val create : + size:(unit -> int) -> + num_tasks:(unit -> int) -> + shutdown:(wait:bool -> unit -> unit) -> + run_async:(task -> unit) -> + unit -> + t

      Create a new runner.

      NOTE: the runner should support DLA and Suspend_ on OCaml 5.x, so that Fork_join and other 5.x features work properly.

      val k_cur_runner : t option ref Moonpool__.Thread_local_storage_.key
      diff --git a/dev/moonpool/Moonpool/Immediate_runner/index.html b/dev/moonpool/Moonpool/Immediate_runner/index.html new file mode 100644 index 00000000..44cb049e --- /dev/null +++ b/dev/moonpool/Moonpool/Immediate_runner/index.html @@ -0,0 +1,2 @@ + +Immediate_runner (moonpool.Moonpool.Immediate_runner)

      Module Moonpool.Immediate_runner

      Runner that runs tasks immediately in the caller thread.

      Whenever a task is submitted to this runner via Runner.run_async r task, the task is run immediately in the caller thread as task(). There are no background threads, no resource, this is just a trivial implementation of the interface.

      This can be useful when an implementation needs a runner, but there isn't enough work to justify starting an actual full thread pool.

      Another situation is when threads cannot be used at all (e.g. because you plan to call Unix.fork later).

      • since NEXT_RELEASE
      include module type of Runner
      type task = unit -> unit
      type t

      A runner.

      If a runner is no longer needed, shutdown can be used to signal all worker threads in it to stop (after they finish their work), and wait for them to stop.

      The threads are distributed across a fixed domain pool (whose size is determined by Domain.recommended_domain_count on OCaml 5, and simple the single runtime on OCaml 4).

      val size : t -> int

      Number of threads/workers.

      val num_tasks : t -> int

      Current number of tasks. This is at best a snapshot, useful for metrics and debugging.

      val shutdown : t -> unit

      Shutdown the runner and wait for it to terminate. Idempotent.

      val shutdown_without_waiting : t -> unit

      Shutdown the pool, and do not wait for it to terminate. Idempotent.

      exception Shutdown
      val run_async : t -> task -> unit

      run_async pool f schedules f for later execution on the runner in one of the threads. f() will run on one of the runner's worker threads/domains.

      • raises Shutdown

        if the runner was shut down before run_async was called.

      val run_wait_block : t -> (unit -> 'a) -> 'a

      run_wait_block pool f schedules f for later execution on the pool, like run_async. It then blocks the current thread until f() is done executing, and returns its result. If f() raises an exception, then run_wait_block pool f will raise it as well.

      NOTE be careful with deadlocks (see notes in Fut.wait_block about the required discipline to avoid deadlocks).

      module For_runner_implementors : sig ... end

      This module is specifically intended for users who implement their own runners. Regular users of Moonpool should not need to look at it.

      val get_current_runner : unit -> t option

      Access the current runner. This returns Some r if the call happens on a thread that belongs in a runner.

      • since NEXT_RELEASE
      val runner : t

      The trivial runner that actually runs tasks at the calling point.

      diff --git a/dev/moonpool/Moonpool/Lock/index.html b/dev/moonpool/Moonpool/Lock/index.html index 8d2d7ee7..b6b0724f 100644 --- a/dev/moonpool/Moonpool/Lock/index.html +++ b/dev/moonpool/Moonpool/Lock/index.html @@ -1,2 +1,2 @@ -Lock (moonpool.Moonpool.Lock)

      Module Moonpool.Lock

      Mutex-protected resource.

      • since 0.3
      type 'a t

      A value protected by a mutex

      val create : 'a -> 'a t

      Create a new protected value.

      val with_ : 'a t -> ('a -> 'b) -> 'b

      with_ l f runs f x where x is the value protected with the lock l, in a critical section. If f x fails, with_lock l f fails too but the lock is released.

      val update : 'a t -> ('a -> 'a) -> unit

      update l f replaces the content x of l with f x, while protected by the mutex.

      val update_map : 'a t -> ('a -> 'a * 'b) -> 'b

      update_map l f computes x', y = f (get l), then puts x' in l and returns y, while protected by the mutex.

      val mutex : _ t -> Stdlib.Mutex.t

      Underlying mutex.

      val get : 'a t -> 'a

      Atomically get the value in the lock. The value that is returned isn't protected!

      val set : 'a t -> 'a -> unit

      Atomically set the value.

      NOTE caution: using get and set as if this were a ref is an anti pattern and will not protect data against some race conditions.

      +Lock (moonpool.Moonpool.Lock)

      Module Moonpool.Lock

      Mutex-protected resource.

      • since 0.3
      type 'a t

      A value protected by a mutex

      val create : 'a -> 'a t

      Create a new protected value.

      val with_ : 'a t -> ('a -> 'b) -> 'b

      with_ l f runs f x where x is the value protected with the lock l, in a critical section. If f x fails, with_lock l f fails too but the lock is released.

      val update : 'a t -> ('a -> 'a) -> unit

      update l f replaces the content x of l with f x, while protected by the mutex.

      val update_map : 'a t -> ('a -> 'a * 'b) -> 'b

      update_map l f computes x', y = f (get l), then puts x' in l and returns y, while protected by the mutex.

      val mutex : _ t -> Stdlib.Mutex.t

      Underlying mutex.

      val get : 'a t -> 'a

      Atomically get the value in the lock. The value that is returned isn't protected!

      val set : 'a t -> 'a -> unit

      Atomically set the value.

      NOTE caution: using get and set as if this were a ref is an anti pattern and will not protect data against some race conditions.

      diff --git a/dev/moonpool/Moonpool/Pool/For_runner_implementors/index.html b/dev/moonpool/Moonpool/Pool/For_runner_implementors/index.html deleted file mode 100644 index dfb19c81..00000000 --- a/dev/moonpool/Moonpool/Pool/For_runner_implementors/index.html +++ /dev/null @@ -1,8 +0,0 @@ - -For_runner_implementors (moonpool.Moonpool.Pool.For_runner_implementors)

      Module Pool.For_runner_implementors

      val create : - size:(unit -> int) -> - num_tasks:(unit -> int) -> - shutdown:(wait:bool -> unit -> unit) -> - run_async:(task -> unit) -> - unit -> - t

      Create a new runner.

      NOTE: the runner should support DLA and Suspend_ on OCaml 5.x, so that Fork_join and other 5.x features work properly.

      diff --git a/dev/moonpool/Moonpool/Pool/index.html b/dev/moonpool/Moonpool/Pool/index.html deleted file mode 100644 index d9112cfc..00000000 --- a/dev/moonpool/Moonpool/Pool/index.html +++ /dev/null @@ -1,15 +0,0 @@ - -Pool (moonpool.Moonpool.Pool)

      Module Moonpool.Pool

      Thread pool.

      A pool of threads. The pool contains a fixed number of threads that wait for work items to come, process these, and loop.

      This implements Runner.t since 0.3.

      If a pool is no longer needed, shutdown can be used to signal all threads in it to stop (after they finish their work), and wait for them to stop.

      The threads are distributed across a fixed domain pool (whose size is determined by Domain.recommended_domain_count on OCaml 5, and simply the single runtime on OCaml 4).

      include module type of Runner
      type task = unit -> unit
      type t = private {
      1. run_async : task -> unit;
      2. shutdown : wait:bool -> unit -> unit;
      3. size : unit -> int;
      4. num_tasks : unit -> int;
      }

      A runner.

      If a runner is no longer needed, shutdown can be used to signal all worker threads in it to stop (after they finish their work), and wait for them to stop.

      The threads are distributed across a fixed domain pool (whose size is determined by Domain.recommended_domain_count on OCaml 5, and simple the single runtime on OCaml 4).

      val size : t -> int

      Number of threads/workers.

      val num_tasks : t -> int

      Current number of tasks. This is at best a snapshot, useful for metrics and debugging.

      val shutdown : t -> unit

      Shutdown the runner and wait for it to terminate. Idempotent.

      val shutdown_without_waiting : t -> unit

      Shutdown the pool, and do not wait for it to terminate. Idempotent.

      exception Shutdown
      val run_async : t -> task -> unit

      run_async pool f schedules f for later execution on the runner in one of the threads. f() will run on one of the runner's worker threads/domains.

      • raises Shutdown

        if the runner was shut down before run_async was called.

      val run_wait_block : t -> (unit -> 'a) -> 'a

      run_wait_block pool f schedules f for later execution on the pool, like run_async. It then blocks the current thread until f() is done executing, and returns its result. If f() raises an exception, then run_wait_block pool f will raise it as well.

      NOTE be careful with deadlocks (see notes in Fut.wait_block).

      module For_runner_implementors : sig ... end
      type thread_loop_wrapper = - thread:Thread.t -> - pool:t -> - (unit -> unit) -> - unit -> - unit

      A thread wrapper f takes the current thread, the current pool, and the worker function loop : unit -> unit which is the worker's main loop, and returns a new loop function. By default it just returns the same loop function but it can be used to install tracing, effect handlers, etc.

      val add_global_thread_loop_wrapper : thread_loop_wrapper -> unit

      add_global_thread_loop_wrapper f installs f to be installed in every new pool worker thread, for all existing pools, and all new pools created with create. These wrappers accumulate: they all apply, but their order is not specified.

      type ('a, 'b) create_args = - ?on_init_thread:(dom_id:int -> t_id:int -> unit -> unit) -> - ?on_exit_thread:(dom_id:int -> t_id:int -> unit -> unit) -> - ?thread_wrappers:thread_loop_wrapper list -> - ?on_exn:(exn -> Stdlib.Printexc.raw_backtrace -> unit) -> - ?around_task:((t -> 'b) * (t -> 'b -> unit)) -> - ?min:int -> - ?per_domain:int -> - 'a

      Arguments used in create. See create for explanations.

      val create : (unit -> t, _) create_args

      create () makes a new thread pool.

      • parameter on_init_thread

        called at the beginning of each new thread in the pool.

      • parameter min

        minimum size of the pool. It will be at least 1 internally, so 0 or negative values make no sense.

      • parameter per_domain

        is the number of threads allocated per domain in the fixed domain pool. The default value is 0, but setting, say, ~per_domain:2 means that if there are 8 domains (which might be the case on an 8-core machine) then the minimum size of the pool is 16. If both min and per_domain are specified, the maximum of both min and per_domain * num_of_domains is used.

      • parameter on_exit_thread

        called at the end of each thread in the pool

      • parameter thread_wrappers

        a list of thread_loop_wrapper functions to use for this pool's workers.

      • parameter around_task

        a pair of before, after, where before pool is called before a task is processed, on the worker thread about to run it, and returns x; and after pool x is called by the same thread after the task is over. (since 0.2)

      val with_ : (unit -> (t -> 'a) -> 'a, _) create_args

      with_ () f calls f pool, where pool is obtained via create. When f pool returns or fails, pool is shutdown and its resources are released.

      Most parameters are the same as in create.

      • since 0.3
      val run : t -> (unit -> unit) -> unit

      deprecated alias to run_async

      • deprecated use run_async
      diff --git a/dev/moonpool/Moonpool/Runner/For_runner_implementors/index.html b/dev/moonpool/Moonpool/Runner/For_runner_implementors/index.html index d5f7f21c..425f6a73 100644 --- a/dev/moonpool/Moonpool/Runner/For_runner_implementors/index.html +++ b/dev/moonpool/Moonpool/Runner/For_runner_implementors/index.html @@ -1,8 +1,8 @@ -For_runner_implementors (moonpool.Moonpool.Runner.For_runner_implementors)

      Module Runner.For_runner_implementors

      val create : +For_runner_implementors (moonpool.Moonpool.Runner.For_runner_implementors)

      Module Runner.For_runner_implementors

      This module is specifically intended for users who implement their own runners. Regular users of Moonpool should not need to look at it.

      val create : size:(unit -> int) -> num_tasks:(unit -> int) -> shutdown:(wait:bool -> unit -> unit) -> run_async:(task -> unit) -> unit -> - t

      Create a new runner.

      NOTE: the runner should support DLA and Suspend_ on OCaml 5.x, so that Fork_join and other 5.x features work properly.

      + t

      Create a new runner.

      NOTE: the runner should support DLA and Suspend_ on OCaml 5.x, so that Fork_join and other 5.x features work properly.

      val k_cur_runner : t option ref Moonpool__.Thread_local_storage_.key
      diff --git a/dev/moonpool/Moonpool/Runner/index.html b/dev/moonpool/Moonpool/Runner/index.html index 0cc97088..d18614c4 100644 --- a/dev/moonpool/Moonpool/Runner/index.html +++ b/dev/moonpool/Moonpool/Runner/index.html @@ -1,2 +1,2 @@ -Runner (moonpool.Moonpool.Runner)

      Module Moonpool.Runner

      Abstract runner.

      This provides an abstraction for running tasks in the background.

      • since 0.3
      type task = unit -> unit
      type t = private {
      1. run_async : task -> unit;
      2. shutdown : wait:bool -> unit -> unit;
      3. size : unit -> int;
      4. num_tasks : unit -> int;
      }

      A runner.

      If a runner is no longer needed, shutdown can be used to signal all worker threads in it to stop (after they finish their work), and wait for them to stop.

      The threads are distributed across a fixed domain pool (whose size is determined by Domain.recommended_domain_count on OCaml 5, and simple the single runtime on OCaml 4).

      val size : t -> int

      Number of threads/workers.

      val num_tasks : t -> int

      Current number of tasks. This is at best a snapshot, useful for metrics and debugging.

      val shutdown : t -> unit

      Shutdown the runner and wait for it to terminate. Idempotent.

      val shutdown_without_waiting : t -> unit

      Shutdown the pool, and do not wait for it to terminate. Idempotent.

      exception Shutdown
      val run_async : t -> task -> unit

      run_async pool f schedules f for later execution on the runner in one of the threads. f() will run on one of the runner's worker threads/domains.

      • raises Shutdown

        if the runner was shut down before run_async was called.

      val run_wait_block : t -> (unit -> 'a) -> 'a

      run_wait_block pool f schedules f for later execution on the pool, like run_async. It then blocks the current thread until f() is done executing, and returns its result. If f() raises an exception, then run_wait_block pool f will raise it as well.

      NOTE be careful with deadlocks (see notes in Fut.wait_block).

      module For_runner_implementors : sig ... end
      +Runner (moonpool.Moonpool.Runner)

      Module Moonpool.Runner

      Interface for runners.

      This provides an abstraction for running tasks in the background, which is implemented by various thread pools.

      • since 0.3
      type task = unit -> unit
      type t

      A runner.

      If a runner is no longer needed, shutdown can be used to signal all worker threads in it to stop (after they finish their work), and wait for them to stop.

      The threads are distributed across a fixed domain pool (whose size is determined by Domain.recommended_domain_count on OCaml 5, and simple the single runtime on OCaml 4).

      val size : t -> int

      Number of threads/workers.

      val num_tasks : t -> int

      Current number of tasks. This is at best a snapshot, useful for metrics and debugging.

      val shutdown : t -> unit

      Shutdown the runner and wait for it to terminate. Idempotent.

      val shutdown_without_waiting : t -> unit

      Shutdown the pool, and do not wait for it to terminate. Idempotent.

      exception Shutdown
      val run_async : t -> task -> unit

      run_async pool f schedules f for later execution on the runner in one of the threads. f() will run on one of the runner's worker threads/domains.

      • raises Shutdown

        if the runner was shut down before run_async was called.

      val run_wait_block : t -> (unit -> 'a) -> 'a

      run_wait_block pool f schedules f for later execution on the pool, like run_async. It then blocks the current thread until f() is done executing, and returns its result. If f() raises an exception, then run_wait_block pool f will raise it as well.

      NOTE be careful with deadlocks (see notes in Fut.wait_block about the required discipline to avoid deadlocks).

      module For_runner_implementors : sig ... end

      This module is specifically intended for users who implement their own runners. Regular users of Moonpool should not need to look at it.

      val get_current_runner : unit -> t option

      Access the current runner. This returns Some r if the call happens on a thread that belongs in a runner.

      • since NEXT_RELEASE
      diff --git a/dev/moonpool/Moonpool/Suspend_/index.html b/dev/moonpool/Moonpool/Suspend_/index.html deleted file mode 100644 index 3fed01ec..00000000 --- a/dev/moonpool/Moonpool/Suspend_/index.html +++ /dev/null @@ -1,5 +0,0 @@ - -Suspend_ (moonpool.Moonpool.Suspend_)

      Module Moonpool.Suspend_

      Suspensions.

      This is only going to work on OCaml 5.x.

      NOTE: this is not stable for now.

      • alert unstable this module is an implementation detail of moonpool for now

      (Private) suspending tasks using Effects.

      This module is an implementation detail of Moonpool and should not be used outside of it, except by experts to implement Runner.

      type suspension = (unit, exn * Stdlib.Printexc.raw_backtrace) result -> unit

      A suspended computation

      type task = unit -> unit
      type suspension_handler = {
      1. handle : run:(with_handler:bool -> task -> unit) -> suspension -> unit;
      }

      The handler that knows what to do with the suspended computation.

      The handler is given two things:

      • the suspended computation (which can be resumed with a result eventually);
      • a run function that can be used to start tasks to perform some computation.

      This means that a fork-join primitive, for example, can use a single call to suspend to:

      • suspend the caller until the fork-join is done
      • use run to start all the tasks. Typically run is called multiple times, which is where the "fork" part comes from. Each call to run potentially runs in parallel with the other calls. The calls must coordinate so that, once they are all done, the suspended caller is resumed with the aggregated result of the computation.
      type Stdlib.Effect.t +=
      1. | Suspend : suspension_handler -> unit Stdlib.Effect.t
        (*

        The effect used to suspend the current thread and pass it, suspended, to the handler. The handler will ensure that the suspension is resumed later once some computation has been done.

        *)
      val suspend : suspension_handler -> unit

      suspend h jumps back to the nearest with_suspend and calls h.handle with the current continuation k and a task runner function.

      val with_suspend : - run:(with_handler:bool -> task -> unit) -> - (unit -> unit) -> - unit

      with_suspend ~run f runs f() in an environment where suspend will work. If f() suspends with suspension handler h, this calls h ~run k where k is the suspension.

      This will not do anything on OCaml 4.x.

      diff --git a/dev/moonpool/Moonpool/Thread_local_storage/index.html b/dev/moonpool/Moonpool/Thread_local_storage/index.html new file mode 100644 index 00000000..ce76ae46 --- /dev/null +++ b/dev/moonpool/Moonpool/Thread_local_storage/index.html @@ -0,0 +1,2 @@ + +Thread_local_storage (moonpool.Moonpool.Thread_local_storage)

      Module Moonpool.Thread_local_storage

      Thread local storage

      type 'a key

      A TLS key for values of type 'a. This allows the storage of a single value of type 'a per thread.

      val new_key : (unit -> 'a) -> 'a key

      Allocate a new, generative key. When the key is used for the first time on a thread, the function is called to produce it.

      This should only ever be called at toplevel to produce constants, do not use it in a loop.

      val get : 'a key -> 'a

      Get the value for the current thread.

      val set : 'a key -> 'a -> unit

      Set the value for the current thread.

      diff --git a/dev/moonpool/Moonpool/Ws_pool/For_runner_implementors/index.html b/dev/moonpool/Moonpool/Ws_pool/For_runner_implementors/index.html new file mode 100644 index 00000000..1cd43c2b --- /dev/null +++ b/dev/moonpool/Moonpool/Ws_pool/For_runner_implementors/index.html @@ -0,0 +1,8 @@ + +For_runner_implementors (moonpool.Moonpool.Ws_pool.For_runner_implementors)

      Module Ws_pool.For_runner_implementors

      This module is specifically intended for users who implement their own runners. Regular users of Moonpool should not need to look at it.

      val create : + size:(unit -> int) -> + num_tasks:(unit -> int) -> + shutdown:(wait:bool -> unit -> unit) -> + run_async:(task -> unit) -> + unit -> + t

      Create a new runner.

      NOTE: the runner should support DLA and Suspend_ on OCaml 5.x, so that Fork_join and other 5.x features work properly.

      val k_cur_runner : t option ref Moonpool__.Thread_local_storage_.key
      diff --git a/dev/moonpool/Moonpool/Ws_pool/index.html b/dev/moonpool/Moonpool/Ws_pool/index.html new file mode 100644 index 00000000..a851efcc --- /dev/null +++ b/dev/moonpool/Moonpool/Ws_pool/index.html @@ -0,0 +1,8 @@ + +Ws_pool (moonpool.Moonpool.Ws_pool)

      Module Moonpool.Ws_pool

      Work-stealing thread pool.

      A pool of threads with a worker-stealing scheduler. The pool contains a fixed number of threads that wait for work items to come, process these, and loop.

      This is good for CPU-intensive tasks that feature a lot of small tasks. Note that tasks will not always be processed in the order they are scheduled, so this is not great for workloads where the latency of individual tasks matter (for that see Fifo_pool).

      This implements Runner.t since 0.3.

      If a pool is no longer needed, shutdown can be used to signal all threads in it to stop (after they finish their work), and wait for them to stop.

      The threads are distributed across a fixed domain pool (whose size is determined by Domain.recommended_domain_count on OCaml 5, and simply the single runtime on OCaml 4).

      include module type of Runner
      type task = unit -> unit
      type t

      A runner.

      If a runner is no longer needed, shutdown can be used to signal all worker threads in it to stop (after they finish their work), and wait for them to stop.

      The threads are distributed across a fixed domain pool (whose size is determined by Domain.recommended_domain_count on OCaml 5, and simple the single runtime on OCaml 4).

      val size : t -> int

      Number of threads/workers.

      val num_tasks : t -> int

      Current number of tasks. This is at best a snapshot, useful for metrics and debugging.

      val shutdown : t -> unit

      Shutdown the runner and wait for it to terminate. Idempotent.

      val shutdown_without_waiting : t -> unit

      Shutdown the pool, and do not wait for it to terminate. Idempotent.

      exception Shutdown
      val run_async : t -> task -> unit

      run_async pool f schedules f for later execution on the runner in one of the threads. f() will run on one of the runner's worker threads/domains.

      • raises Shutdown

        if the runner was shut down before run_async was called.

      val run_wait_block : t -> (unit -> 'a) -> 'a

      run_wait_block pool f schedules f for later execution on the pool, like run_async. It then blocks the current thread until f() is done executing, and returns its result. If f() raises an exception, then run_wait_block pool f will raise it as well.

      NOTE be careful with deadlocks (see notes in Fut.wait_block about the required discipline to avoid deadlocks).

      module For_runner_implementors : sig ... end

      This module is specifically intended for users who implement their own runners. Regular users of Moonpool should not need to look at it.

      val get_current_runner : unit -> t option

      Access the current runner. This returns Some r if the call happens on a thread that belongs in a runner.

      • since NEXT_RELEASE
      type ('a, 'b) create_args = + ?on_init_thread:(dom_id:int -> t_id:int -> unit -> unit) -> + ?on_exit_thread:(dom_id:int -> t_id:int -> unit -> unit) -> + ?on_exn:(exn -> Stdlib.Printexc.raw_backtrace -> unit) -> + ?around_task:((t -> 'b) * (t -> 'b -> unit)) -> + ?num_threads:int -> + 'a

      Arguments used in create. See create for explanations.

      val create : (unit -> t, _) create_args

      create () makes a new thread pool.

      • parameter on_init_thread

        called at the beginning of each new thread in the pool.

      • parameter num_threads

        size of the pool, ie. number of worker threads. It will be at least 1 internally, so 0 or negative values make no sense. The default is Domain.recommended_domain_count(), ie one worker thread per CPU core. On OCaml 4 the default is 4 (since there is only one domain).

      • parameter on_exit_thread

        called at the end of each thread in the pool

      • parameter around_task

        a pair of before, after, where before pool is called before a task is processed, on the worker thread about to run it, and returns x; and after pool x is called by the same thread after the task is over. (since 0.2)

      val with_ : (unit -> (t -> 'a) -> 'a, _) create_args

      with_ () f calls f pool, where pool is obtained via create. When f pool returns or fails, pool is shutdown and its resources are released.

      Most parameters are the same as in create.

      • since 0.3
      val run : t -> (unit -> unit) -> unit

      deprecated alias to run_async

      • deprecated use run_async
      diff --git a/dev/moonpool/Moonpool/index.html b/dev/moonpool/Moonpool/index.html index cde68b6d..1c21d559 100644 --- a/dev/moonpool/Moonpool/index.html +++ b/dev/moonpool/Moonpool/index.html @@ -1,2 +1,2 @@ -Moonpool (moonpool.Moonpool)

      Module Moonpool

      Moonpool

      A pool within a bigger pool (ie the ocean). Here, we're talking about pools of Thread.t which live within a fixed pool of Domain.t.

      module Pool : sig ... end

      Thread pool.

      module Runner : sig ... end

      Abstract runner.

      val start_thread_on_some_domain : ('a -> unit) -> 'a -> Thread.t

      Similar to Thread.create, but it picks a background domain at random to run the thread. This ensures that we don't always pick the same domain to run all the various threads needed in an application (timers, event loops, etc.)

      module Lock : sig ... end

      Mutex-protected resource.

      module Fut : sig ... end

      Futures.

      module Chan : sig ... end

      Channels.

      module Fork_join : sig ... end

      Fork-join primitives.

      module Blocking_queue : sig ... end

      A simple blocking queue.

      module Bounded_queue : sig ... end

      A blocking queue of finite size.

      module Atomic : sig ... end

      Atomic values.

      Suspensions

      module Suspend_ : sig ... end

      Suspensions.

      +Moonpool (moonpool.Moonpool)

      Module Moonpool

      Moonpool

      A pool within a bigger pool (ie the ocean). Here, we're talking about pools of Thread.t that are dispatched over several Domain.t to enable parallelism.

      We provide several implementations of pools with distinct scheduling strategies, alongside some concurrency primitives such as guarding locks (Lock.t) and futures (Fut.t).

      module Ws_pool : sig ... end

      Work-stealing thread pool.

      module Fifo_pool : sig ... end

      A simple thread pool in FIFO order.

      module Runner : sig ... end

      Interface for runners.

      module Immediate_runner : sig ... end

      Runner that runs tasks immediately in the caller thread.

      module Pool = Fifo_pool

      Default pool. Please explicitly pick an implementation instead.

      val start_thread_on_some_domain : ('a -> unit) -> 'a -> Thread.t

      Similar to Thread.create, but it picks a background domain at random to run the thread. This ensures that we don't always pick the same domain to run all the various threads needed in an application (timers, event loops, etc.)

      val run_async : Runner.t -> (unit -> unit) -> unit

      run_async runner task schedules the task to run on the given runner. This means task() will be executed at some point in the future, possibly in another thread.

      • since NEXT_RELEASE

      Number of threads recommended to saturate the CPU. For IO pools this makes little sense (you might want more threads than this because many of them will be blocked most of the time).

      • since NEXT_RELEASE
      val spawn : on:Runner.t -> (unit -> 'a) -> 'a Fut.t

      spawn ~on f runs f() on the runner (a thread pool typically) and returns a future result for it. See Fut.spawn.

      • since NEXT_RELEASE
      val spawn_on_current_runner : (unit -> 'a) -> 'a Fut.t

      See Fut.spawn_on_current_runner.

      • since NEXT_RELEASE
      val await : 'a Fut.t -> 'a

      Await a future. See await. Only on OCaml >= 5.0.

      • since NEXT_RELEASE
      module Lock : sig ... end

      Mutex-protected resource.

      module Fut : sig ... end

      Futures.

      module Chan : sig ... end

      Channels.

      module Fork_join : sig ... end

      Fork-join primitives.

      module Thread_local_storage : sig ... end

      Thread local storage

      module Blocking_queue : sig ... end

      A simple blocking queue.

      module Bounded_queue : sig ... end

      A blocking queue of finite size.

      module Atomic : sig ... end

      Atomic values.

      diff --git a/dev/moonpool/_doc-dir/README.md b/dev/moonpool/_doc-dir/README.md index 60f478d3..5135d00b 100644 --- a/dev/moonpool/_doc-dir/README.md +++ b/dev/moonpool/_doc-dir/README.md @@ -24,22 +24,31 @@ In addition, some concurrency and parallelism primitives are provided: ## Usage -The user can create several thread pools. These pools use regular posix threads, -but the threads are spread across multiple domains (on OCaml 5), which enables -parallelism. +The user can create several thread pools (implementing the interface `Runner.t`). +These pools use regular posix threads, but the threads are spread across +multiple domains (on OCaml 5), which enables parallelism. -The function `Pool.run_async pool task` runs `task()` on one of the workers -of `pool`, as soon as one is available. No result is returned. +Current we provide these pool implementations: +- `Fifo_pool` is a thread pool that uses a blocking queue to schedule tasks, + which means they're picked in the same order they've been scheduled ("fifo"). + This pool is simple and will behave fine for coarse-granularity concurrency, + but will slow down under heavy contention. +- `Ws_pool` is a work-stealing pool, where each thread has its own local queue + in addition to a global queue of tasks. This is efficient for workloads + with many short tasks that spawn other tasks, but the order in which + tasks are run is less predictable. This is useful when throughput is + the important thing to optimize. + +The function `Runner.run_async pool task` schedules `task()` to run on one of +the workers of `pool`, as soon as one is available. No result is returned by `run_async`. ```ocaml # #require "threads";; -# let pool = Moonpool.Pool.create ~min:4 ();; -val pool : Moonpool.Runner.t = - {Moonpool.Pool.run_async = ; shutdown = ; size = ; - num_tasks = } +# let pool = Moonpool.Fifo_pool.create ~num_threads:4 ();; +val pool : Moonpool.Runner.t = # begin - Moonpool.Pool.run_async pool + Moonpool.Runner.run_async pool (fun () -> Thread.delay 0.1; print_endline "running from the pool"); @@ -51,11 +60,13 @@ running from the pool - : unit = () ``` -To wait until the task is done, you can use `Pool.run_wait_block` instead: +To wait until the task is done, you can use `Runner.run_wait_block`[^1] instead: + +[^1]: beware of deadlock! See documentation for more details. ```ocaml # begin - Moonpool.Pool.run_wait_block pool + Moonpool.Runner.run_wait_block pool (fun () -> Thread.delay 0.1; print_endline "running from the pool"); @@ -157,7 +168,11 @@ val expected_sum : int = 5050 On OCaml 5, again using effect handlers, the module `Fork_join` implements the [fork-join model](https://en.wikipedia.org/wiki/Fork%E2%80%93join_model). -It must run on a pool (using [Pool.run] or inside a future via [Future.spawn]). +It must run on a pool (using [Runner.run_async] or inside a future via [Fut.spawn]). + +It is generally better to use the work-stealing pool for workloads that rely on +fork-join for better performance, because fork-join will tend to spawn lots of +shorter tasks. ```ocaml # let rec select_sort arr i len = @@ -259,7 +274,7 @@ This works for OCaml >= 4.08. the same pool, too — this is useful for threads blocking on IO). A useful analogy is that each domain is a bit like a CPU core, and `Thread.t` is a logical thread running on a core. - Multiple threads have to share a single core and do not run in parallel on it[^1]. + Multiple threads have to share a single core and do not run in parallel on it[^2]. We can therefore build pools that spread their worker threads on multiple cores to enable parallelism within each pool. TODO: actually use https://github.com/haesbaert/ocaml-processor to pin domains to cores, @@ -275,4 +290,4 @@ MIT license. $ opam install moonpool ``` -[^1]: let's not talk about hyperthreading. +[^2]: let's not talk about hyperthreading. diff --git a/dev/moonpool/index.html b/dev/moonpool/index.html index ea675d63..2aa1f7dc 100644 --- a/dev/moonpool/index.html +++ b/dev/moonpool/index.html @@ -1,2 +1,2 @@ -index (moonpool.index)

      Package moonpool

      Package info

      changes-files
      readme-files
      +index (moonpool.index)

      Package moonpool

      Package info

      changes-files
      readme-files
      diff --git a/dev/ocaml/Afl_instrument/index.html b/dev/ocaml/Afl_instrument/index.html index ab0c7c55..e40ea7bd 100644 --- a/dev/ocaml/Afl_instrument/index.html +++ b/dev/ocaml/Afl_instrument/index.html @@ -1,5 +1,5 @@ -Afl_instrument (ocaml.Afl_instrument)

      Module Afl_instrument

      Instrumentation for afl-fuzz.

      val instrument_function : Cmm.expression -> Debuginfo.t -> Cmm.expression
      val instrument_initialiser : +Afl_instrument (ocaml.Afl_instrument)

      Module Afl_instrument

      Instrumentation for afl-fuzz.

      val instrument_function : Cmm.expression -> Debuginfo.t -> Cmm.expression
      val instrument_initialiser : Cmm.expression -> (unit -> Debuginfo.t) -> Cmm.expression
      diff --git a/dev/ocaml/Alias_analysis/index.html b/dev/ocaml/Alias_analysis/index.html index 03f4711a..329d6dab 100644 --- a/dev/ocaml/Alias_analysis/index.html +++ b/dev/ocaml/Alias_analysis/index.html @@ -1,5 +1,5 @@ -Alias_analysis (ocaml.Alias_analysis)

      Module Alias_analysis

      type allocation_point =
      1. | Symbol of Symbol.t
      2. | Variable of Variable.t
      type allocated_const =
      1. | Normal of Allocated_const.t
      2. | Array of Lambda.array_kind * Asttypes.mutable_flag * Variable.t list
      3. | Duplicate_array of Lambda.array_kind * Asttypes.mutable_flag * Variable.t
      type constant_defining_value =
      1. | Allocated_const of allocated_const
      2. | Block of Tag.t * Variable.t list
      3. | Set_of_closures of Flambda.set_of_closures
      4. | Project_closure of Flambda.project_closure
      5. | Move_within_set_of_closures of Flambda.move_within_set_of_closures
      6. | Project_var of Flambda.project_var
      7. | Field of Variable.t * int
      8. | Symbol_field of Symbol.t * int
      9. | Const of Flambda.const
      10. | Symbol of Symbol.t
      11. | Variable of Variable.t
      type initialize_symbol_field = Variable.t option
      val run : +Alias_analysis (ocaml.Alias_analysis)

      Module Alias_analysis

      type allocation_point =
      1. | Symbol of Symbol.t
      2. | Variable of Variable.t
      type allocated_const =
      1. | Normal of Allocated_const.t
      2. | Array of Lambda.array_kind * Asttypes.mutable_flag * Variable.t list
      3. | Duplicate_array of Lambda.array_kind * Asttypes.mutable_flag * Variable.t
      type constant_defining_value =
      1. | Allocated_const of allocated_const
      2. | Block of Tag.t * Variable.t list
      3. | Set_of_closures of Flambda.set_of_closures
      4. | Project_closure of Flambda.project_closure
      5. | Move_within_set_of_closures of Flambda.move_within_set_of_closures
      6. | Project_var of Flambda.project_var
      7. | Field of Variable.t * int
      8. | Symbol_field of Symbol.t * int
      9. | Const of Flambda.const
      10. | Symbol of Symbol.t
      11. | Variable of Variable.t
      type initialize_symbol_field = Variable.t option
      val run : constant_defining_value Variable.Tbl.t -> initialize_symbol_field list Symbol.Tbl.t -> Flambda.constant_defining_value Symbol.Tbl.t -> diff --git a/dev/ocaml/Allocated_const/index.html b/dev/ocaml/Allocated_const/index.html index 80e85a19..9d798309 100644 --- a/dev/ocaml/Allocated_const/index.html +++ b/dev/ocaml/Allocated_const/index.html @@ -1,2 +1,2 @@ -Allocated_const (ocaml.Allocated_const)

      Module Allocated_const

      Constants that are always allocated (possibly statically). Blocks are not included here since they are always encoded using Prim (Pmakeblock, ...).

      type t =
      1. | Float of float
      2. | Int32 of int32
      3. | Int64 of int64
      4. | Nativeint of nativeint
      5. | Float_array of float list
      6. | Immutable_float_array of float list
      7. | String of string
      8. | Immutable_string of string
      val compare_floats : float -> float -> int
      val compare : t -> t -> int
      val print : Stdlib.Format.formatter -> t -> unit
      +Allocated_const (ocaml.Allocated_const)

      Module Allocated_const

      Constants that are always allocated (possibly statically). Blocks are not included here since they are always encoded using Prim (Pmakeblock, ...).

      type t =
      1. | Float of float
      2. | Int32 of int32
      3. | Int64 of int64
      4. | Nativeint of nativeint
      5. | Float_array of float list
      6. | Immutable_float_array of float list
      7. | String of string
      8. | Immutable_string of string
      val compare_floats : float -> float -> int
      val compare : t -> t -> int
      val print : Stdlib.Format.formatter -> t -> unit
      diff --git a/dev/ocaml/Annot/index.html b/dev/ocaml/Annot/index.html index 933b3da7..2f2ec51e 100644 --- a/dev/ocaml/Annot/index.html +++ b/dev/ocaml/Annot/index.html @@ -1,2 +1,2 @@ -Annot (ocaml.Annot)

      Module Annot

      type call =
      1. | Tail
      2. | Stack
      3. | Inline
      type ident =
      1. | Iref_internal of Location.t
      2. | Iref_external
      3. | Idef of Location.t
      +Annot (ocaml.Annot)

      Module Annot

      type call =
      1. | Tail
      2. | Stack
      3. | Inline
      type ident =
      1. | Iref_internal of Location.t
      2. | Iref_external
      3. | Idef of Location.t
      diff --git a/dev/ocaml/Arch/index.html b/dev/ocaml/Arch/index.html index 6a6a9038..e720ff48 100644 --- a/dev/ocaml/Arch/index.html +++ b/dev/ocaml/Arch/index.html @@ -1,5 +1,5 @@ -Arch (ocaml.Arch)

      Module Arch

      val command_line_options : (string * Stdlib.Arg.spec * string) list
      type addressing_mode =
      1. | Ibased of string * int
      2. | Iindexed of int
      3. | Iindexed2 of int
      4. | Iscaled of int * int
      5. | Iindexed2scaled of int * int
      type specific_operation =
      1. | Ilea of addressing_mode
      2. | Istore_int of nativeint * addressing_mode * bool
      3. | Ioffset_loc of int * addressing_mode
      4. | Ifloatarithmem of float_operation * addressing_mode
      5. | Ibswap of int
      6. | Isqrtf
      7. | Ifloatsqrtf of addressing_mode
      8. | Isextend32
      9. | Izextend32
      and float_operation =
      1. | Ifloatadd
      2. | Ifloatsub
      3. | Ifloatmul
      4. | Ifloatdiv
      val big_endian : bool
      val size_addr : int
      val size_int : int
      val size_float : int
      val allow_unaligned_access : bool
      val division_crashes_on_overflow : bool
      val identity_addressing : addressing_mode
      val offset_addressing : addressing_mode -> int -> addressing_mode
      val num_args_addressing : addressing_mode -> int
      val print_addressing : +Arch (ocaml.Arch)

      Module Arch

      val command_line_options : (string * Stdlib.Arg.spec * string) list
      type addressing_mode =
      1. | Ibased of string * int
      2. | Iindexed of int
      3. | Iindexed2 of int
      4. | Iscaled of int * int
      5. | Iindexed2scaled of int * int
      type specific_operation =
      1. | Ilea of addressing_mode
      2. | Istore_int of nativeint * addressing_mode * bool
      3. | Ioffset_loc of int * addressing_mode
      4. | Ifloatarithmem of float_operation * addressing_mode
      5. | Ibswap of int
      6. | Isqrtf
      7. | Ifloatsqrtf of addressing_mode
      8. | Isextend32
      9. | Izextend32
      and float_operation =
      1. | Ifloatadd
      2. | Ifloatsub
      3. | Ifloatmul
      4. | Ifloatdiv
      val big_endian : bool
      val size_addr : int
      val size_int : int
      val size_float : int
      val allow_unaligned_access : bool
      val division_crashes_on_overflow : bool
      val identity_addressing : addressing_mode
      val offset_addressing : addressing_mode -> int -> addressing_mode
      val num_args_addressing : addressing_mode -> int
      val print_addressing : (Stdlib.Format.formatter -> 'a -> unit) -> addressing_mode -> Stdlib.Format.formatter -> diff --git a/dev/ocaml/Arg_helper/Make/argument-1-S/Key/Map/index.html b/dev/ocaml/Arg_helper/Make/argument-1-S/Key/Map/index.html index 5eeda078..dccd3729 100644 --- a/dev/ocaml/Arg_helper/Make/argument-1-S/Key/Map/index.html +++ b/dev/ocaml/Arg_helper/Make/argument-1-S/Key/Map/index.html @@ -1,5 +1,5 @@ -Map (ocaml.Arg_helper.Make.S.Key.Map)

      Module Key.Map

      type key = t

      The type of the map keys.

      type !+'a t

      The type of maps from type key to type 'a.

      val empty : 'a t

      The empty map.

      val is_empty : 'a t -> bool

      Test whether a map is empty or not.

      val mem : key -> 'a t -> bool

      mem x m returns true if m contains a binding for x, and false otherwise.

      val add : key -> 'a -> 'a t -> 'a t

      add key data m returns a map containing the same bindings as m, plus a binding of key to data. If key was already bound in m to a value that is physically equal to data, m is returned unchanged (the result of the function is then physically equal to m). Otherwise, the previous binding of key in m disappears.

      • before 4.03

        Physical equality was not ensured.

      val update : key -> ('a option -> 'a option) -> 'a t -> 'a t

      update key f m returns a map containing the same bindings as m, except for the binding of key. Depending on the value of y where y is f (find_opt key m), the binding of key is added, removed or updated. If y is None, the binding is removed if it exists; otherwise, if y is Some z then key is associated to z in the resulting map. If key was already bound in m to a value that is physically equal to z, m is returned unchanged (the result of the function is then physically equal to m).

      • since 4.06.0
      val singleton : key -> 'a -> 'a t

      singleton x y returns the one-element map that contains a binding y for x.

      • since 3.12.0
      val remove : key -> 'a t -> 'a t

      remove x m returns a map containing the same bindings as m, except for x which is unbound in the returned map. If x was not in m, m is returned unchanged (the result of the function is then physically equal to m).

      • before 4.03

        Physical equality was not ensured.

      val merge : +Map (ocaml.Arg_helper.Make.S.Key.Map)

      Module Key.Map

      type key = t

      The type of the map keys.

      type !+'a t

      The type of maps from type key to type 'a.

      val empty : 'a t

      The empty map.

      val is_empty : 'a t -> bool

      Test whether a map is empty or not.

      val mem : key -> 'a t -> bool

      mem x m returns true if m contains a binding for x, and false otherwise.

      val add : key -> 'a -> 'a t -> 'a t

      add key data m returns a map containing the same bindings as m, plus a binding of key to data. If key was already bound in m to a value that is physically equal to data, m is returned unchanged (the result of the function is then physically equal to m). Otherwise, the previous binding of key in m disappears.

      • before 4.03

        Physical equality was not ensured.

      val update : key -> ('a option -> 'a option) -> 'a t -> 'a t

      update key f m returns a map containing the same bindings as m, except for the binding of key. Depending on the value of y where y is f (find_opt key m), the binding of key is added, removed or updated. If y is None, the binding is removed if it exists; otherwise, if y is Some z then key is associated to z in the resulting map. If key was already bound in m to a value that is physically equal to z, m is returned unchanged (the result of the function is then physically equal to m).

      • since 4.06.0
      val singleton : key -> 'a -> 'a t

      singleton x y returns the one-element map that contains a binding y for x.

      • since 3.12.0
      val remove : key -> 'a t -> 'a t

      remove x m returns a map containing the same bindings as m, except for x which is unbound in the returned map. If x was not in m, m is returned unchanged (the result of the function is then physically equal to m).

      • before 4.03

        Physical equality was not ensured.

      val merge : (key -> 'a option -> 'b option -> 'c option) -> 'a t -> 'b t -> diff --git a/dev/ocaml/Arg_helper/Make/argument-1-S/Key/index.html b/dev/ocaml/Arg_helper/Make/argument-1-S/Key/index.html index e80abf45..d78d93ca 100644 --- a/dev/ocaml/Arg_helper/Make/argument-1-S/Key/index.html +++ b/dev/ocaml/Arg_helper/Make/argument-1-S/Key/index.html @@ -1,2 +1,2 @@ -Key (ocaml.Arg_helper.Make.S.Key)

      Module S.Key

      type t
      val of_string : string -> t

      The textual representation of a key must not contain '=' or ','.

      module Map : Map.S with type key = t
      +Key (ocaml.Arg_helper.Make.S.Key)

      Module S.Key

      type t
      val of_string : string -> t

      The textual representation of a key must not contain '=' or ','.

      module Map : Map.S with type key = t
      diff --git a/dev/ocaml/Arg_helper/Make/argument-1-S/Value/index.html b/dev/ocaml/Arg_helper/Make/argument-1-S/Value/index.html index e76d77b2..e94675de 100644 --- a/dev/ocaml/Arg_helper/Make/argument-1-S/Value/index.html +++ b/dev/ocaml/Arg_helper/Make/argument-1-S/Value/index.html @@ -1,2 +1,2 @@ -Value (ocaml.Arg_helper.Make.S.Value)

      Module S.Value

      type t
      val of_string : string -> t

      The textual representation of a value must not contain ','.

      +Value (ocaml.Arg_helper.Make.S.Value)

      Module S.Value

      type t
      val of_string : string -> t

      The textual representation of a value must not contain ','.

      diff --git a/dev/ocaml/Arg_helper/Make/argument-1-S/index.html b/dev/ocaml/Arg_helper/Make/argument-1-S/index.html index e8bdebd5..98a3a331 100644 --- a/dev/ocaml/Arg_helper/Make/argument-1-S/index.html +++ b/dev/ocaml/Arg_helper/Make/argument-1-S/index.html @@ -1,2 +1,2 @@ -S (ocaml.Arg_helper.Make.S)

      Parameter Make.S

      module Key : sig ... end
      module Value : sig ... end
      +S (ocaml.Arg_helper.Make.S)

      Parameter Make.S

      module Key : sig ... end
      module Value : sig ... end
      diff --git a/dev/ocaml/Arg_helper/Make/index.html b/dev/ocaml/Arg_helper/Make/index.html index 66054098..245e9a4e 100644 --- a/dev/ocaml/Arg_helper/Make/index.html +++ b/dev/ocaml/Arg_helper/Make/index.html @@ -1,2 +1,2 @@ -Make (ocaml.Arg_helper.Make)

      Module Arg_helper.Make

      Parameters

      module S : sig ... end

      Signature

      type parsed
      val default : S.Value.t -> parsed
      val set_base_default : S.Value.t -> parsed -> parsed
      val add_base_override : S.Key.t -> S.Value.t -> parsed -> parsed
      val reset_base_overrides : parsed -> parsed
      val set_user_default : S.Value.t -> parsed -> parsed
      val add_user_override : S.Key.t -> S.Value.t -> parsed -> parsed
      val parse : string -> string -> parsed ref -> unit
      type parse_result =
      1. | Ok
      2. | Parse_failed of exn
      val parse_no_error : string -> parsed ref -> parse_result
      val get : key:S.Key.t -> parsed -> S.Value.t
      +Make (ocaml.Arg_helper.Make)

      Module Arg_helper.Make

      Parameters

      module S : sig ... end

      Signature

      type parsed
      val default : S.Value.t -> parsed
      val set_base_default : S.Value.t -> parsed -> parsed
      val add_base_override : S.Key.t -> S.Value.t -> parsed -> parsed
      val reset_base_overrides : parsed -> parsed
      val set_user_default : S.Value.t -> parsed -> parsed
      val add_user_override : S.Key.t -> S.Value.t -> parsed -> parsed
      val parse : string -> string -> parsed ref -> unit
      type parse_result =
      1. | Ok
      2. | Parse_failed of exn
      val parse_no_error : string -> parsed ref -> parse_result
      val get : key:S.Key.t -> parsed -> S.Value.t
      diff --git a/dev/ocaml/Arg_helper/index.html b/dev/ocaml/Arg_helper/index.html index 99748813..a786ad3b 100644 --- a/dev/ocaml/Arg_helper/index.html +++ b/dev/ocaml/Arg_helper/index.html @@ -1,2 +1,2 @@ -Arg_helper (ocaml.Arg_helper)

      Module Arg_helper

      Decipher command line arguments of the form <value> | <key>=<value>,...

      (as used for example for the specification of inlining parameters varying by simplification round).

      Warning: this module is unstable and part of compiler-libs.

      module Make (S : sig ... end) : sig ... end
      +Arg_helper (ocaml.Arg_helper)

      Module Arg_helper

      Decipher command line arguments of the form <value> | <key>=<value>,...

      (as used for example for the specification of inlining parameters varying by simplification round).

      Warning: this module is unstable and part of compiler-libs.

      module Make (S : sig ... end) : sig ... end
      diff --git a/dev/ocaml/Asmgen/index.html b/dev/ocaml/Asmgen/index.html index aef203e2..1823d78e 100644 --- a/dev/ocaml/Asmgen/index.html +++ b/dev/ocaml/Asmgen/index.html @@ -1,5 +1,5 @@ -Asmgen (ocaml.Asmgen)

      Module Asmgen

      From Lambda to assembly code

      type middle_end = +Asmgen (ocaml.Asmgen)

      Module Asmgen

      From Lambda to assembly code

      type middle_end = backend:(module Backend_intf.S) -> prefixname:string -> ppf_dump:Stdlib.Format.formatter -> diff --git a/dev/ocaml/Asmlibrarian/index.html b/dev/ocaml/Asmlibrarian/index.html index 4f54e5a3..1e9475f7 100644 --- a/dev/ocaml/Asmlibrarian/index.html +++ b/dev/ocaml/Asmlibrarian/index.html @@ -1,2 +1,2 @@ -Asmlibrarian (ocaml.Asmlibrarian)

      Module Asmlibrarian

      val create_archive : string list -> string -> unit
      type error =
      1. | File_not_found of string
      2. | Archiver_error of string
      exception Error of error
      val report_error : Stdlib.Format.formatter -> error -> unit
      +Asmlibrarian (ocaml.Asmlibrarian)

      Module Asmlibrarian

      val create_archive : string list -> string -> unit
      type error =
      1. | File_not_found of string
      2. | Archiver_error of string
      exception Error of error
      val report_error : Stdlib.Format.formatter -> error -> unit
      diff --git a/dev/ocaml/Asmlink/index.html b/dev/ocaml/Asmlink/index.html index 16b418d8..73b2aee0 100644 --- a/dev/ocaml/Asmlink/index.html +++ b/dev/ocaml/Asmlink/index.html @@ -1,5 +1,5 @@ -Asmlink (ocaml.Asmlink)

      Module Asmlink