src/Pure/ML/ml_init.ML
author wenzelm
Fri, 07 Aug 2020 20:28:53 +0200
changeset 72113 2d9e40cfe9af
parent 68918 3a0db30e5d87
child 73384 d21dbfd3d69b
permissions -rw-r--r--
temporary workaround for 100% CPU usage in OS.Process.sleep;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
67205
06c91eac25f2 clarified file name;
wenzelm
parents: 63925
diff changeset
     1
(*  Title:      Pure/ML/ml_init.ML
62818
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
     3
67205
06c91eac25f2 clarified file name;
wenzelm
parents: 63925
diff changeset
     4
Initial ML environment.
62818
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
     5
*)
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
     6
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
     7
val seconds = Time.fromReal;
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
     8
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
     9
val _ =
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
    10
  List.app ML_Name_Space.forget_val
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
    11
    ["isSome", "getOpt", "valOf", "foldl", "foldr", "print", "explode", "concat"];
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
    12
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
    13
val ord = SML90.ord;
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
    14
val chr = SML90.chr;
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
    15
val raw_explode = SML90.explode;
63925
500646ef617a avoid old SML90;
wenzelm
parents: 62943
diff changeset
    16
val implode = String.concat;
62818
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
    17
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
    18
val pointer_eq = PolyML.pointerEq;
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
    19
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
    20
val error_depth = PolyML.error_depth;
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
    21
2733b240bfea clarified modules;
wenzelm
parents:
diff changeset
    22
open Thread;
62923
3a122e1e352a clarified bootstrap;
wenzelm
parents: 62883
diff changeset
    23
3a122e1e352a clarified bootstrap;
wenzelm
parents: 62883
diff changeset
    24
datatype illegal = Interrupt;
3a122e1e352a clarified bootstrap;
wenzelm
parents: 62883
diff changeset
    25
3a122e1e352a clarified bootstrap;
wenzelm
parents: 62883
diff changeset
    26
structure Basic_Exn: BASIC_EXN = Exn;
3a122e1e352a clarified bootstrap;
wenzelm
parents: 62883
diff changeset
    27
open Basic_Exn;
67206
b8f30228a55b minor performance tuning, notably for Library.fold_string etc.;
wenzelm
parents: 67205
diff changeset
    28
b8f30228a55b minor performance tuning, notably for Library.fold_string etc.;
wenzelm
parents: 67205
diff changeset
    29
structure String =
b8f30228a55b minor performance tuning, notably for Library.fold_string etc.;
wenzelm
parents: 67205
diff changeset
    30
struct
b8f30228a55b minor performance tuning, notably for Library.fold_string etc.;
wenzelm
parents: 67205
diff changeset
    31
  open String;
b8f30228a55b minor performance tuning, notably for Library.fold_string etc.;
wenzelm
parents: 67205
diff changeset
    32
  fun substring (s, i, n) =
b8f30228a55b minor performance tuning, notably for Library.fold_string etc.;
wenzelm
parents: 67205
diff changeset
    33
    if n = 1 then String.str (String.sub (s, i))
b8f30228a55b minor performance tuning, notably for Library.fold_string etc.;
wenzelm
parents: 67205
diff changeset
    34
    else String.substring (s, i, n);
b8f30228a55b minor performance tuning, notably for Library.fold_string etc.;
wenzelm
parents: 67205
diff changeset
    35
end;
72113
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    36
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    37
(* FIXME workaround for 100% CPU usage in OS.Process.sleep *)
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    38
structure OS =
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    39
struct
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    40
  open OS;
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    41
  structure Process =
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    42
  struct
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    43
    open Process;
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    44
    fun sleep t =
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    45
      let
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    46
        open Thread;
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    47
        val lock = Mutex.mutex ();
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    48
        val cond = ConditionVar.conditionVar ();
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    49
      in ConditionVar.waitUntil (cond, lock, Time.now () + t) end;
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    50
  end;
2d9e40cfe9af temporary workaround for 100% CPU usage in OS.Process.sleep;
wenzelm
parents: 68918
diff changeset
    51
end;