comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Parameterised 'Image Attributes
Date: Sun, 20 Aug 2023 11:27:47 +0200	[thread overview]
Message-ID: <ubsmak$1a024$1@dont-email.me> (raw)
In-Reply-To: <ubsgp8$19ib8$1@dont-email.me>

On 2023-08-20 09:53, G.B. wrote:

> Could there be a language defined type F whose purpose is to support
> the description of formats? Objects of type F would "configure"
> what 'Image does when computing a representation of a date, a number, ...

Not without multiple dispatch support and classes:

    Type x Format [ x Target ]

Otherwise you get an untyped mess as in C:

    printf ("%s", 123);

In the case of 'Image the dispatch is hard-wired. The compiler generates 
it according to one of built-in classes like 'integer type'. So yes it 
would be no problem to add parameters specific to each of the classes as 
well as common parameters like padding or alignment inside a field. But 
it will never ever happen.

You seem suggesting a class-wide parameter type instead:

    type Format_Type is tagged record
       Width     : Natural := 0;
       Alignment : Alignment_Type := Left;
       Padding   : Character := ' ';
    end record;
    type Integer_Format is new Format_Type with record
       Plus_Sign : Boolean := False;
       Base      : Base_Type := 10;
    end record;

    X'Image (Format => Format_Type'Class)

This still requires a change that will be outright rejected on highest 
philosophical grounds. (:-))

However with a Format_Type you do not need 'Image. You can simply use a 
binary operation, e.g.

    function "/" (Value : Integer; Format : Integer_Format)
       return String;

So would do

    Put_Line ("X=" & X / (Width=>10, Padding=>'0', Alignment=>Right));

instead of

    Put_Line ("X=" & X'Image (Width=>10, Padding=>'0', Alignment=>Right));

Of course it must be generic, which kills all fun.

Ergo

1. Compiler magic is necessary because the language type system is too 
weak to express things like formatting.

2. No proposal however useful and reasonable will survive ARG because of #1.

3. Use a library that does the stuff. E.g.

    http://www.dmitry-kazakov.de/ada/strings_edit.htm#Integer_Edit

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

  reply	other threads:[~2023-08-20  9:27 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-18  7:18 Parameterised 'Image Attributes Rod Kay
2023-08-18  8:25 ` Luke A. Guest
2023-08-19  9:14   ` J-P. Rosen
2023-08-19 10:03     ` Dmitry A. Kazakov
2023-08-19 11:45       ` Luke A. Guest
2023-08-19 11:56       ` J-P. Rosen
2023-08-19 13:01         ` Dmitry A. Kazakov
2023-08-19 15:27     ` Jeffrey R.Carter
2023-08-20  7:53       ` G.B.
2023-08-20  9:27         ` Dmitry A. Kazakov [this message]
2023-08-21 23:11           ` Randy Brukardt
2023-08-21 23:37           ` Randy Brukardt
2023-08-22  7:38             ` Dmitry A. Kazakov
2023-08-19 16:49     ` moi
2023-08-20  7:25       ` Randy Brukardt
2023-08-20  9:43         ` Dmitry A. Kazakov
2023-08-21 23:34           ` Randy Brukardt
2023-08-22  8:13             ` Dmitry A. Kazakov
2023-08-23 10:20               ` Stephen Davies
2023-08-23 16:16                 ` Dmitry A. Kazakov
2023-08-24 19:59                   ` Stephen Davies
2023-08-25  7:26                     ` Dmitry A. Kazakov
2023-08-25  9:04                       ` Stephen Davies
2023-08-25 13:02                         ` Dmitry A. Kazakov
2023-08-28  9:18                           ` Stephen Davies
2023-08-28 10:58                             ` Dmitry A. Kazakov
2023-08-28 15:42                               ` Stephen Davies
2023-08-28 16:09                                 ` Dmitry A. Kazakov
2023-08-28 17:33                                   ` G.B.
2023-08-28 19:08                                     ` Dmitry A. Kazakov
2023-08-28 17:58                               ` Niklas Holsti
2023-08-28 19:08                                 ` Dmitry A. Kazakov
2023-09-07  1:04                               ` Randy Brukardt
2023-09-07  9:01                                 ` Dmitry A. Kazakov
2023-08-18 18:53 ` Keith Thompson
2023-09-23 10:00 ` Rod Kay
2023-09-26  5:47   ` Vadim Godunko
2023-09-26 10:15     ` Rod Kay
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox