Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
reml(1)		      MLKit - a	compiler for Standard ML	       reml(1)

NAME
       reml - Standard ML with Explicit	Regions	and Effects

SYNOPSIS
       reml [OPTION]...	[file.sml | file.sig | file.mlb]

       All possible options are	listed below.

DEFAULTS
       --SML_LIB  You_did_not_set_path_to_install_dir,	-aopt on, --alloc_pro-
       tect_always  off,  -argo	 off,  -as  as	--64,  -verbose	 off,	--com-
       ments_in_asmcode	 off,  -c  off,	 -timings off, --contract on, -cr off,
       -cross_opt on, -dangle on, --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_analy-
       sis   off,  --disable_flow_var  off,  --eliminate_explicit_records  on,
       --fix_floating on, -g off,  --high_pointer_tagging  on,	-basislib  on,
       --inline_functors  off,	--libs	m,c,dl,	-ldexe gcc14, -ldshared	gcc14,
       -ltdce on, --log_to_file	off, --maximum_inline_size 200,	--maximum_spe-
       cialise_size 200, --messages on,	--minimize_fixs	on, --namebase	dummy-
       Base,  --objs  off, -opt	on, -o run, -j 1, -par on, -par0 off, -ptc on,
       --pretty_depth 5, --pretty_string_size 80, --print_K_normal_forms  off,
       -Ppp  off,  --print_bit_vectors	off,  --print_calc_offset_program off,
       -Pcee off, -Pccp	off, -Pceb off,	--print_constraints  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, -Pre-
       gions on,  --print_register_allocated_program  off,  --print_rho_levels
       off,   -Prho_protection	off,  --print_rho_types	 off,  --print_simpli-
       fied_program  off,  -Psme   off,	  -Ptypestamps	 off,	-Ptypes	  off,
       --raggedRight  on,  -scratch off, -ri on, -prof off, --register_alloca-
       tion on,	--reml on, --report_boxities off, -sig off,  --safeLinkTimeEl-
       imination  off,	--specialize_recursive_functions  on, --statistics_af-
       ter_optimisation	 off,  --strip	off,  --type_check_lambda  on,	 --un-
       box_function_arguments on, --unbox_reals	on, -uncurry on, --warn_on_es-
       caping_puts off,	--warn_on_parallel_puts	off, -w	100.

DESCRIPTION
       ReML is Standard	ML with	support	for programming	with explicit regions,
       explicit	effects, and effect constraints. With ReML, atomic effects in-
       clude  get-effects,  put-effects, and mut-effects. Whereas ReML include
       parallel	thread support,	ReML does not support integration with	refer-
       ence-tracing  garbage  collection.When  invoked,	 reml will compile the
       specified sources into an executable  file  run	through	 a  series  of
       translation  phases.  The  various  options  can	be used	to control the
       printing	of intermediate	forms and to 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  reml	 is  invoked  without  source  files,  an  interactive REPL is
       started.	Type ':help;' within the REPL to learn more about its use.

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

       http://melsman.github.io/mlkit

STANDARDS
       ReML  is	 based on the MLKit. 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.

EXAMPLES
       For examples, consult the files in the 'test/reml'  folder  within  the
       github repository at http://github.com/melsman/mlkit.

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.

       --aggresive_opt,	-aopt
	   Enable aggressive optimisations, including constant folding and ag-
	   gressive inlining. These optimisations are not guaranteed to	be re-
	   gion	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.

       --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 func-
	   tions and specialisation of small recursive functions. Which	 opti-
	   misations  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) effects 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 com-
	   piler.

       --disable_atbot_analysis
	   Disable storage mode	analysis. That is, turn	all allocation	direc-
	   tives into attop.

       --disable_flow_var
	   Disable  optimised compilation of control-flow code,	such as	condi-
	   tional expressions.

       --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 Ex-
	   pression Optimiser).

       --fix_floating
	   Float fix-bindings into immediate  let-bindings  when  possible  to
	   help	tail-calls not be captured in let- region bindings.

       --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).

       --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 Li-
	   brary 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 us-
	   ing 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 de-
	   fault is the	empty list; thus 'ld' will look	for libraries in  only
	   the	system specific	default	directores. The	directories are	passed
	   to 'ld' using the -L	option.

       --libs S
	   For accessing a foreign function residing in	an archive named  lib-
	   NAME.a  from	 Standard ML code (using prim),	you need to add	'NAME'
	   to this comma-separated list. Notice	that an	object file (with  ex-
	   tension  '.o')  is  an  archive  if it is renamed to	have extension
	   '.a'. You may need to use the -libdirs option for specifying	direc-
	   tories for which ld should look for library archives. The libraries
	   are passed to 'ld' using the	-l option.

       --link_code S
	   Link-files to be linked together to form an executable.

       --link_exe S, -ldexe S
	   This	option specifies the command used for linking  an  executable.
	   The standard	is to use 'gcc'	for linking. When linking with c++ li-
	   braries,  'g++'  is	the  linker  you want. On Linux	the default is
	   'gcc14', whereas on newer macOS systems (Darwin >  23.1),  the  de-
	   fault  is  'gcc14  -Wl,-ld_classic,-stack_size,0x10000000'  and  on
	   older macOS systems,	the default is

       --link_shared S,	-ldshared S
	   This	option specifies the command used for linking a	shared	object
	   file. The standard is to use	'gcc' for linking.

       --link_time_dead_code_elimination, -ltdce
	   Link	time dead code elimination.

       --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 man-page and exit.

       --maximum_inline_size N
	   Functions  smaller  than this size (counted in abstract syntax tree
	   nodes) are inlined, even if they are	used more than once. Functions
	   that	are used only once are always inlined.

       --maximum_specialise_size N
	   Curried functions smaller than this size (counted in	abstract  syn-
	   tax tree nodes) are specialised if all applications of the function
	   within  its	own  body  are applied to its formal argument, even if
	   they	are used more than once. Functions that	are used only once are
	   specialised no matter their size. See also  the  option  --special-
	   ize_recursive_functions.

       --messages
	   Print  messages  about  reading  source files and generating	target
	   files.

       --minimize_fixs
	   Minimize fix	constructs (Lambda Expression Optimiser).

       --mlb-subdir S
	   For ensuring	that the smart recompilation  scheme  is  not  reusing
	   target-code	compiled  with	different  settings, a string provided
	   with	the mlb-subdir option can ensure the use of consistently  gen-
	   erated  code. This option is	Useful,	in particular, when performing
	   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_aggresive_opt, -no_aopt
	   Opposite of --aggresive_opt,	-aopt.

       --no_contract
	   Opposite of --contract.

       --no_cross_module_opt, -no_cross_opt
	   Opposite of --cross_module_opt, -cross_opt.

       --no_dangling_pointers, -no_dangle
	   Opposite of --dangling_pointers, -dangle.

       --no_delete_target_files
	   Opposite of --delete_target_files.

       --no_eliminate_explicit_records
	   Opposite of --eliminate_explicit_records.

       --no_fix_floating
	   Opposite of --fix_floating.

       --no_high_pointer_tagging
	   Opposite of --high_pointer_tagging.

       --no_import_basislib, -no_basislib
	   Opposite of --import_basislib, -basislib.

       --no_link_time_dead_code_elimination, -no_ltdce
	   Opposite of --link_time_dead_code_elimination, -ltdce.

       --no_messages
	   Opposite of --messages.

       --no_minimize_fixs
	   Opposite of --minimize_fixs.

       --no_optimiser, -no_opt
	   Opposite of --optimiser, -opt.

       --no_preserve_tail_calls, -no_ptc
	   Opposite of --preserve_tail_calls, -ptc.

       --no_print_regions, -no_Pregions
	   Opposite of --print_regions,	-Pregions.

       --no_raggedRight
	   Opposite of --raggedRight.

       --no_region_inference, -no_ri
	   Opposite of --region_inference, -ri.

       --no_register_allocation
	   Opposite of --register_allocation.

       --no_specialize_recursive_functions
	   Opposite of --specialize_recursive_functions.

       --no_type_check_lambda
	   Opposite of --type_check_lambda.

       --no_unbox_function_arguments
	   Opposite of --unbox_function_arguments.

       --no_unbox_reals
	   Opposite of --unbox_reals.

       --no_uncurrying,	-no_uncurry
	   Opposite of --uncurrying, -uncurry.

       --objs
	   If enabled, MLKit writes object-file	paths to the file run  or  the
	   file	 specified by -output. The path	to the runtime system (archive
	   file) is included. The option is best used together with the	option
	   -no_delete_target_files.

       --optimiser, -opt
	   Enable optimisation of intermediate language	code  (Lambda  Expres-
	   sions). Which optimisations are performed is	controlled by individ-
	   ual	flags.	The  optimisations include function inlining, function
	   specialisation, fix-minimization, unboxing of  function  arguments,
	   and elimination of unnecessary record constructions.

       --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. Turn-
	   ing on garbage collection automatically turns on this option.

       --pretty_depth N
	   This	flag controls the pretty-printing depth	of values  printed  in
	   the REPL. The value must be an integer larger than zero.

       --pretty_string_size N
	   This	 flag  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 ex-
	   pressions.

       --print_bit_vectors

       --print_calc_offset_program

       --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 vari-
	   ables.

       --print_drop_regions_expression,	-Pdre
	   Print Region	Expression after dropping word regions and region  ar-
	   guments with	only get-effects.

       --print_drop_regions_expression_with_storage_modes, -Pdresm
	   Print  Region Expression after dropping word	regions	and region ar-
	   guments with	only get-effects. Also print atbot and	attop  annota-
	   tions resulting from	storage	mode analysis.

       --print_effects,	-Peffects
	   Print effects in region types.

       --print_excon_name
	   Print underlying unique name	when printing excons.

       --print_export_bases, -Peb
	   Controls printing of	export bases.

       --print_fetch_and_flush_program
	   Print  program with instructions for	activation record fetching and
	   flushing.

       --print_linearised_program
	   Print a linearlised representation of the program unit.

       --print_lvar_name
	   Print 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.

       --print_region_flow_graph, -Prfg
	   Print a region flow graph for the program fragment and  generate  a
	   .vcg-file, which can	be viewed using	the xvcg program.

       --print_region_inferred_program,	-Prip
	   Print region-inferred program.

       --print_region_spreaded_program,	-Prsp
	   Print region-spreaded program.

       --print_region_static_env0, -Prse0
	   Print imported region static	environment prior to region inference.

       --print_regions,	-Pregions
	   Print region	variables in types and expressions.

       --print_register_allocated_program

       --print_rho_levels
	   Print levels	of region and effect variables in types	and intermedi-
	   ate forms. Levels control quantification of region and effect vari-
	   ables.

       --print_rho_protection, -Prho_protection
	   Print protectedness of region variables if set (P or	U).

       --print_rho_types
	   Print  region  types	 of region variables in	types and intermediate
	   forms. 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
	   Print simplified program after register allocation.

       --print_storage_mode_expression,	-Psme
	   Print Region	Expression after storage mode analysis

       --print_type_name_stamps, -Ptypestamps
	   Print type name stamps and their attributes in  types  and  expres-
	   sions.

       --print_types, -Ptypes
	   Print  types	 when  printing	intermediate forms. For	Lambda Expres-
	   sions, ordinary ML types are	printed, whereas  for  Region  Expres-
	   sions, region types are printed.

       --raggedRight
	   Use	ragged	right  margin  in  pretty-printing  of expressions and
	   types.

       --recompile_basislib, -scratch
	   Recompile basis library from	scratch. This  option  is  useful  to-
	   gether with other options that control code generation.

       --region_inference, -ri
	   With	 this  flag  disabled,	all values are allocated in global re-
	   gions.

       --region_profiling, -prof
	   Enable region profiling. Object code	stemming from compiling	a pro-
	   gram	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.

       --register_allocation
	   Perform register allocation.	Without	register  allocation  enabled,
	   programs  run  somewhat  slower--but	they run and you save about 15
	   percent on compile time.

       --reml
	   ReML	is Standard ML with support for	programming with explicit  re-
	   gions,  explicit effects, and effect	constraints. With ReML,	atomic
	   effects also	include	mutation effects. Whereas ReML include	paral-
	   lel	thread	support, ReML does not support integration with	refer-
	   ence-tracing	garbage	collection.

       --report_boxities
	   Report for every datatype declaration the inferred  boxity  (repre-
	   sentation) of its value constructors.

       --report_file_sig, -sig
	   Report signatures for each file read.

       --safeLinkTimeElimination
	   Treat  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.

       --specialize_recursive_functions
	   Specialise  recursive  functions.  Use  the	 option	  maximum_spe-
	   cialise_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).

       --statistics_after_optimisation
	   Report optimisation statistics after	optimisation of	Lambda Expres-
	   sion.

       --strip
	   If enabled, MLKit strips the	generated executable.

       --type_check_lambda
	   Type	 check lambda expression prior to performing region inference.
	   Type	checking is very fast and for normal use you should  not  dis-
	   able	this option. Type checking intermediate	forms is very powerful
	   for eliminating bugs	in the compiler.

       --unbox_function_arguments
	   Unbox  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_reals
	   Unbox real values and computations on real values inside functions.
	   Real	 values	 stored	in data	structures and passed to functions are
	   still boxed.

       --uncurrying, -uncurry
	   Enable uncurrying of	 curried  functions.  The  uncurried  function
	   takes  its arguments	unboxed	in registers or	on the stack. For par-
	   tial	applications and non- application uses of the function,	appro-
	   priate eta- expansions are applied.

       --version, -v, -V
	   Print version information and exit.

       --warn_on_escaping_puts
	   Enable the compiler to issue	 a  warning  whenever  a  region  type
	   scheme contains a put effect	on a region that is not	quantified.

       --warn_on_parallel_puts
	   Enable  the compiler	to issue a warning whenever a par-construct is
	   passed functions with intersecting put effects.

       --width N, -w N
	   Column width	used when pretty printing intermediate code.

EXIT STATUS
       Exits with status 0 on success and -1 on	failure.

ENVIRONMENT
       A library install directory must	be provided in an environment variable
       SML_LIB or as a path-definition in  either  the	system	wide  path-map
       /etc/reml/mlb-path-map  or in the user's	personal path-map ~/.reml/mlb-
       path-map.

FILES
       /etc/reml/mlb-path-map
	      System-wide configuration	of library and	runtime	 system	 loca-
	      tions

       ~/.reml/mlb-path-map
	      User  specific configuration of library and runtime system loca-
	      tions

CREDITS
       ReML was	developed by Martin Elsman. Many people	have helped developing
       the MLKit on which ReML is built; see  the  MLKit  home	page  for  de-
       tails..SH  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.

       The home	page also provides an overview of which	parts of the  Standard
       ML  Basis Library the MLKit implements, along with download and instal-
       lation instructions.

version	v4.7.13			  2024-11-27			       reml(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=reml&sektion=1&manpath=FreeBSD+Ports+15.0.quarterly>

home | help