113 lines
4.3 KiB
Markdown
113 lines
4.3 KiB
Markdown
|
|
# Stable Interface (v1.0)
|
||
|
|
|
||
|
|
- [X] Make the entire library `-safe-string` compliant. This will involve
|
||
|
|
introducing a `Bytes` module, removing all direct mutation on strings from
|
||
|
|
the `String` module, and "re-typing" string values that require mutation to
|
||
|
|
`bytes`.
|
||
|
|
|
||
|
|
- [X] Do not export the `\*\_intf` modules from Base. Instead, any signatures
|
||
|
|
should be exported by the `.ml` and `.mli`s.
|
||
|
|
|
||
|
|
- [X] Only expose the first-class module interface of `Hashtbl`. Accompanying
|
||
|
|
this should be cleanup of `Hashtbl_intf`, moving anything that's still
|
||
|
|
required in core_kernel to the appropriate files in that project.
|
||
|
|
|
||
|
|
- [X] Replace `Hashtbl.create (module String) ()` by just
|
||
|
|
`Hashtbl.create (module String)`
|
||
|
|
|
||
|
|
- [X] Remove `replace` from `Hashtbl_intf.Accessors`.
|
||
|
|
|
||
|
|
- [X] Label one of the arguments of `Hashtbl_intf.merge_into` to indicate the
|
||
|
|
flow of data.
|
||
|
|
|
||
|
|
- [X] Merge `Hashtbl_intf.Key_common` and `Hashtbl_intf.Key_plain`.
|
||
|
|
|
||
|
|
- [X] Use `Either.t` as the return value for `Map.partition`.
|
||
|
|
|
||
|
|
- [X] Rename `Monad_intf.all_ignore` to `Monad_intf.all_unit`.
|
||
|
|
|
||
|
|
- [ ] Eliminate all uses of `Not_found`, replacing them with descriptive error messages.
|
||
|
|
|
||
|
|
- [X] Move the various private modules to `Base.Base_private`
|
||
|
|
instead of `Base.Exported_for_specific_uses` and `Base.Not_exposed_properly`
|
||
|
|
|
||
|
|
- [X] Use `compare` rather than `cmp` as the label for comparison functions
|
||
|
|
throughout.
|
||
|
|
|
||
|
|
# Implementation Cleanup
|
||
|
|
|
||
|
|
- [ ] Remove `ignore` and `(=)` from `Sexp_conv`'s public interface. These
|
||
|
|
values are hidden from the documentation so their removal won't be
|
||
|
|
considered a breaking API change.
|
||
|
|
|
||
|
|
- [ ] Do not expose the type equality `Int63_emul.W.t = int64`.
|
||
|
|
|
||
|
|
- [ ] Replace the exception thrown by `Float.of_string` with a named
|
||
|
|
exception that's more descriptive.
|
||
|
|
|
||
|
|
- [X] Delete the `Hashable` toplevel module. This is a vestige of the previous
|
||
|
|
`Map` and `Set` implementations and is no longer needed.
|
||
|
|
|
||
|
|
- [ ] Ensure that `Map` operations that are effective NO-OPs return the same
|
||
|
|
`Map.t` they were provided. Candidate operations include e.g `add`, `remove`,
|
||
|
|
`filter`.
|
||
|
|
|
||
|
|
- [ ] Simplify the implementation of `Option.value_exn`, if possible.
|
||
|
|
|
||
|
|
- [ ] Eliminate all instances of `open! Polymorphic_compare`
|
||
|
|
|
||
|
|
- [ ] Refactor common blit code in `String.replace_all` and `String.replace_first`.
|
||
|
|
|
||
|
|
- [ ] Delete unused function aliases in `Import0`
|
||
|
|
|
||
|
|
- [ ] Put `Sexp_conv.Exn_converter` into its own file, with only an
|
||
|
|
alias in Sexp_conv, so that it doesn't get pulled unless used
|
||
|
|
|
||
|
|
- [ ] Create a file with all the basic types and their associated
|
||
|
|
combinators (`sexp_of_t`, `compare`, `hash`), and expose the
|
||
|
|
declaration
|
||
|
|
|
||
|
|
- [ ] Put all the exported private modules from
|
||
|
|
`Base.Exported_for_specific_uses` and `Base.Not_exposed_properly`
|
||
|
|
in `Base.Base_private`
|
||
|
|
|
||
|
|
- [ ] Decide on a better name for `Polymorphic_compare`.
|
||
|
|
`Polymorphic_compare_intf` contains interface for comparison
|
||
|
|
of non-polymorphic types, which is weird. Get rid of it and
|
||
|
|
inline things in `Comparable_intf`
|
||
|
|
|
||
|
|
- [X] `hashtbl_of_sexp` shouldn't live in Base.Sexp_conv since we
|
||
|
|
have our own hash tables. Move it to sexplib
|
||
|
|
|
||
|
|
# Performance Improvements
|
||
|
|
|
||
|
|
- [ ] In `Hash_set.diff`, use the size of each set to determine which to iterate
|
||
|
|
over.
|
||
|
|
|
||
|
|
- [ ] Ensure that the correct `compare` function and other related functions are
|
||
|
|
exported by all modules. These functions should not be derived from
|
||
|
|
a functor application, in order to ensure proper inlining. Implementing
|
||
|
|
this change should also include benchmarks to verify the initial result,
|
||
|
|
and to maintain it on an ongoing basis. See `bench/bench_int.ml` for
|
||
|
|
examples.
|
||
|
|
|
||
|
|
- [X] Optimize `Lazy.compare` by performing a `phys_equal` check before
|
||
|
|
forcing the lazy value. Note that this will also change the semantics of
|
||
|
|
`compare` and should be documented and rolled out with care.
|
||
|
|
|
||
|
|
- [ ] Conduct a thorough performance review of the `Sequence` module.
|
||
|
|
|
||
|
|
# Documentation
|
||
|
|
|
||
|
|
- [ ] Consolidate documentation the interface and implementation files
|
||
|
|
related to the `Hash` module.
|
||
|
|
|
||
|
|
- [ ] Add documentation to the `Ref` toplevel module.
|
||
|
|
|
||
|
|
- [ ] Document properly how `String.unescape_gen` handles malformed strings
|
||
|
|
|
||
|
|
# Changes For The Distant Future
|
||
|
|
|
||
|
|
- [ ] Make the various comparison functions return an `Ordering.t`
|
||
|
|
instead of an `int`.
|