mlkit(1)

πŸ“¦
version 4.7.23 Β· 2 versions
, in nixpkgs unstable

🌸 NAME 🌸

Okay bestie, welcome to mlkit(1) β€” the manual page for mlkit, a fullblown Standard ML compiler. Like, the whole thing. Iconic behavior only. πŸ’…

✨ SYNOPSIS ✨

mlkit [OPTION]... [file.sml | file.sig | file.mlb]

All possible options are listed below. Yes, all of them. Hydrate first. 🫢

πŸŽ€ DEFAULTS πŸŽ€

Here's the exact factory-setting lineup, no cap:

--SML_LIB You_did_not_set_path_to_install_dir, -aopt on, --alloc_protect_always off, -argo off, -as as --64, -verbose off, --comments_in_asmcode off, -c off, -timings off, -cfold on, --contract on, -cr off, -cross_opt on, -dangle off, --dangling_pointers_statistics off, -debug off, -dcs off, --debug_linking off, --debug_man_enrich off, -Dpar off, --debug_which_at off, --delete_target_files on, --disable_atbot_analysis off, --disable_flow_var off, --disable_spurious_type_variables off, -dufa on, --eliminate_explicit_records on, --extra_gc_checks off, --fix_floating on, -gc on, -g off, -gengc off, --high_pointer_tagging on, -basislib on, --inline_functors off, --libs m,c,dl, -ldexe gcc, -ldshared gcc, -ltdce on, --log_to_file off, -max_inl_sz 200, -max_spec_sz 200, --messages on, --minimize_fixs on, --namebase dummyBase, --objs off, -opt on, -o run, -j 1, -par off, -par0 off, -ptc on, --pretty_depth 5, --pretty_string_size 80, --print_K_normal_forms off, -Ppp off, -Paux off, --print_bit_vectors off, --print_calc_offset_program off, -Pcee off, -Pccp off, -Pceb off, --print_constraints off, -abbrev on, --print_control_prefix_infix off, -Pdre off, -Pdresm off, -Peffects off, --print_excon_name off, -Peb off, --print_fetch_and_flush_program off, --print_linearised_program off, --print_lvar_name off, --print_normalized_program off, -Pole off, -Ppse off, -Ppeast off, -Prfg off, -Prip off, -Prsp off, -Prse0 off, -Pregions on, --print_register_allocated_program off, --print_rho_levels off, -Prho_protection off, --print_rho_types off, --print_simplified_program off, -Psme off, -Ptypestamps off, -Ptypes off, -quot off, --raggedRight on, -scratch off, -ri on, -prof off, --regionvar ~1, --register_allocation on, --reml off, --report_boxities off, -sig off, -rep on, --safeLinkTimeElimination off, --specialize_recursive_functions on, -stats_opt off, -stats_spurious off, --strip off, --tag_pairs off, -tag on, --type_check_lambda on, --unbox_funargs on, --unbox_real_funargs on, --unbox_reals on, -uncurry on, --values_64bit on, --warn_on_escaping_puts off, --warn_on_parallel_puts off, --warn_spurious off, -w 100.

πŸ’– DESCRIPTION πŸ’–

When invoked, mlkit compiles the specified sources into an executable file, run through a series of translation phases. The various options let you control the printing of intermediate forms and control which optimizations are performed. If source files are organised in ML Basis Files (files with extension .mlb), the compiler will memoize symbol table information and object code in the dedicated MLB directories located relative to the source files.

If mlkit is invoked without source files, an interactive REPL is started. Type :help; within the REPL to learn more about its use. Love that for you. πŸ¦‹

To learn more about programming with MLKit, consult the MLKit web page at:

http://melsman.github.io/mlkit

🌈 STANDARDS 🌈

The MLKit implements Standard ML (Revised 1997) and has almost full support for the Standard ML Basis Library (version of 2002). See the MLKit home page for a detailed overview of the support for the Standard ML Basis Library. Almost full is still a slay, okay? πŸ’œ

πŸ“ EXAMPLES πŸ“

For examples, consult the MLKit manual "Programming with Regions in the MLKit", which is available from the MLKit home page.

