comp.lang.ada
 help / color / mirror / Atom feed
* C omega
@ 2004-06-05 14:25 Pascal Obry
  2004-06-05 17:49 ` Wes Groleau
  2004-06-05 22:06 ` Adrian Knoth
  0 siblings, 2 replies; 13+ messages in thread
From: Pascal Obry @ 2004-06-05 14:25 UTC (permalink / raw)



Something quite interesting. Microsoft is going to add some concurrency
support in C-omega. There is a paper on the link I gave in a previous message.
They present the classic Reader-Writer paradigm using the C-omega chord
(only 5 chords they say) implementation, here it is:

class ReaderWriter
{
  ReaderWriter() { idle (); }

  public void Shared() & async idle() {s (1); }
  public void Shared() & async s(int n) { s(n+1); }
  public void ReleaseShared() & async s(int n) {
    if (n == 1) idle (); else s(n-1);
  }
  public void Exclusive() & async idle() {}
  public void ReleaseExclusive() {idle (); }
}

I'm not sure to fully understand the code above, but it looks quite complex
to me :)

What is interesting is that the same code(*) in Ada (not compiled) is:

protected Reader_Writer is
   function Read return Integer;
   procedure Write (X : in Integer);
private
   State : Integer;
end Reader_Writer;

protected body Reader_Writer is

   function Read return Integer is
   begin
      return State;
   end Read;

   procedure Write (X : in Integer) is
   begin
      State := X;
   end Write;

end Reader_Writer;

But of course they have given some modula-3 code to compare to the C-omega
one! Isn't it fair ?!?

Pascal.

(*) I suppose it is the same code by reading the description they gave about
the ReaderWriter C-omega implementation.

-- 

--|------------------------------------------------------
--| Pascal Obry                           Team-Ada Member
--| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
--|------------------------------------------------------
--|              http://www.obry.org
--| "The best way to travel is by means of imagination"
--|
--| gpg --keyserver wwwkeys.pgp.net --recv-key C1082595



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: C omega
  2004-06-05 14:25 C omega Pascal Obry
@ 2004-06-05 17:49 ` Wes Groleau
  2004-06-05 22:06 ` Adrian Knoth
  1 sibling, 0 replies; 13+ messages in thread
From: Wes Groleau @ 2004-06-05 17:49 UTC (permalink / raw)


Pascal Obry wrote:
> Something quite interesting.  Microsoft is going to add some concurrency
> support in C-omega. There is a paper on the link I gave in a previous message.

This reminds me of a thirty-year-old (?) advertising slogan
from DEC:    "Digital has it now!"

I guess they wanted us to think

"You don't have to wait for _________"

but every time I saw it, I thought,

"OK, we're a little slow, but we finally have ________"

-- 
Wes Groleau

    Nobody believes a theoretical analysis -- except the guy who did it.
    Everybody believes an experimental analysis -- except the guy who did it.
                                  -- Unknown



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: C omega
  2004-06-05 14:25 C omega Pascal Obry
  2004-06-05 17:49 ` Wes Groleau
@ 2004-06-05 22:06 ` Adrian Knoth
  2004-06-05 23:55   ` Roland Illig
                     ` (2 more replies)
  1 sibling, 3 replies; 13+ messages in thread
From: Adrian Knoth @ 2004-06-05 22:06 UTC (permalink / raw)


Pascal Obry <pascal@obry.org> wrote:

> class ReaderWriter
> {
>   ReaderWriter() { idle (); }
>
>   public void Shared() & async idle() {s (1); }
>   public void Shared() & async s(int n) { s(n+1); }
>   public void ReleaseShared() & async s(int n) {
>     if (n == 1) idle (); else s(n-1);
>   }
>   public void Exclusive() & async idle() {}
>   public void ReleaseExclusive() {idle (); }
> }
>
> I'm not sure to fully understand the code above, but it looks quite complex
> to me :)

Looks pretty much like semaphore-handling (Dijkstra?). Access to
a shared value (not shown here) is handled. When you call the
the Shared()-function for an instance of ReaderWriter it checks
whether this resource is idle and if so, sets s to 1.
If it is already used by others it increments the value of waiting
processes by one.

The ReleaseShared might be called to let one process say he's
no longer willingly to access this shared value, so the number
is decremented. If there is only one process left using it the
state is changed to idle.

