Непонятные предупреждения об устаревании библиотеки OCaml Base / Core - PullRequest
0 голосов
/ 12 марта 2020

Я пробовал библиотеки 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, соответственно.

  1. Почему я не получаю предупреждение об устаревании для 'mod', когда я использую open Core, если он предупреждал меня, если я использовал open Base?

  2. Почему я не получаю оповещение для stdout?

2-1. Нормально ли необходимо open Stdio, когда я open Core?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...