OCaml异步编译

时间:2015-11-03 13:03:51

标签: ocaml

我有这段代码

open Async.Std;;

let () = print_string "Hello World\n";;

并使用

进行编译
ocamlfind ocamlopt -linkpkg -package async -thread ./hello.ml

stdout是空的......但是如果代码只是

let () = print_string "Hello World\n";;

并编译命令

ocamlfind ocamlopt -linkpkg -package async -thread ./hello.ml

我在stdout我的“Hello world”。我做错了什么?为什么第一个例子不起作用?

1 个答案:

答案 0 :(得分:3)

它不起作用,因为open Async.Std隐式覆盖print_string之类的I / O函数并使它们异步。因此,在启动调度程序之前,它们不会被执行。

open Async.Std

let () =
  print_string "Hello World\n";              (* schedule "Hello World\n" printing *)
  don't_wait_for (exit 0);                   (* schedule exit from the program *)
  Core.Std.never_returns (Scheduler.go ())   (* run the scheduler *)

详细了解异步there