Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Gabriel Scherer <gabriel.scherer@gmail.com>
To: David Allsopp <dra-news@metastack.com>
Cc: OCaml List <caml-list@inria.fr>
Subject: Re: [Caml-list] Vagaries of Printf variants
Date: Tue, 28 Oct 2014 10:19:34 +0100	[thread overview]
Message-ID: <CAPFanBEJkR-pEXAnf-7oRPDobTTWCjibjReZ3NFtnpQzgLzOVg@mail.gmail.com> (raw)
In-Reply-To: <E51C5B015DBD1348A1D85763337FB6D9E9667C88@Remus.metastack.local>

If you know from the start that you need this flexibility, the easiest
way is probably to use Printf.bprintf from the start, which is
reasonably efficient and flexible (or write your fprintf-formats with
%s rather than %a).

If you specifically need to convert code that uses (f)printf with
minimal changes, you have the problem that your %a/%t functions work
with out_channel, not strings. The simplest way out is probably to use
Unix.pipe (which is available on Windows) to create an out_channel
that you write into and read back the content as a string.

On Tue, Oct 28, 2014 at 10:04 AM, David Allsopp <dra-news@metastack.com> wrote:
> Daniel Bünzli wrote:
>> Le lundi, 27 octobre 2014 à 18:56, David Allsopp a écrit :
>> > but I'm sure there's a reason for its being that way!
>>
>> You may be interested in reading this:
>>
>> http://gallium.inria.fr/blog/format6/
>
> Thanks, that is enlightening! I guess the thing that gets "in the way" is the design decision to make %a operate on the printf-behaviour (i.e. for fprintf, it writes to a channel, for bprintf it writes to a buffer) rather than making %a and %t *always* return a string.
>
>> P.S. If you are using formatters the problem is less acute. Nowadays you
>> can simply define formatters for each of your types with:
>>
>> pp : Format.formatter -> t -> unit
>>
>> and a to_string function is one `Format.asprintf "%a" pp` away.
>
> I was abusing terminology - by formatters I meant printf functions i.e. selecting between ikfprintf, kfprintf, etc. in the same functions.
>
> I haven't looked at the 4.02 sources, but for what I'm doing in 4.01, what would actually be useful would be if Printf.mkprintf were public so that I could supply an alternate function for output_string (i.e. allow Printf.printf to proceed entirely as normal but do something ever-so-slightly different with the final result - and with a different format6 from using ksprintf).
>
>
> David
>
> --
> Caml-list mailing list.  Subscription management and archives:
> https://sympa.inria.fr/sympa/arc/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs

  reply	other threads:[~2014-10-28  9:20 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-27 17:56 David Allsopp
2014-10-27 18:51 ` Daniel Bünzli
2014-10-28  9:04   ` David Allsopp
2014-10-28  9:19     ` Gabriel Scherer [this message]
2014-10-28  9:33       ` David Allsopp
2014-10-28 20:18       ` [Caml-list] <DKIM> " Pierre Chambart
2014-10-29 10:34         ` David Allsopp

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAPFanBEJkR-pEXAnf-7oRPDobTTWCjibjReZ3NFtnpQzgLzOVg@mail.gmail.com \
    --to=gabriel.scherer@gmail.com \
    --cc=caml-list@inria.fr \
    --cc=dra-news@metastack.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox