comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: RFC: Prototype for a user threading library in Ada
Date: Thu, 7 Jul 2016 18:43:59 -0500
Date: 2016-07-07T18:43:59-05:00	[thread overview]
Message-ID: <nlmpfs$b7d$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: nlloma$1vh8$1@gioia.aioe.org

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
news:nlloma$1vh8$1@gioia.aioe.org...
> On 07/07/2016 03:00, Randy Brukardt wrote:
...
>> Usually, compilers just don't inline in such circumstances, and no one
>> really cares unless they happen to look at a machine code listing.
>
> How the compiler can predict it will run out of memory?

Why would it have to? Inlining is just the duplication of some internal data 
structure; if you run out of memory doing that duplication, you just forget 
the operation and back out any changes. Our optimizer works that way in the 
unlikely case that it runs out of memory (at least it is supposed to; it's 
hard to test because it's hard to make the necessary conditions).

Ada programs at least have a chance of recovering from an out-of-memory 
situation, and it certainly makes sense to use that here. (One could also 
precheck that enough memory is available, but of course that's never certain 
to be true when you actually do the allocation, so you still need the 
fallback code.)

>>> With mapping tasks to threads you fail at run-time, and there is nothing
>>> you can do to prevent that from happening.
>>
>> Certainly not: the threads are all created at program-startup (5 threads 
>> for
>> 4 cores, I think),
>
> In that case the compiler must do all system I/O in an asynchronous way 
> presenting it as blocking for Ada task. This is what is I would gladly 
> have and what will satisfy the OP. The problem is, I suppose, it is not 
> what the compiler does.
>
>> No language-defined I/O (or the sockets library, for that matter) would 
>> use
>> blocking I/O. User-defined code could, of course, call blocking I/O (that
>> being the main reason to allow more threads to be added manually). But it
>> would be strongly discouraged.
>
> Ah, but that is the point. The tasking model is not allowed to change the 
> semantics. This means that if your RTS takes the liberty to use single 
> thread for multiple tasks, then it also must convert *all* synchronous I/O 
> into asynchronous transparently to the Ada program.

But of course it's impossible for the compiler to change user-written code. 
If you do a direct interface to some C API, there is no way the compiler 
could change that (nor would it be a good idea to do so).

> I know that Ada RM does not require it, but I assure you that virtually no 
> Ada user will accept anything else.

That's demonstratably false, since Janus/Ada has always worked this way, and 
we've had far more than than zero customers over the years.

In any case, there would be no issue unless the programmer writes their own 
I/O; using anything we provide (language-defined or implementation-defined) 
would work. I'd think the vast majority of Ada programs would use Stream_IO 
compared to something of their own design. (Sockets is the big issue, since 
the language doesn't have it, but portable libraries can easily be made to 
do the right thing.)

                             Randy.


  reply	other threads:[~2016-07-07 23:43 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-17  9:44 RFC: Prototype for a user threading library in Ada Hadrien Grasland
2016-06-17 16:18 ` Niklas Holsti
2016-06-17 16:46   ` Dmitry A. Kazakov
2016-06-18  8:16     ` Hadrien Grasland
2016-06-18  8:47       ` Dmitry A. Kazakov
2016-06-18  9:17         ` Hadrien Grasland
2016-06-18 11:53           ` Dmitry A. Kazakov
2016-06-20  8:23             ` Hadrien Grasland
2016-06-20  9:22               ` Dmitry A. Kazakov
2016-06-23  1:42       ` Randy Brukardt
2016-06-23  8:39         ` Dmitry A. Kazakov
2016-06-23 22:12           ` Randy Brukardt
2016-06-24  7:34             ` Dmitry A. Kazakov
2016-06-24 23:00               ` Randy Brukardt
2016-06-25  7:11                 ` Dmitry A. Kazakov
2016-06-26  2:02                   ` rieachus
2016-06-26  6:26                     ` Dmitry A. Kazakov
2016-06-24  0:38           ` rieachus
2016-06-25  6:28             ` Dmitry A. Kazakov
2016-06-26  1:34               ` rieachus
2016-06-26  3:21               ` Randy Brukardt
2016-06-26  6:15                 ` Dmitry A. Kazakov
2016-06-28 20:44                   ` Anh Vo
2016-07-02  4:13                   ` Randy Brukardt
2016-07-02 10:25                     ` Dmitry A. Kazakov
2016-07-05 21:53                       ` Randy Brukardt
2016-07-06  9:25                         ` Dmitry A. Kazakov
2016-07-07  0:32                           ` Randy Brukardt
2016-07-07  6:08                             ` Niklas Holsti
2016-07-08  0:03                               ` Randy Brukardt
2016-07-08  7:32                                 ` Dmitry A. Kazakov
2016-07-11 19:40                                   ` Randy Brukardt
2016-07-12  8:37                                     ` Dmitry A. Kazakov
2016-07-12 21:31                                       ` Randy Brukardt
2016-07-08 20:17                                 ` Niklas Holsti
2016-06-24 21:06         ` Hadrien Grasland
2016-06-26  3:09           ` Randy Brukardt
2016-06-26  6:41             ` Dmitry A. Kazakov
2016-07-02  4:21               ` Randy Brukardt
2016-07-02 10:33                 ` Dmitry A. Kazakov
2016-07-05 21:24                   ` Randy Brukardt
2016-07-06 13:46                     ` Dmitry A. Kazakov
2016-07-07  1:00                       ` Randy Brukardt
2016-07-07 14:23                         ` Dmitry A. Kazakov
2016-07-07 23:43                           ` Randy Brukardt [this message]
2016-07-08  8:23                             ` Dmitry A. Kazakov
2016-07-11 19:44                               ` Randy Brukardt
2016-06-26  9:09             ` Hadrien Grasland
2016-07-02  4:36               ` Randy Brukardt
2016-07-02  5:30                 ` Simon Wright
2016-07-05 21:29                   ` Randy Brukardt
2016-07-02 11:13                 ` Hadrien Grasland
2016-07-02 13:18                   ` Dmitry A. Kazakov
2016-07-02 16:49                     ` Hadrien Grasland
2016-07-02 21:33                       ` Niklas Holsti
2016-07-03 20:56                         ` Hadrien Grasland
2016-07-02 17:26                   ` Niklas Holsti
2016-07-02 21:14                   ` Niklas Holsti
2016-07-03  7:42                     ` Hadrien Grasland
2016-07-03  8:39                       ` Dmitry A. Kazakov
2016-07-03 21:15                         ` Hadrien Grasland
2016-07-04  7:44                           ` Dmitry A. Kazakov
2016-07-05 21:38                   ` Randy Brukardt
2016-06-21  2:40     ` rieachus
2016-06-21  7:34       ` Dmitry A. Kazakov
2016-06-18  7:56   ` Hadrien Grasland
2016-06-18  8:33 ` Hadrien Grasland
2016-06-18 11:38 ` Hadrien Grasland
2016-06-18 13:17   ` Niklas Holsti
2016-06-18 16:27   ` Jeffrey R. Carter
2016-06-20  8:42 ` Hadrien Grasland
2016-07-10  0:45 ` rieachus
replies disabled

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