2015-11-03 141 views
1

我有這樣的代碼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 

我在標準輸出我的「你好世界」。我做錯了什麼?爲什麼第一個例子不工作?

回答

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