1. Dmitry Grebeniuk
  2. parvel

Commits

Dmitry Grebeniuk  committed cc627f1

.

  • Participants
  • Parent commits f8af0e9
  • Branches default

Comments (0)

Files changed (6)

File _tags

View file
  • Ignore whitespace
 <*.ml> | <*.mli> : camlp4r, pkg_lwt
 <*.byte> | <*.native> : pkg_lwt, pkg_lwt.unix
 <*> : warn_A
+<parvel_ops.*> : -camlp4r, camlp4o

File parvel.ml

View file
  • Ignore whitespace
        значений были конкретные типы. *)
 
     value create_process_group () =
+      IO.return
       {(* gid = Counter.next g_counter
       ;*) children = []
       }
       ; process_ref.contents := Some process
       ; let disp_ctx = disp context in
         schedule_continuation disp_ctx
-      ; process
+      ; IO.return process
       )
     ;
 

File parvel.mli

View file
  • Ignore whitespace
       >
     ;
 
+
+    (* за'loop 1:
+
+       value proc ctx =
+         loop
+         where rec loop msg =
+           ...
+           >>= fun () ->
+           ctx#continue loop
+
+       за'loop 2:
+
+       value rec proc ctx msg =
+         ...
+         >>= fun () ->
+         ctx#continue (proc ctx)
+
+    *)
+
+
     (* диспетчер сообщений -- то, что содержит пользовательский код,
        но обёрнуто в абстрактный тип. *)
 
 
     (* обеспечить мономорфность получающегося типа, чтобы в случае top-level
        значений были конкретные типы. *)
-    value create_process_group : unit -> process_group 'i;
+    value create_process_group : unit -> IO.m (process_group 'i);
     value create_process : process_group 'i -> process_dispatcher 'i
-      -> process 'i;
+      -> IO.m (process 'i);
 
+    value send : process 'i -> 'i -> IO.m unit;
+    value send_group : process_group 'i -> 'i -> IO.m unit;
 
     (* нужно конкретно для частной задачи, поэтому не уверен в ценности:
        функция шлёт сообщения группе и дожидается ответа каждого из процессов
-       этой группы, затем возвращает массив ответов *)
+       этой группы, затем возвращает массив ответов:
 
-(*
     value call_group
       : group 'i 'o -> 'i -> IO.m (array 'o);
     (* если будет call, то можно будет выразить это как отсылку call-запросов

File parvel_IO.ml

View file
  • Ignore whitespace
 
 
 value run_and_ignore_result : m unit -> unit = Lwt.ignore_result;
+
+value fprintf outch fmt = Printf.ksprintf (fun s -> write outch s) fmt;
+
+(*
+value printf fmt = fprintf stdout fmt;
+*)
+
+value printf fmt = Printf.ksprintf (fun s -> write stdout s) fmt;

File tests.ml

View file
  • Ignore whitespace
+open Printf;
+module IO = Parvel_IO;
 module P = Parvel.Make(Parvel_IO);
+open Parvel_ops;
 
-value () = print_string "kva\n";
+
+value io_main =
+  IO.printf "kva\n%!"
+;
+
+
+value () = printf "go!\n%!";
+
+value main () =
+  match IO.runIO io_main with
+  [ `Ok () -> ()
+  | `Error e -> printf "main: %s\n%!" & Printexc.to_string e
+  ]
+;

File types.ml

View file
  • Ignore whitespace
 
     value run_and_ignore_result : m unit -> unit;
 
+    value printf : format4 'a unit string (m unit) -> 'a;
+
   end
 ;