πŸ‘‘ OPTIONS πŸ‘‘

  • --SML_LIB S β€” Installation directory for the MLKit standard library. For normal execution you should not modify this value. However, if you wish to use the MLKit with an altered runtime system you can update this setting and the system will try to link to a runtime system found in the specified install directory.
  • --aggressive_opt, -aopt β€” Enable aggressive optimisations, including aggressive inlining. These optimisations are not guaranteed to be region safe. Turning off garbage collection automatically turns off this option.
  • --alloc_protect_always β€” Always protect allocation when parallelism is enabled. That is, disregard the result of protection inference.
  • --argobots, -argo β€” When enabled, executables link with the Argobots lightweight thread library.
  • --assembler S, -as S β€” This option specifies the assembler used. On Linux the default is as --64. On macOS, the default is as -q.
  • --chat, -verbose β€” Print a message for each compilation step in the compiler.
  • --comments_in_asmcode β€” Insert comments in assembler code.
  • --compile_only, -c β€” Compile only. Suppresses generation of executable.
  • --compiler_timings, -timings β€” Show compiler timings for each compilation phase.
  • --constant_folding, -cfold β€” Enable constant folding optimisations.
  • --contract β€” Contract is responsible for inlining, specialization, elimination of dead code, and much else (Lambda Expression Optimiser).
  • --contract_regions, -cr β€” When this option is enabled, identically typed regions bound by the same letregion construct are unified. Moreover, region parameters to non-exported functions are trimmed whenever possible.
  • --cross_module_opt, -cross_opt β€” Enable cross-module optimisation including inlining of small functions and specialisation of small recursive functions. Which optimisations are performed across modules is controlled by individual optimisation flags.
  • --dangling_pointers, -dangle β€” When this option is disabled, dangling pointers are avoided by forcing values captured in closures to live at-least as long as the closure itself. So as to make garbage collection sound, this option is disabled by default when garbage collection is enabled.
  • --dangling_pointers_statistics β€” When enabled, the compiler prints statistics about the number of times strengthening of the region typing rules (to avoid dangling pointers during evaluation) affects the target program. This flag is useful only when the flag -gc or -no_dangle is enabled.
  • --debug_compiler, -debug β€” Print intermediate forms of a program during compilation.
  • --debug_constraint_solving, -dcs β€” Debug ReML constraint solving.
  • --debug_linking β€” Debug linking of target code by showing which object files are linked together.
  • --debug_man_enrich β€” Show information about why a program unit need be recompiled. A program unit (or a functor body) is recompiled if either (a) the program unit is modified, or (b) information about an identifier for which the program unit depends upon has changed.
  • --debug_parallelism, -Dpar β€” Debug parallelism, including protection inference.
  • --debug_which_at β€” Debug storage mode analysis.
  • --delete_target_files β€” Delete assembler files produced by the compiler. If you disable this flag, you can inspect the assembler code produced by the compiler.
  • --disable_atbot_analysis β€” Disable storage mode analysis. That is, turn all allocation directives into attop.
  • --disable_flow_var β€” Disable optimised compilation of control-flow code, such as conditional expressions.
  • --disable_spurious_type_variables β€” Disable inference of spurious type variables. This option may crash the reference tracing garbage collector as it may result in dangling pointers. This flag is relevant only when garbage collection is enabled.
  • --drop_unused_funargs, -dufa β€” Drop function arguments that are unused.
  • --eliminate_explicit_records β€” Eliminate bindings of explicit records only used for selections. Transform:
