Почему %b устарел в Printf?

#printf #ocaml

#printf #ocaml

Вопрос:

API модуля Printf детализирует флаги преобразования типов, среди которых:

 %B: convert a boolean argument to the string true or false
%b: convert a boolean argument (deprecated; do not use in new programs).
  

Но в нем не говорится, почему %b он устарел. Почему %B лучше, чем %b ?

Комментарии:

1. Потому что в большинстве других языков, которые поддерживают форматирование в стиле printf, %b , если это что-то значит, означает печать двоичного файла (строка из 0 и 1)?

2. @ChrisDodd согласно документации, которую я нашел, это ничего не значит в (стандартном) C или C , означает экранированную строку в bash и логическое значение для java. По-видимому, Python использует b , но внутри пользовательской директивы форматирования, с {x:b} которой вряд ли можно спутать %b . Я нашел упоминание о %b for binary в Perl, но здесь %B есть квази-синоним (в итоге 0bxxxxx... получается or 0Bxxxxx... ), поэтому я не вижу веской причины отдавать предпочтение одному над другим. По крайней мере, сейчас: конечно, все могло быть по-другому, когда %b он был устаревшим в OCaml.

Ответ №1:

Люди официально ответили бы так: преобразования с заглавными буквами типа %C и %S (не %c и %s ) печатают вещи в анализируемых форматах с помощью OCaml. За %b %B этим последовало изменение на , поскольку оно печатает логические значения как true и false , которые также можно анализировать OCaml.

Вы можете найти предысторию здесь: http://caml.inria.fr/mantis/view.php?id=1438 . Была ветка, которая представила это %B , а затем изменила значение %b двоичных файлов for . Последнее нарушило обратную совместимость, поэтому эта часть была отклонена. В результате сегодня у нас есть два преобразования для логических %B значений и %b .