Я пробовал библиотеки Base / Core Джейн Стрит уже несколько часов, и меня очень смутили предупреждения о развращении.
Со следующим кодом:
open Base
(* open Core *)
open Stdio
let _ = printf "%d" (4 mod 3)
I получить предупреждение об устаревании:
Alert deprecated: Base.mod
[2016-09] this element comes from the stdlib distributed with OCaml.
Use (%), which has slightly different semantics, or Int.rem which is equivalent.
Я понимаю, что должен использовать %
или Int.rem
, но когда я просто open Core
, предупреждение исчезает. Документация, кажется, не проясняет многое относительно этих «устареваний».
Кроме того, со следующим кодом:
(* open Base *)
open Core
(* open Stdio *)
let _ = Out_channel.output_string stdout "Hello, OCaml"
let line = In_channel.input_line_exn stdin
Я получаю
Alert deprecated: Core.stdin
[since 2016-04] Use [In_channel.stdin]
, но на удивление Нет предупреждения для stdout
.
Когда я раскомментирую строку (* open Stdio *)
, я больше не получаю предупреждения. Я могу предположить, что модуль Stdio, вероятно, затеняет stdin / stdout, но я подумал, что open Core
было достаточно для этого, поскольку это зависит от модуля Stdio.
Я использовал
ocamlfind ocamlopt -o output.out -linkpkg -package base,stdio -thread output.ml
и с -package base,stdio
, соответственно.
Почему я не получаю предупреждение об устаревании для 'mod', когда я использую open Core
, если он предупреждал меня, если я использовал open Base
?
Почему я не получаю оповещение для stdout
?
2-1. Нормально ли необходимо open Stdio
, когда я open Core
?