TEAM-ADA Archives

Team Ada: Ada Programming Language Advocacy


Options: Use Classic View

Use Monospaced Font
Show Text Part by Default
Condense Mail Headers

Topic: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Sender: "Team Ada: Ada Advocacy Issues (83 & 95)" <[log in to unmask]>
From: Roger Racine <[log in to unmask]>
Date: Thu, 5 Aug 1999 11:44:36 -0400
MIME-version: 1.0
Content-type: text/plain; charset="us-ascii"
Reply-To: Roger Racine <[log in to unmask]>
Parts/Attachments: text/plain (50 lines)
Terminology seems to be a big problem with people learning Ada.  The Ada
language uses different terminology than others (aka C, C++, Java).  The
latest example is with "tag type" vs "class", but a much older difference
is with Ada's use of the word "task" vs "thread" in C.  Ada's terminology
is older, I believe (I have a 1974 text "Operating Systems" by Madnick and
Donovan that uses "task"; it does not mention "thread").

I personally like Ada's terminology because it agrees with A) my text book;
B) many other real-time operating systems throughout my experience
(starting with the Space Shuttle language HAL/S in the 1970s, continuing to
real-time operating systems and Ada in the 1980s).  The only reference to
"thread" in my experience is with the POSIX standard.

I have seen some discussions about Ada tasks vs POSIX threads, and was
surprised to see someone suggesting that they are not synonymous.  The
argument went something like this: Since tasks are built in to the
language, the compiler knows about them.  Since the compiler knows about
them, there are times that the compiler can optimize them such that a new
thread is not needed.  Therefore there is a difference in terminology.

This looks like an interesting attempt at re-writing history, since I would
be surprised to find any references to "thread" prior to Ada's first usage
of the term "task".  And the Rationale for Ada83 uses the same definition
as was in my text book ("a computation that may be done concurrently with
other computations").  While it is true that if one uses the POSIX services
to create a thread, then a thread is really created, it would be difficult
to say there is really an Ada task if the compiler optimizes it away (it
might be in the source code, but the debugger would not think it existed).

There are at least two good ways to proceed within the Ada community.

1) Change the Ada terminology to agree with the POSIX (and C) terminology.
This has the benefits of easier communication, accepting standard
terminology, and (slightly) easier learning of Ada.  Allow "thread" to be
used in any place where "task" is now allowed (add one more reserved word).

2) Use the Ada terminology consistently.  This separates us from the C
world (this is a good thing).  It agrees with history.  It does not create
a new reserved word.

By the way, it is interesting that Linux uses the word "task" in its
implementation of process functionality (including threads), and at least
one Ada vendor uses "thread" in runtime system routines implementing tasks.

Roger Racine
Draper Laboratory, MS 31
555 Technology Sq.
Cambridge, MA 02139, USA