let r = (e1,...,en) in ... #i r .. #j r ...  into
let x1=e1 in ... let xn=en in ... xi .. xj ...  (Lambda Expression Optimiser).
  • --extra_gc_checks β€” Insert check for GC even in functions that do not allocate.
  • --fix_floating β€” Float fix-bindings into immediate let-bindings when possible to help tail-calls not be captured in let- region bindings.
  • --garbage_collection, -gc β€” Enable garbage collection. When enabled, regions are garbage collected during execution of the program. When garbage collection is enabled, all values are tagged. Due to region inference, for most programs, the garbage collector is invoked less often than for systems based only on garbage collection. When garbage collection is enabled, introduction of dangling pointers are avoided by forcing values captured in closures to live at-least as long as the closure. Moreover, enabling garbage collection implicitly enables the preservation of tail calls (see the option preserve_tail_calls).
  • --gdb_support, -g β€” When enabled, the compiler passes the option --gstabs to as (The GNU Assembler) and preserves the generated assembler files (.s files). Passing the --gstabs option to as makes it possible to step through the generated program using gdb (The GNU Debugger).
  • --generational_garbage_collection, -gengc β€” Enable generational garbage collection. Same as option garbage collection except that two generations are used for each region.
  • --help β€” Print extended help information and exit.
  • --help S β€” Print help information about an option and exit.
  • --high_pointer_tagging β€” When enabled, the 16 most-significant bits in pointers may be used for tagging.
  • --import_basislib, -basislib β€” Import Basis Library automatically in your projects. If you wish to make use of the Standard ML Basis Library in your projects, this option should be turned on, unless you wish to import the Basis Library manually in your projects.
  • --inline_functors β€” Inline functors during static interpretation instead of generating separate target code blocks for functor bodies and arguments. With the flag enabled, performance may increase with the cost of larger (re)compilation times. The flag may be controlled in mlb-files using mlb- annotations.
  • --inline_names S β€” Names of functions that should always be inlined if possible, no matter the setting of the flag --maximum_inline_size.
  • --libdirs S β€” This option controls where ld looks for archives. The format is a comma-separated list of directories; see the -libs entry. The default is the empty list; thus ld will look for libraries in only the system specific default directories. The directories are passed to ld using the -L option.
  • --libs S β€” okay so if your Standard ML code needs to call into a foreign function living in an archive called libNAME.a (you know, via prim), you gotta drop NAME into this comma-separated list πŸ’…. Fun fact: an object file (the one with the .o extension) totally counts as an archive if you just rename it to have a .a extension, iconic behaviour honestly. You might also need -libdirs to tell ld where to go looking for library archives. These libraries get handed to ld through the -l option. πŸŽ€
  • --link_code S β€” the link-files that get linked together to make an executable. ✨
  • --link_exe S, -ldexe S β€” this one picks the command used for linking an executable. The standard vibe is gcc for linking. If you're linking against c++ libraries though, g++ is the linker you actually want. On Linux the default is gcc, whereas on macOS systems, the default is