Function Eclusive seems not to be implemented or it is a builtin
function and there is nothing more to do.

ReleaseExclusive marks the resource as available (dile).

The constructor lets new instances be idle.

> What is interesting is that the same code(*) in Ada (not compiled) is:

I wouldn't say it's the same code. Unfortunately you haven't mentioned
the website where you found this example. Otherwise it would be
possible to see what is really ment instead of wild guessing.



-- 
mail: adi@thur.de  	http://adi.thur.de	PGP: v2-key via keyserver

Leute, die mehr als ein xterm offen haben, kann man ja wohl sowieso
nicht ernst nehmen.      (Felix von Leitner in dcoul-tng@socha.net)



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: C omega
  2004-06-05 22:06 ` Adrian Knoth
@ 2004-06-05 23:55   ` Roland Illig
  2004-06-06  2:21     ` James Rogers
  2004-06-06  9:49   ` Pascal Obry
  2004-06-06 22:14   ` Georg Bauhaus
  2 siblings, 1 reply; 13+ messages in thread
From: Roland Illig @ 2004-06-05 23:55 UTC (permalink / raw)


Adrian Knoth wrote:
> I wouldn't say it's the same code. Unfortunately you haven't mentioned
> the website where you found this example. Otherwise it would be
> possible to see what is really ment instead of wild guessing.

http://www.google.de/search?q=public+void+Shared+async+idle+&ie=UTF-8

http://research.microsoft.com/~nick/polyphony/intro.htm

Roland



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: C omega
  2004-06-05 23:55   ` Roland Illig
@ 2004-06-06  2:21     ` James Rogers
  2004-06-06  2:53       ` Wes Groleau
  2004-06-06  9:47       ` C omega Pascal Obry
  0 siblings, 2 replies; 13+ messages in thread
From: James Rogers @ 2004-06-06  2:21 UTC (permalink / raw)


Roland Illig <roland.illig@gmx.de> wrote in news:2if4rkFm3j4bU1@uni-
berlin.de:

> Adrian Knoth wrote:
>> I wouldn't say it's the same code. Unfortunately you haven't mentioned
>> the website where you found this example. Otherwise it would be
>> possible to see what is really ment instead of wild guessing.
> 
> http://www.google.de/search?q=public+void+Shared+async+idle+&ie=UTF-8
> 
> http://research.microsoft.com/~nick/polyphony/intro.htm

It would appear from these links that the concurrency in C omega is taken
directly from polyphonic C# (or perhaps C omega is a new name for
polyphonic C#).

The original example:

class ReaderWriter {

   ReaderWriter() {
      Idle();
   }

   void Exclusive() & private async Idle() {
   }

   void ReleaseExclusive() {
      Idle(); 
   } 

   void Shared() & private async Idle() {
      S(1);
   }

   void Shared() & private async S(int n) {
      S(n+1);
   }

   void ReleaseShared() & private async S(int n) { 
      if (n == 1) Idle(); else S(n-1); 
   }
}

is clearly an example of a read/write lock. The public methods
Exclusive(), ReleaseExclusive(), Shared(), and ReleaseShared()
are synchronous methods. They will not complete until a matching
private asynchronous method (in this case Idle() or S()) completes.

This code produces a behavior similar to the following Ada code:

protected lock is
   entry Exclusive;
   procedure Release_Exclusive;
   entry Shared;
   entry Release_Shared;
private
   N : Natural := 0;
   Idle : Boolean := True;
end lock;

protected body lock is
  entry Exclusive when Idle is
  begin
      Idle := False;
  return;
  procedure Release_Exclusive is
  begin
      Idle := True;
  end Release_Exclusive;
  entry Shared when Idle or N > 0 is
  begin
      Idle := False;
      N := N + 1;
  end Shared;
  entry Release_Shared when N > 1 is
  begin
     N := N - 1;
     if N = 0 then
        Idle := True;
     end if;
  end Release_Shared;
end lock;

Note that my Ada explicitly sets Idle to false
whereas the C# (or C omega) code simply fails to 
call Idle(). The weakness in algorithm is that
a writer can simply call Release_Exclusive 
immediately before calling Exclusive. This will
cause a collision between shared and exclusive
access.

In other words, the example contains a fatal flaw.

Jim Rogers



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: C omega
  2004-06-06  2:21     ` James Rogers
@ 2004-06-06  2:53       ` Wes Groleau
  2004-06-06 18:09         ` [off-topic] bad puns Wes Groleau
  2004-06-06  9:47       ` C omega Pascal Obry
  1 sibling, 1 reply; 13+ messages in thread
From: Wes Groleau @ 2004-06-06  2:53 UTC (permalink / raw)


James Rogers wrote:
> It would appear from these links that the concurrency in C omega is taken
> directly from polyphonic C# (or perhaps C omega is a new name for
> polyphonic C#).

So we endured bad coffee-related puns ad nauseum
and now that they've tapered off, Microsoft
is going to fill the boid with bad music puns?

-- 
Wes Groleau

People would have more leisure time if it weren't
for all the leisure-time activities that use it up.
                        -- Peg Bracken



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: C omega
  2004-06-06  2:21     ` James Rogers
  2004-06-06  2:53       ` Wes Groleau
@ 2004-06-06  9:47       ` Pascal Obry
  2004-06-06 12:32         ` James Rogers
  1 sibling, 1 reply; 13+ messages in thread
From: Pascal Obry @ 2004-06-06  9:47 UTC (permalink / raw)



James Rogers <jimmaureenrogers@att.net> writes:

> is clearly an example of a read/write lock. 

In that case my first Ada example does exactly that, no ?
I do not want to translate word-for-word the C-omega example.

Pascal.

-- 

--|------------------------------------------------------
--| Pascal Obry                           Team-Ada Member
--| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
--|------------------------------------------------------
--|              http://www.obry.org
--| "The best way to travel is by means of imagination"
--|
--| gpg --keyserver wwwkeys.pgp.net --recv-key C1082595



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: C omega
  2004-06-05 22:06 ` Adrian Knoth
  2004-06-05 23:55   ` Roland Illig
@ 2004-06-06  9:49   ` Pascal Obry
  2004-06-06 22:14   ` Georg Bauhaus
  2 siblings, 0 replies; 13+ messages in thread
From: Pascal Obry @ 2004-06-06  9:49 UTC (permalink / raw)



Adrian Knoth <adi@thur.de> writes:

> I wouldn't say it's the same code. Unfortunately you haven't mentioned
> the website where you found this example. 

As I said, it was on another message I post the same day :)

Pascal.

-- 

--|------------------------------------------------------
--| Pascal Obry                           Team-Ada Member
--| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
--|------------------------------------------------------
--|              http://www.obry.org
--| "The best way to travel is by means of imagination"
--|
--| gpg --keyserver wwwkeys.pgp.net --recv-key C1082595



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: C omega
  2004-06-06  9:47       ` C omega Pascal Obry
@ 2004-06-06 12:32         ` James Rogers
  0 siblings, 0 replies; 13+ messages in thread
From: James Rogers @ 2004-06-06 12:32 UTC (permalink / raw)


Pascal Obry <pascal@obry.org> wrote in news:uzn7hhvb6.fsf@obry.org:

> 
> James Rogers <jimmaureenrogers@att.net> writes:
> 
>> is clearly an example of a read/write lock. 
> 
> In that case my first Ada example does exactly that, no ?
> I do not want to translate word-for-word the C-omega example.

Actually your first Ada example was better. It did not contain
the pathological behavior of the C-omega example.

Jim Rogers



^ permalink raw reply	[flat|nested] 13+ messages in thread

* [off-topic] bad puns
  2004-06-06  2:53       ` Wes Groleau
@ 2004-06-06 18:09         ` Wes Groleau
  0 siblings, 0 replies; 13+ messages in thread
From: Wes Groleau @ 2004-06-06 18:09 UTC (permalink / raw)


Wes Groleau wrote:
> and now that they've tapered off, Microsoft
> is going to fill the boid with bad music puns?

And 'boid' was a typo, not a bad pun.

-- 
Wes Groleau
    "Would the prodigal have gone home if
     the elder brother was running the farm?"
                       -- James Jordan



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: C omega
  2004-06-05 22:06 ` Adrian Knoth
  2004-06-05 23:55   ` Roland Illig
  2004-06-06  9:49   ` Pascal Obry
@ 2004-06-06 22:14   ` Georg Bauhaus
  2004-06-07 11:17     ` I R T
  2004-06-07 15:45     ` Adrian Knoth
  2 siblings, 2 replies; 13+ messages in thread
From: Georg Bauhaus @ 2004-06-06 22:14 UTC (permalink / raw)


Adrian Knoth <adi@thur.de> wrote:
: Pascal Obry <pascal@obry.org> wrote:
: 
:> class ReaderWriter
:> {
...
:> }
:>
:> I'm not sure to fully understand the code above, but it looks quite complex
:> to me :)
: 
: Looks pretty much like semaphore-handling (Dijkstra?).

They hint at it on the Polyphonic pages IIRC. If you look at
the names of those involved in developing C om, you will find
people who know Ada (Luca Cardelli somehow did ring a bell or two)
and other non-C languages.

<rant>Thus, they know how it should be done. But I guess that
they mustn't do the right thing, for marketing reasons:

- "Just" adding concurrency somehow to a well known programming language
  is popular. In particular if the change "just" adds well known concepts
  like semaphores. To the programmer: "you just have to ..., and everything
  is under your control". (Euphemistically for something else...
  By analogy everything is under control when you write at object code
  level...)

- They could recommend a language with a track record, an O-O
  language that has generic types, subprogram objects, a
  simple but useful tasking model at language level, garbage
  collection, a C interface, and design by contract.
  A language that was among the first to be integrated with .NET,
  in cooperation with Microsoft.
  It is not a "Microsoft language" though.

- Stepwise refinement of a programming language leaves room
  for improvement. Both at the language design level, and
  at the "new features, less bugs, new language used" level
  in vendor produce (programs). Improvements can be sold.

But OTOH, maybe they find out something new from which the world
will profit.</rant>

It is interesting to see how the languages arrive at ideas that have
been present in Ada for a while know (at least that is what I see
being a dilettante). Maybe there should be a new commercial language
with mostly Ada syntax and semantics, using a fair amount of curly
braces, and known not to be used by the weapon makers, but: with a
different name and a new history. I guess it could be an interesting
offer.

-- Georg Bauhaus



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: C omega
  2004-06-06 22:14   ` Georg Bauhaus
@ 2004-06-07 11:17     ` I R T
  2004-06-07 15:45     ` Adrian Knoth
  1 sibling, 0 replies; 13+ messages in thread
From: I R T @ 2004-06-07 11:17 UTC (permalink / raw)


Georg Bauhaus <sb463ba@l1-hrz.uni-duisburg.de> writes:


> people who know Ada (Luca Cardelli somehow did ring a bell or two)
> and other non-C languages.

Cardelli is very well known in the type theory and functional programming
fields.

If he is involved in C omega, it should well be worth a look.

See:
http://www.luca.demon.co.uk/



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: C omega
  2004-06-06 22:14   ` Georg Bauhaus
  2004-06-07 11:17     ` I R T
@ 2004-06-07 15:45     ` Adrian Knoth
  1 sibling, 0 replies; 13+ messages in thread
From: Adrian Knoth @ 2004-06-07 15:45 UTC (permalink / raw)


Georg Bauhaus <sb463ba@l1-hrz.uni-duisburg.de> wrote:

> being a dilettante). Maybe there should be a new commercial language
> with mostly Ada syntax and semantics, using a fair amount of curly
> braces, and known not to be used by the weapon makers, but: with a
> different name and a new history. I guess it could be an interesting
> offer.

You can sell it right now. Just call it a integrated something
and use sed to replace "begin" by { and "end" by }, also
tackling stuff like "end loop" and "end if" ;)


-- 
mail: adi@thur.de  	http://adi.thur.de	PGP: v2-key via keyserver

Geh sterben. Und nimm Deinen geistig behinderten Freund mit.
					(Robin S. Socha in dcoul.misc)



^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2004-06-07 15:45 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-06-05 14:25 C omega Pascal Obry
2004-06-05 17:49 ` Wes Groleau
2004-06-05 22:06 ` Adrian Knoth
2004-06-05 23:55   ` Roland Illig
2004-06-06  2:21     ` James Rogers
2004-06-06  2:53       ` Wes Groleau
2004-06-06 18:09         ` [off-topic] bad puns Wes Groleau
2004-06-06  9:47       ` C omega Pascal Obry
2004-06-06 12:32         ` James Rogers
2004-06-06  9:49   ` Pascal Obry
2004-06-06 22:14   ` Georg Bauhaus
2004-06-07 11:17     ` I R T
2004-06-07 15:45     ` Adrian Knoth

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