(no cap, the original man page just ends that sentence there 😭 we don't know either)
  • --link_shared S, -ldshared S β€” picks the command used for linking a shared object file. Standard is gcc for linking. 🫢
  • --link_time_dead_code_elimination, -ltdce β€” link time dead code elimination. πŸ’€ (get it)
  • --load_basis_files S, -load S β€” basis files to be loaded before compilation proper. 🌸
  • --log_to_file β€” log to files instead of stdout. πŸ™ˆ
  • --man β€” print the man-page and exit. (yes, the man page has a flag to print the man page. main character energy πŸ‘‘)
  • --maximum_inline_size N, -max_inl_sz N β€” functions smaller than this size (counted in abstract syntax tree nodes) get inlined, even if they're used more than once. Functions used only once are always inlined. And a function declared in one program unit can be inlined when it's applied in another program unit, as long as the function is sufficiently closed (meaning it refers only to exported identifiers) and as long as --cross_opt is enabled. multi-file slay πŸ”₯
  • --maximum_specialise_size N, -max_spec_sz N β€” function-parameterised functions smaller than this size (again, counted in abstract syntax tree nodes) get specialised if all the applications of the function within its own body are applied to its formal function argument β€” even if they're used more than once. Functions used only once get specialised no matter how big they are, periodt. A function declared in one program unit may be specialised when applied in another program unit provided the function is sufficiently closed (refers only to exported identifiers) and provided --cross_opt is enabled. Also peep --specialize_recursive_functions. ✨
  • --messages β€” print messages about reading source files and generating target files. πŸ¦‹
  • --minimize_fixs β€” minimize fix constructs (Lambda Expression Optimiser). πŸŽ€
  • --mlb-subdir S β€” so the smart recompilation scheme doesn't go reusing target-code that was compiled with different settings, you can hand it a string with the mlb-subdir option to make sure the code you're using was consistently generated. This one is Useful, in particular, when you're benchmarking. πŸ“Š
  • --mlb_path_maps S, -mlb-path-map S β€” ML Basis path map files to be used. πŸ’œ
  • --namebase S β€” name base to enforce unique names when compiling mlb-files. 🌈
  • --no_aggressive_opt, -no_aopt β€” the opposite of --aggressive_opt, -aopt.
  • --no_constant_folding, -no_cfold β€” the opposite of --constant_folding, -cfold.
  • --no_contract β€” the opposite of --contract.
  • --no_cross_module_opt, -no_cross_opt β€” the opposite of --cross_module_opt, -cross_opt.
  • --no_dangling_pointers, -no_dangle β€” the opposite of --dangling_pointers, -dangle.
  • --no_delete_target_files β€” the opposite of --delete_target_files.
  • --no_drop_unused_funargs, -no_dufa β€” the opposite of --drop_unused_funargs, -dufa.
  • --no_eliminate_explicit_records β€” the opposite of --eliminate_explicit_records.
  • --no_fix_floating β€” the opposite of --fix_floating.
  • --no_garbage_collection, -no_gc β€” the opposite of --garbage_collection, -gc.
  • --no_generational_garbage_collection, -no_gengc β€” the opposite of --generational_garbage_collection, -gengc.
  • --no_high_pointer_tagging β€” the opposite of --high_pointer_tagging.
  • --no_import_basislib, -no_basislib β€” the opposite of --import_basislib, -basislib.
  • --no_link_time_dead_code_elimination, -no_ltdce β€” the opposite of --link_time_dead_code_elimination, -ltdce.
  • --no_messages β€” the opposite of --messages.
  • --no_minimize_fixs β€” the opposite of --minimize_fixs.
  • --no_optimiser, -no_opt β€” the opposite of --optimiser, -opt.
  • --no_preserve_tail_calls, -no_ptc β€” the opposite of --preserve_tail_calls, -ptc.
  • --no_print_aux_reset, -no_Paux β€” the opposite of --print_aux_reset, -Paux.
  • --no_print_control_abbrev_layout, -no_abbrev β€” the opposite of --print_control_abbrev_layout, -abbrev.
  • --no_print_regions, -no_Pregions β€” the opposite of --print_regions, -Pregions.
  • --no_raggedRight β€” the opposite of --raggedRight. (yes the capital R is real, respect it πŸ’…)
  • --no_region_inference, -no_ri β€” the opposite of --region_inference, -ri.
  • --no_register_allocation β€” the opposite of --register_allocation.
  • --no_repository, -no_rep β€” the opposite of --repository, -rep.
  • --no_specialize_recursive_functions β€” the opposite of --specialize_recursive_functions.
  • --no_type_check_lambda β€” the opposite of --type_check_lambda.
  • --no_unbox_funargs β€” the opposite of --unbox_funargs.
  • --no_unbox_real_funargs β€” the opposite of --unbox_real_funargs.
  • --no_unbox_reals β€” the opposite of --unbox_reals.
  • --no_uncurrying, -no_uncurry β€” the opposite of --uncurrying, -uncurry.
  • --objs β€” if you enable this, MLKit writes object-file paths to the file run or to the file specified by -output. The path to the runtime system (archive file) is included. Bestie, this option is best used together with -no_delete_target_files. 🫢
  • --optimiser, -opt β€” enable optimisation of intermediate language code (Lambda Expressions). Which optimisations actually happen is controlled by the individual flags. The optimisation lineup includes function inlining, function specialisation, fix-minimization, unboxing of function arguments, and elimination of unnecessary record constructions. ate. πŸ”₯
  • --output S, -o S β€” the name of the executable file generated by the Kit. πŸ‘‘
  • --parallel_compilation N, -j N β€” the maximum number of parallel processes used for compilation. ⚑
  • --parallelism, -par β€” when enabled, the runtime system supports parallel threads. 🌈
  • --parallelism_alloc_unprotected, -par0 β€” when enabled, allocation into a region is not guaranteed to be atomic.
  • --preserve_tail_calls, -ptc β€” avoid the wrapping of letregion constructs around tail calls. Turning on garbage collection automatically turns this option on too. ✨
  • --pretty_depth N β€” controls the pretty-printing depth of values printed in the REPL. The value must be an integer larger than zero. πŸŽ€
  • --pretty_string_size N β€” controls the pretty-printing size of strings printed in the REPL. The value must be an integer larger than zero. πŸŽ€
  • --print_K_normal_forms β€” print Region Expressions in K-Normal Form. Applicable only after storage mode analysis has been applied. πŸ¦‹
  • --print_all_program_points, -Ppp β€” print all program points when printing physical size inference expressions. ⭐
  • --print_aux_reset, -Paux β€” print resetting of auxiliary regions associated with construction of nullary constructor values. This flag affects the MulExp pretty printer. πŸ’œ
  • --print_bit_vectors β€” (the man page really just leaves this one hanging, no description given πŸ’€)
  • --print_calc_offset_program β€” (also no description on this one, it's giving mystery πŸ™ˆ)
  • --print_call_explicit_expression, -Pcee β€” print Region Expression with call annotations. 🌸
  • --print_clos_conv_program, -Pccp β€” print Region Expression after closure conversion.
  • --print_closed_export_bases, -Pceb β€” controls printing of closed export bases.
  • --print_constraints β€” print ReML effect constraints when printing region and effect variables. 🧚
  • --print_control_abbrev_layout, -abbrev β€” abbreviate the layout of multiplicity expressions and call-explicit expressions. Like, for instance: don't show at- annotations for top-level functions, don't show at- annotations for immediate constants, don't show region-bindings for zero-size regions that are associated only with immediate constants, don't show empty formal and actual region parameter lists, don't show funcall, and don't show the unique id for explicit region variables or explicit effect variables. minimalism! πŸ’…
  • --print_control_prefix_infix β€” prefix infix operations with the module identifier to further indicate the type of the operation. πŸŽ€
  • --print_drop_regions_expression, -Pdre β€” print Region Expression after dropping word regions and region arguments with only get-effects.
  • --print_drop_regions_expression_with_storage_modes, -Pdresm β€” print Region Expression after dropping word regions and region arguments with only get-effects. Also prints atbot and attop annotations resulting from storage mode analysis. ✨
  • --print_effects, -Peffects β€” print effects in region types. 🌈
  • --print_excon_name β€” print the underlying unique name when printing excons. πŸ”
  • --print_export_bases, -Peb β€” controls printing of export bases.
  • --print_fetch_and_flush_program β€” print the program with instructions for activation record fetching and flushing. πŸ“¦
  • --print_linearised_program β€” print a linearlised representation of the program unit. (yes, "linearlised", exactly like that β€” iconic spelling, we stan 🫢)
  • --print_lvar_name β€” print the underlying unique name when printing lvars. πŸ”
  • --print_normalized_program β€” print Region Expression after K-normalisation. πŸ¦‹
  • --print_opt_lambda_expression, -Pole β€” print Lambda Expression after optimisation. πŸ”₯
  • --print_physical_size_inference_expression, -Ppse β€” print Region Expression after physical size inference. πŸ“
  • --print_post_elab_ast, -Ppeast β€” print ast after elaboration. (that lowercase ast is canon, don't @ me)
  • --print_region_flow_graph, -Prfg β€” print a region flow graph for the program fragment and generate a .vcg-file, which you can view using the xvcg program. πŸ‘€
  • --print_region_inferred_program, -Prip β€” print region-inferred program.
  • --print_region_spreaded_program, -Prsp β€” print region-spreaded program. ("spreaded" β€” yes, that's the energy, we keep it πŸ’…)
  • --print_region_static_env0, -Prse0 β€” print the imported region static environment prior to region inference. 🌱
  • --print_regions, -Pregions β€” print region variables in types and expressions. πŸŽ€
  • --print_register_allocated_program β€” (again, the man page gives us nothing on this one 😭)
  • --print_rho_levels β€” print levels of region and effect variables in types and intermediate forms. Levels control quantification of region and effect variables. πŸ“Š
  • --print_rho_protection, -Prho_protection β€” print protectedness of region variables if set (P or U). πŸ›‘οΈ
  • --print_rho_types β€” prints region types of region variables in types and intermediate forms, periodt. Possible region types are:
p  Type of regions containing pairs.
a  Type of regions containing arrays.
r  Type of regions containing references.
t  Type of regions containing triples.
s  Type of regions containing strings.
T  Type of regions containing other than the above
   kinds of values.
  • --print_simplified_program β€” prints the simplified program after register allocation. slay ✨
  • --print_storage_mode_expression, -Psme β€” prints the Region Expression after storage mode analysis.
  • --print_type_name_stamps, -Ptypestamps β€” prints type name stamps and their attributes in types and expressions. iykyk 🫢
  • --print_types, -Ptypes β€” prints types when printing intermediate forms. For Lambda Expressions, ordinary ML types are printed, whereas for Region Expressions, region types are printed. bestie, that distinction matters πŸ’…
  • --quotation, -quot β€” enables support for quotations and anti-quotations. When enabled, the datatype
datatype 'a frag = QUOTE of string
                 | ANTIQUOTE 'a

is available in the initial environment. Moreover, values of this datatype may be constructed using the quotation/antiquotation syntax:

val s = "world"
val a : string frag list = `hello ^s - goodbye`
  • --raggedRight β€” uses a ragged right margin in pretty-printing of expressions and types. aesthetic choices in my compiler? more likely than you think πŸŽ€
  • --recompile_basislib, -scratch β€” recompiles the basis library from scratch. This option is useful together with other options that control code generation. full reset energy πŸ”₯
  • --region_inference, -ri β€” with this flag disabled, all values are allocated in global regions. noted, no cap ⭐
  • --region_profiling, -prof β€” enables region profiling. Object code stemming from compiling a program with region profiling enabled is instrumented with profiling information. When a program compiled with region profiling enabled is run, the program produces a profile file run.rp, which can then be read by the profiling tool rp2ps that comes with the MLKit to produce profiling graphs of various forms. data girlie behavior πŸ“ˆ
  • --regionvar N β€” uses the provided number as the id of the first generated region variable. When this option is provided together with the -c option, a file f.rv is written in the MLB/ directory with two numbers in it: the id for the first region variable generated and the id for the last region variable generated. The number given must be greater than any id for a top-level region/effect variable (>9). important boundary check, bestie 🚨
  • --register_allocation β€” performs register allocation. Without register allocation enabled, programs run somewhat slower--but they run, and you save about 15 percent on compile time. tradeoffs, babes πŸ’š
  • --reml β€” ReML is Standard ML with support for programming with explicit regions, explicit effects, and effect constraints. With ReML, atomic effects also include mutation effects. Whereas ReML includes parallel thread support, currently, ReML does not support integration with reference-tracing garbage collection. big brain mode with a lil caveat 🧠
  • --report_boxities β€” reports for every datatype declaration the inferred boxity (representation) of its value constructors. representation tea πŸ«–
  • --report_file_sig, -sig β€” reports signatures for each file read. receipts for every file, literally 🧾
  • --repository, -rep β€” uses an in-memory repository to avoid unnecessary recompilation. This flag should be disabled when compiling mlb-files, which make use of the file system as a repository. do not mix those vibes ⚠️
  • --safeLinkTimeElimination β€” treats this module as a library in the sense that the code can be eliminated if it is not used, even if the code has side effects. side effects included, so read that twice 😭
  • --specialize_recursive_functions β€” specialises recursive functions. Use the option maximum_specialise_size to control which functions are specialised. If this flag is on, functions that are applied only once are specialised, no matter the setting of --maximum_specialise_size (Lambda Expression Optimiser). optimizer main character energy πŸ‘‘
  • --statistics_after_optimisation, -stats_opt β€” reports optimisation statistics after optimisation of Lambda Expression. numbers after the glow-up πŸ“Š
  • --statistics_spurious, -stats_spurious β€” reports statistics on spurious functions and instantiations of spurious type variable. This flag is relevant only when garbage collection is enabled. only relevant with GC, bestie πŸ—‘οΈ
  • --strip β€” if enabled, MLKit strips the generated executable. declutter the binary 🧹
  • --tag_pairs β€” uses a tagged representation of pairs for garbage collection. Garbage collection works fine with a tag-free representation of pairs, so this option is here for measurement purposes. measurement purposes only, no drama πŸ“
  • --tag_values, -tag β€” enables tagging of values as used when garbage collection is enabled for implementing pointer traversal. pointer traversal support wig πŸ’«
  • --type_check_lambda β€” type checks lambda expression prior to performing region inference. Type checking is very fast and for normal use you should not disable this option. Type checking intermediate forms is very powerful for eliminating bugs in the compiler. do not turn this off unless you’re being brave in a bad way 🫢
  • --unbox_funargs β€” unboxes arguments to fix-bound functions, for which the argument 'a' is used only in contexts '#i a'. All call sites are transformed to match the new function (Lambda Expression Optimiser). unbox and thrive πŸ“¦
  • --unbox_real_funargs β€” unboxes arguments of type real to fix-bound functions, for which the argument 'a' is used only in contexts that unboxes 'a'. All call sites are transformed to match the new function. This optimisation has effect only when the flags -unbox_funargs and (the original page literally stops mid-sentence there, bestie 😭)
  • --unbox_reals β€” unboxes real values and computations on real values inside functions. Real values stored in data structures and passed to functions are still boxed. inside functions only, no cap πŸ“
  • --uncurrying, -uncurry β€” enables uncurrying of curried functions. The uncurried function takes its arguments unboxed in registers or on the stack. For partial applications and non-application uses of the function, appropriate eta-expansions are applied. curry is canceled, respectfully πŸ›
  • --values_64bit β€” supports 64-bit values. Should be enabled for backends supporting 64-bit integers and words. big numbers need big support πŸ”’
  • --version, -v, -V β€” prints version information and exits. the classic β€œwhat’s the version” moment πŸ’…
  • --warn_on_escaping_puts β€” enables the compiler to issue a warning whenever a region type scheme contains a put effect on a region that is not quantified. warning girlie says pay attention 🚨
  • --warn_on_parallel_puts β€” enables the compiler to issue a warning whenever a par-construct is passed functions with intersecting put effects. parallel put effect intersection? warned. ⚑
  • --warn_spurious β€” warns on the presence of a spurious type variable. This flag is relevant only when garbage collection is enabled. spurious type variable spotted, allegedly πŸ‘€
  • --width N, -w N β€” column width used when pretty printing intermediate code. formatting matters, always πŸ“

πŸ’₯ EXIT STATUS πŸ’₯

Exits with status 0 on success and -1 on failure. slay or stray, no in-between πŸ’€

🌱 ENVIRONMENT 🌱

A library install directory must be provided in an environment variable SML_LIB, as a path-definition in the user's personal path-map ~/.mlkit/mlb-path-map, or in a system wide path-map /nix/store/sfp5bfgah1f35wd1r96xrvhzx6nir1r6-mlkit-4.7.23/etc/mlkit/mlb-path-map. pick a lane, bestieβ€”but pick one 🫢

πŸ“ FILES πŸ“

  • /nix/store/sfp5bfgah1f35wd1r96xrvhzx6nir1r6-mlkit-4.7.23/etc/mlkit/mlb-path-map β€” System-wide configuration of library and runtime system locations
  • ~/.mlkit/mlb-path-map β€” User specific configuration of library and runtime system locations

πŸ‘‘ CREDITS πŸ‘‘

The MLKit (version 2 and beyond) was developed by Lars Birkedal, Martin Elsman, Niels Hallenberg, Tommy H. Olesen, Mads Tofte, and Carsten Varming. People who have contributed with bug-fixes and improvements include Peter Bertelsen, Vesa Karvonen, Ken Friis Larsen, Henning Niss, Peter Sestoft, and Troels Henriksen. Nick Rothwell and David N. Turner took part in the development of the MLKit version 1. legends, every single one 🌟

πŸ”— SEE ALSO πŸ”—

See the MLKit manual "Programming with Regions in the MLKit", available from the MLKit home page

http://melsman.github.io/mlkit

for an in-depth introduction to programming with regions in the MLKit. deep dive unlocked πŸ¦‹

The home page also provides an overview of which parts of the Standard ML Basis Library the MLKit implements, along with download and installation instructions. home page ate, fr fr πŸ’–


Signed off by MLKit v4.7.23, page mlkit(1), with the footer date stamp doing its cute mysterious little thing πŸ’…βœ¨πŸŽ€

πŸ“¦ where this page comes from